AS3 - 使用补间,帧间隙进行碰撞检测

时间:2012-10-08 16:42:50

标签: actionscript-3 tween

这就是事情:我有一个球使用Tweens弹跳,我想检测球和平台之间的碰撞(只有当球落下时)。

但是,我的解决方案是测试ENTER_FRAME循环中的碰撞,所以当球速度很高时,在轴框架处,球位于平台上方,在x + 1框架处,球在下方平台,所以我的循环永远不会检测到碰撞(因为球和平台永远不会碰撞)。

这是我跳球的方法:

public function jump():void
{
    TweenLite.killTweensOf(this);
    TweenLite.to(this, jumpSpeed, {y:250, ease:Cubic.easeOut});
    TweenLite.to(this, jumpSpeed, {delay:jumpSpeed, y:stage.stageHeight-this.height, ease:Cubic.easeIn, onComplete:jump});
}

这是我ENTER_FRAME循环中执行的内容:

for each (var platform:Platform in platforms) 
{
    if (ball.hitTestObject(platform) &&  ballPreviousY < ball.y)
        ball.jump();
}
ballPreviousY = ball.y;

我已经开始使用物理引擎Box2D开发解决方案,但我想知道是否有更简单的解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:0)

这是碰撞检测中的常见问题 - 小而快的物体穿过薄的障碍物。你要找的是扫描测试

  

我们可以代替测试两个静态形状之间的交集   而是通过沿着它们扫描原始形状来创建新形状   轨迹,并测试这些扫描形状之间的重叠。

来自N Tutorial A - Fast Moving Objects,(如果您对碰撞算法有更多细节感兴趣,我建议您阅读所有内容。)

例如,如果您有1px乘1px的正方形并且它沿x轴以每帧5px的速度行进,那么您将需要扭曲您的正方形,以便成为一个6px乘1px的矩形进行碰撞测试。抓住它会触及下一帧的任何东西,但不能再有了。

圆圈有点困难,因为当你拉伸它们时它们会变成椭圆形(这很难检查碰撞)。如果你想进入椭圆路线,请参见this answer