事情是这样的:我有一个球用Tweens弹跳,我想检测球和平台之间的碰撞(只有当球掉下来的时候)。
但是,我的解决方案是测试ENTER_FRAME循环中的碰撞,所以当球速度过高时,在x帧下,球在平台上,在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的解决方案,但是我想知道是否有一个更简单的解决方案来解决这个问题。
发布于 2012-10-13 06:42:15
这是碰撞检测中的一个常见问题--小而快速的物体通过薄薄的障碍物。你要找的是扫描测试
与测试两个静态形状之间的交集不同,我们可以创建新的形状,方法是沿着它们的轨迹扫描原始形状,并测试这些扫描形状之间的重叠。
来自N教程A-快速移动对象,(如果您对碰撞算法有更多的兴趣,我建议阅读它们的所有内容)。
例如,如果你有一个1px乘1px的平方,并且它沿着x轴以每帧5 6px的速度移动,你会想要扭曲你的方块,这样它就变成了一个6px乘1 6px的矩形来进行碰撞测试。捕捉到任何会击中下一帧的东西,但不会有更多的。
圆圈比较困难,因为当你拉伸它们时,它们就变成了椭圆(这很难检查碰撞)。如果您想要走椭圆路线,请参阅这个答案。
https://stackoverflow.com/questions/12785867
复制相似问题