Преобразование автоматической игровой петли AS3 в контролируемую - PullRequest
0 голосов
/ 05 августа 2010

Мне нужно контролировать, как обновляется мой базовый класс игры:

package
{
    import flash.display.Sprite;
    import flash.events.KeyboardEvent;
    public class Test extends Sprite
    {
        private var sprite:Sprite;

        public function Test()
        {
            sprite = new Sprite();
            sprite.graphics.beginFill(0xFF0000, 1);
            sprite.graphics.drawRect(0, 0, 20, 20);
            sprite.graphics.endFill();
            addChild(sprite);
            this.stage.addEventListener(KeyboardEvent.KEY_UP,
                moveSprite);
            this.stage.addEventListener(KeyboardEvent.KEY_DOWN,
                moveSprite);    
        }


        private function moveSprite(keyEvent:KeyboardEvent):void
        {
            switch (keyEvent.keyCode)
            {
                case 37:
                    sprite.x--
                    break;
                case 38:
                    sprite.y--;
                    break;
                case 39:
                    sprite.x++
                    break;
                case 40:
                    sprite.y++;
                    break;
                default:
                    break;
            }
        }
    }
}

Здесь после каждого нажатия / отпускания клавиши AS3 заботится об автоматическом рисовании спрайта на экране, но мне нужно сделать это вручную,Как получить здесь механизм обновления?Мне нужно что-то вроде этого - постоянно повторяющийся игровой цикл, который должен обновляться / перерисовываться каждый раз в конце.Есть какие-нибудь идеи, как мне этого добиться?

Спасибо всем за помощь.

Ответы [ 2 ]

0 голосов
/ 06 августа 2010

Вы также можете использовать цикл таймера для таких вещей:

package
{
  import flash.display.Sprite;
  import flash.utils.Timer;
  import flash.events.TimerEvent;

 public class Game
 {
   private var _timerTickRate : int = 500; //milliseconds
   private var _timer : Timer;

   public function Game()
   {
       init();
   }

   private function init() : void
   {
       _timer = new Timer( _timerTickRate );
       _timer.addEventListener( TimerEvent.TIMER, onTimerTick );
       _timer.start(); //to stop, call _timer.stop() and remove this listener
   }

   private function onTimerTick( event : TimerEvent ) : void
   {
      //do game loop stuff here.
   }
 }
}
0 голосов
/ 06 августа 2010

Вы можете преобразовать это в мувиклип с временной шкалой, а затем обновить анимацию по своему желанию в Event.ENTER_FRAME.

package
{
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.events.KeyboardEvent;
    import flash.events.Event;
    public class Test extends MovieClip
    {
        private var sprite:Sprite;

        public function Test()
        {
            sprite = new Sprite();
            sprite.graphics.beginFill(0xFF0000, 1);
            sprite.graphics.drawRect(0, 0, 20, 20);
            sprite.graphics.endFill();
            addChild(sprite);
            this.stage.addEventListener(KeyboardEvent.KEY_UP,
                moveSprite);
            this.stage.addEventListener(KeyboardEvent.KEY_DOWN,
                moveSprite);    
            this.stage.addEventListener(Event.ENTER_FRAME,
                moveSpriteRight);    
        }


        private function moveSprite(keyEvent:KeyboardEvent):void
        {
            switch (keyEvent.keyCode)
            {
                case 37:
                    sprite.x--
                    break;
                case 38:
                    sprite.y--;
                    break;
                case 39:
                    sprite.x++
                    break;
                case 40:
                    sprite.y++;
                    break;
                default:
                    break;
            }
        }
        private function moveSpriteRight(e:Event):void
        {
          sprite.x++;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...