Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia a todos,
Meu nome é Rennan e estou desenvolvendo um pequeno jogo em flash, afim de aprimorar meus conhecimentos em POO. Trata-se de um remake do jogo "Snake".
Encontrei algumas referências na internet e estou aprimorando desenvolvendo minha versão. Porém esta ocorrendo um efeito não desejado.
Para construir o personagem Snake, eu possuo 3 objetos(mc´s) como snakeHead(cabeça), snakePart(corpo) e snakeTail(cauda).
Durante o processo de criação quando ocorre a colissão com uma fruta, o corpo do snake é criado corretamente, mas, antes de adiconar a calda, a calda é criada na posição 0, 0(o que eu não gostaria que acontecesse, gostaria que já fosse gerada na posição correta, assim como o corpo). Mas isso não ocorre.
Alguém poderia me auxiliar por favor?
Segue o código:
Desde já eu agradeço a todos desse forúm.
// constants
const gridSize:int = 20;
const leftWall:int = 0;
const rightWall:int = 520;
const topWall:int = 0;
const bottomWall:int = 380;
const startSpeed:int = 200;
const startPoint:Point = new Point(260,180);
// game state
var gameSprite:Sprite;
var food:Food = new Food();
var gameTimer:Timer;
var snakeParts:Array;
// snake velocity
var snakeMoveX:Number = 0;
var snakeMoveY:Number = 0;
var nextMoveX:Number = 1;
var nextMoveY:Number = 0;
var snakeTail:SnakeTail = null;
GameApp ();
function GameApp ()gameSprite = new Sprite();
addChild (gameSprite);
// create first part of snake
snakeParts = new Array();
var firstSnakePart = new SnakeHead();
firstSnakePart.x = startPoint.x;
firstSnakePart.y = startPoint.y;
snakeParts.push (firstSnakePart);
gameSprite.addChild (firstSnakePart);
snakeTail = new SnakeTail();
snakeTail.x = firstSnakePart.x+2;
snakeTail.y = firstSnakePart.y;
snakeParts.push (snakeTail);
gameSprite.addChild (snakeTail);
// create first food
gameSprite.addChild (food);
placeFood ();
// set up listener and timer
stage.addEventListener (KeyboardEvent.KEY_DOWN,keyDownFunction);
gameTimer = new Timer(startSpeed);
gameTimer.addEventListener (TimerEvent.TIMER,moveSnake);
gameTimer.start ();
}
function moveSnake (event:TimerEvent)snakeMoveX = nextMoveX;
snakeMoveY = nextMoveY;
var newX:Number = snakeParts[0].x + snakeMoveX*gridSize;
var newY:Number = snakeParts[0].y + snakeMoveY*gridSize;
// check for collision
if ((newX > rightWall) || (newX < leftWall) || (newY > bottomWall) || (newY < topWall))
{
gameOver ();
} gameOver ();
}// check for food
if ((newX == food.x) && (newY == food.y))
{
placeFood ();
newSnakePart ();
gameTimer.delay -= 2;
}
placeTail ();
snakeParts[0].x = newX;
snakeParts[0].y = newY;
}
}
function newSnakePart ()//snakeParts.pop ();
//gameSprite.removeChild (snakeTail);
//snakeTail = null;
for each (var item in snakeParts)
{
if (item is SnakeTail)
{
trace("I have a tail.");
snakeParts.pop ();
//gameSprite.removeChild (snakeTail);
//snakeTail = null;
trace("Tail was deleted.");
var newPart:SnakePart = new SnakePart();
gameSprite.addChild (newPart);
snakeParts.push (newPart);
break;
}
}
//snakeTail = new SnakeTail();
snakeParts.push (snakeTail);
//gameSprite.addChild (snakeTail);
} snakeParts[i].x = snakeParts[i-1].x;
snakeParts[i].y = snakeParts[i-1].y;
}
}Carregando comentários...