我需要控制我的基础游戏类的更新方式:
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会自动将精灵绘制到屏幕上,但我需要这样做。唧唧在这里得到更新机制?我需要这样的东西 - 所有时间重复游戏循环,设置为每次最后更新/重绘。有什么想法我怎么能实现这个目标?
感谢大家的帮助。
答案 0 :(得分:0)
您可以将其转换为具有时间轴的MovieClip,然后根据需要在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++;
}
}
}
答案 1 :(得分:0)
你也可以使用Timer循环来实现这些目的:
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.
}
}
}