Então você faz hitTestObject no for dentro de um EnterFrame, hein? Deixa eu adivinhar:
hero.addEventListener(Event.ENTERFRAME, testaColisao); function testaColisao(evt:Event):void{ var hero:MovieClip=MovieClip(evt.currentTarget); var inimigo:MovieClip; for(var i:int=0; i < inimigos.lenght; i++){ inimigo=MovieClip(inimigos[i]); if(hero.hitTestObject(inimigo)){ trace("bateu!!!"); } } }
Tá loco!!!
Quem sabe você pensa diferente e faz com um Array bidimensional? A idéia é que cada vez que (por exemplo), seu hero se mover ou se cenário se moverem, você muda o índice do Array. Se tem alguma coisa com que colidir, o ínidice é 1. Se não, é 0.
var mapa:Array= [ [0,0,0,0,0,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0] ]; var vel:int=200/mapa[0].length; var indiceX:int=4; var indiceY:int=7; stage.addEventListener(KeyboardEvent.KEY_DOWN, moveCenario); function moveCenario(evt:KeyboardEvent) { if (evt.keyCode==Keyboard.LEFT) { if (mapa[indiceY][indiceX-1]!=1) { indiceX-=1; fundo.x+=vel; } }
Neste exemplo o cenário anda apenas quando a tecla LEFT do teclado é pressionada. A posição inicial (os valores inicias das variáveis indiceX e indiceY) é dada pela posição do hero no cenário.
O resultado é este (clique sobre a]o swf para dar foco e use a tecla LEFT):
O código que está aí não está completo… Você só vai conseguir dar um passo para cima (na verdade, é o cenário que se move) e vai dar de “cara” na parede. Além disso, se você baixar o fla, vai perceber que não implementei controles de cenário (impedir a movimentação quando chegar nos extremos). Mas tudo isso é implementável. Esta base é usada por engines “isométricas” para controlar tanto a movimentação quanto as colisões e profundidades (o que está na frente e o que está atrás).
Uma engine bem conhecida é esta aqui: http://code.google.com/p/as3isolib/
E se você achou bala esse código (porque eu acho!) pode ler muito mais sobre isso neste site, que é uma importante referência para quem faz games (fpara flash): http://www.tonypa.pri.ee/
PS: Este post foi escrito porque meus alunos de projeto de games, o Beto e o William me torraram a paciência até eu explicar como fazia isso. Eu não podia deixar eles fazendo hitTest no for dentro de um EnterFrame para um cenário com 5.000 pixels de largura. Boa sorte meninos! Quero ver esse jogo funcionando!




Recent Comments