Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   попадание в hero. в чем я не прав? (http://www.flasher.ru/forum/showthread.php?t=137140)

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

столкнулся со следующими проблемами. если мой таймер тикает быстро, а враг летит медленно, то начинаются лаги. вторая проблема возникла, когда я захотел еще один таймер создать и так же с ним работать. подскажите в чем я не прав, плиз. может подход корявый и надо вообще по другому задачу решать?

F1esk 05.03.2010 14:50

в топку enter_frame. Напиши класс, в котором будет таймер постоянно работать, класс будет принимать функции и вызывать их через заданный интервал и/или n-раз.


Часовой пояс GMT +4, время: 05:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.