| greegreeman |
05.03.2010 14:36 |
попадание в hero. в чем я не прав?
простенькая гама. у моего героя есть враги. я создаю таймер и в его обработчике пушу врагов в массив. рандомно выбираю одного из них и добавляю в нужное мне место:
Код AS3:
// TIMER event handler
private function hOnEnemyTimer(evt:TimerEvent):void{
enemyArray.push(bottle);
enemyArray.push(cigarettes);
enemyArray.push(syringe);
enemyNum = Math.abs(Math.round(Math.random()*enemyArray.length - 1));
if(enemyNum > 2)
enemyNum = 2;
gameLevels.addChild(enemyArray[enemyNum]);
enemyArray[enemyNum].addEventListener(Event.ENTER_FRAME, hOnEnterFrame);
}
дальше по энтерфрэйму их запускаю детектирую попадание в героя. если попал, то удаляю врага и делаю сплис из массива, если не попал, то после того как враг долетел до начала стэйджа (запускаю справа на лево) делаю тоже самое, удаляю врага, сплис из массива и обработчика энтерфрэйм:
Код AS3:
// ENTER_FRAME event handler
private function hOnEnterFrame(evt:Event):void {
var step = - 12;
var tgtX = enemyArray[enemyNum].x + step;
enemyArray[enemyNum].x = tgtX;
if(enemyArray[enemyNum].hitTestObject(hero)){
trace("popal!!!");
enemyArray[enemyNum].removeEventListener(Event.ENTER_FRAME, hOnEnterFrame);
gameLevels.removeChild(enemyArray[enemyNum]);
enemyArray.splice(enemyNum, 1);
healthIndicator.numberOfHealthAtTheMoment -= Properties.REDUCTION_RATE_OF_HEALTH_IF_CONTACT;
} else if (enemyArray[enemyNum].x == 0){
trace("promah!!!");
enemyArray[enemyNum].removeEventListener(Event.ENTER_FRAME, hOnEnterFrame);
gameLevels.removeChild(enemyArray[enemyNum]);
enemyArray.splice(enemyNum, 1);
}
}
столкнулся со следующими проблемами. если мой таймер тикает быстро, а враг летит медленно, то начинаются лаги. вторая проблема возникла, когда я захотел еще один таймер создать и так же с ним работать. подскажите в чем я не прав, плиз. может подход корявый и надо вообще по другому задачу решать?
|