AS3 Скорость пикселей в секунду - PullRequest
0 голосов
/ 09 ноября 2011

Парень на этом форуме сказал мне использовать это: Пропуск кадра на Flash Вместо того, чтобы делать как thing.x -= 4;

Итак, я сделал это:

package  {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent; 
    import flash.utils.getTimer;


    public class Seamine extends MovieClip {

        private var core:Object;

        private var lastFrame:int = 0;
        private var thisFrame:int;
        private var pixelsPerSecond:Number = 100;
        private var percentToMove:Number; 

        public function Seamine():void{

            addEventListener(Event.ADDED_TO_STAGE, onadd);
        }

        private function onadd(e:Event){
            stage.addChild(this);
            addEventListener(Event.ENTER_FRAME, loop);
        }

        private function loop(e:Event):void{

            // Get the miliseconds since the last frame
            thisFrame = getTimer();
            percentToMove = (thisFrame - lastFrame) / 1000;
            // Save the value for next frame.
            lastFrame = thisFrame;
            // Update your system based on time, not frames.
            this.x -= pixelsPerSecond * percentToMove;


            if(this.x < 0 - this.width/2)
            {
                stage.removeChild(this);
                removeEventListener(Event.ENTER_FRAME, loop);
                removeEventListener(Event.ADDED_TO_STAGE, onadd);
            }

            if(GlobalVariables.GameOver == 1)
            {
                this.alpha -= .03;
            }

            if(this.alpha == 0)
            {
                this.alpha = 0;
                stage.removeChild(this);
                removeEventListener(Event.ENTER_FRAME, loop);
                removeEventListener(Event.ADDED_TO_STAGE, onadd);
            }

        }

    }

}

Но по какой-то причине мой "Seamine" занимает другие позиции? Так что это не начинается в начале. Пример.

1 Запуск Seamine, он имеет правильную скорость. Следующее появление Seamine, но на этот раз оно не начинается с «начального значения x», потому что начинается с Seamine 1.

Я порождаю Seamines вот так:

var tm_Seamine:Timer = new Timer (2000);

tm_Seamine.addEventListener(TimerEvent.TIMER, Spawn_Seamine);
tm_Seamine.start();

function Spawn_Seamine(e:Event){

    var SM:Seamine = new Seamine();  

    var RandomYValue_1_Box:Number = Math.ceil(Math.random()*500);

    addChild(SM); 
    SM.y = RandomYValue_1_Box;
    SM.x = 1000;    

    addEventListener(Event.ENTER_FRAME, Hit_SM)

    function Hit_SM (e:Event){

        if(SM.hitTestPoint(Player.x,Player.y, true))
        {
            GlobalVariables.GameOver = 1;
        }
    }

}

1 Ответ

0 голосов
/ 09 ноября 2011

getTimer() возвращает количество миллисекунд с момента запуска SWF , а не объекта . Поэтому, если вы используете это количество времени для расчета расстояния, на которое перемещается объект, оно будет одинаковым для всех ваших объектов. Следовательно, все ваши объекты будут перемещаться в одну и ту же позицию независимо от того, когда объект был создан.

Простым исправлением будет инициализация lastFrame с getTimer() вместо 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...