我在简单的arkanoid游戏中遇到了更新球拍位置的问题,我正在使用以下听众做出反应:
paddle.addEventListener(Event.ENTER_FRAME, movePaddle)
在movePaddle()
中定义Main
函数时,一切正常,但是当我重构代码并将movePaddle()
函数放入Paddle
类并将侦听器更改为:< / p>
paddle.addEventListener(Event.ENTER_FRAME, paddle.movePaddle)
结果是每个帧之间的换挡位置在所需的位置和其他值之间
低于movePaddle()
功能:
public function movePaddle(event:Event):void
{
// DEBUG
trace(this.x);
trace(this.y);
this.x = mouseX - this.width / 2;
if(mouseX < this.width / 2)
{
this.x = 0;
}
// To much to right
if(this.x >= stage.stageWidth - this.width)
{
// To much to left
this.x = stage.stageWidth - this.width;
}
}
第二个问题:
在游戏优化方面是否使用ENTER_FRAME
事件好?
答案 0 :(得分:1)
正如Cameron所提到的,如果您将movePaddle()
移动到Paddle
类本身,mouseX
和mouseY
将引用Paddle MovieClip中的鼠标位置。也就是说,如果Paddle在舞台上为50,50,并且鼠标在舞台上为100,100,则您将收到的鼠标坐标为50,50。
更安全的选择是使用mouseX
给出的mouseY
和Stage
值:
public function movePaddle(event:Event):void
{
if(stage != null)
{
x = stage.mouseX - width / 2;
if(stage.mouseX < width / 2)
{
this.x = 0;
}
// To much to right
if(x >= stage.stageWidth - width)
{
// To much to left
x = stage.stageWidth - width;
}
}
}
我要做的另一件事是在Main
类中使用这一行:
paddle.addEventListener(Event.ENTER_FRAME, paddle.movePaddle);
我会把它放在Paddle
的构造函数中,如下所示:
public function Paddle()
{
addEventListener(Event.ENTER_FRAME, movePaddle);
}
至于ENTER_FRAME
的性能,这很好,但是在一个结构合理的游戏中,我会有一个ENTER_FRAME
处理程序循环一个游戏实体数组,并通过调用方法更新它们在每个。