AS3 Flash Pong游戏:AI桨不按预期移动

时间:2012-11-07 09:14:27

标签: actionscript-3 flash pong

所以我有以下代码表达“AI”运动。 pdl_R是AI桨,AIH是AI高度,AIHS是AI高度速度。我希望代码能够通过AIH向AIHS方向移动桨。

pdl_R.y=AIH;
AIH+=(3*AIHS);  
if(pdl_R.y==stage.stageHeight || pdl_R.y==stage.stageHeight-pdl_R.height)
{
    AIHS*=-1;
}

但是当pdl_R(AI拨片)到达屏幕的底部(向下是默认方向)时,它会停留在那里并且上下闪烁3个像素(而不是预期的方向切换)。

我的初始AIH是200,我的初始AIHS是1。

2 个答案:

答案 0 :(得分:0)

在以下if语句中:

if(pdl_R.y==stage.stageHeight || pdl_R.y==stage.stageHeight-pdl_R.height)
{
    AIHS*=-1;
}

使用桨叶高度(30)和舞台高度(600)的一些示例数字,您要问:

if(paddle.y == 600 || paddle.y == 570)
{
  ReversePaddleDirection
}

这可以解释桨叶卡在底部,因为它将永远在570到600之间反弹,一旦到达其中一个就会反转。

如果不是这种情况,我们可以使用更多信息(即实际的舞台高度和桨高)来进一步调试。

答案 1 :(得分:0)

当您的AIH到达stage.stageHeight时,会发生以下情况:

  1. Y被指定为stage.stageHeight(== AIH)
  2. AIH增加3 * AIHS(== 3,假设AIHS == 1,尽管AIHS的实际值并不重要,只有它的符号确实如此)。因此,你的球拍实际上比你想要的移动3个像素。
  3. 你检查条件,它是真的,所以AIHS = -1 * AIHS。 AIHS现在是-3。
  4. 好的,下一帧,Y被指定为AIH(== stage.stageHeight + 3),AIH由AIHS递增,现在再次等于stage.stageHeight。检查条件是错误的,AIHS没有变化。 Paddle现在向上移动。
  5. 下一帧,Y被指定为等于stage.stageHeight的AIH,但是桨现在向上移动!因此,当您再次检查您的病情时,AIHS将恢复为+3。并且,AIH已经是stage.stageHeight-3,因此循环将重复2帧。
  6. 修改AIHS后,将修改AIH。这实际上是导致错误的最常见原因,您首先应用未更改的值,然后更改它,而不是先更改,然后应用。