Lord_RDR 0 Denunciar post Postado Junho 8, 2011 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
Irineu Antunes 2 Denunciar post Postado Junho 10, 2011 talvez: [corpo][calda] snakeTail.x = snakePart.x + snakePart.width ou: [calda][corpo] snakeTail.x = snakePart.x - snakeTail.width Compartilhar este post Link para o post Compartilhar em outros sites