Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lord_RDR

adição de objeto na displayList

Recommended Posts

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 ()
{
// create game sprite
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 ();
}
else if (hitTail())
{
	gameOver ();
}
else
{

	// 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);


}
// place all parts of snake
function placeTail ()
{
for (var i:int=snakeParts.length-1; i>0; i--)
{
	snakeParts[i].x = snakeParts[i-1].x;
	snakeParts[i].y = snakeParts[i-1].y;
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.