首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AS3快闪乒乓球游戏: AI球拍不能按预期移动

AS3快闪乒乓球游戏: AI球拍不能按预期移动
EN

Stack Overflow用户
提问于 2012-11-07 17:14:27
回答 2查看 341关注 0票数 0

所以我有下面的代码来表达"AI“运动。pdl_R是AI桨,AIH是AI高度,AIHS是AI高度速度。我想要的代码,以移动划桨由AIH在AIHS的方向。

代码语言:javascript
运行
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-07 20:49:47

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

  1. Y被赋值为stage.stageHeight (==AIH)
  2. AIH递增3*AIHS (==3,假设为AIHS==1,虽然AIHS的实际值无关紧要,但它的符号才重要)。所以你的桨实际上比你想要的多移动了3个像素,

  1. ,你检查条件,它是真的,所以AIHS=-1*AIHS。AIHS现在是-3。
  2. 好的,下一帧,Y被分配AIH (==stage.stageHeight+3),AIH被AIHS递增,现在又等于stage.stageHeight。检查条件为假,不更改AIHS。
  3. 下一帧,Y被指定为等于stage.stageHeight的AIH,但是现在桨是向上移动的!因此,当您再次检查自己的情况时,AIH将恢复为+3。而且,AIH已经是stage.stageHeight-3,因此,再向前2帧,该周期将重复。

一个修复方法是在修改AIHS后增加AIH的值。这实际上是最常见的错误原因,您首先应用未更改的值,然后更改它,而不是先更改,然后应用。

票数 0
EN

Stack Overflow用户

发布于 2012-11-07 19:09:06

在下面的if语句中:

代码语言:javascript
运行
复制
if(pdl_R.y==stage.stageHeight || pdl_R.y==stage.stageHeight-pdl_R.height)
{
    AIHS*=-1;
}

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

代码语言:javascript
运行
复制
if(paddle.y == 600 || paddle.y == 570)
{
  ReversePaddleDirection
}

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13266498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档