【发布时间】:2012-10-08 16:42:50
【问题描述】:
事情是这样的:我有一个使用 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 的解决方案,但我想知道是否有更简单的解决方案来解决这个问题。
【问题讨论】:
-
您基本上必须编写大量数学运算,否则这些数学运算已经在 box2d 等库中进行了说明,它已经内置了方便的参数以方便使用...我知道您已经但是使用greensock,它确实内置了一些方便的技巧来模拟碰撞效果,根据碰撞的性质,这可能足够也可能不够。但要获得真正强大的物理引擎,box2d 才是正确的选择!
-
我最近读过一些关于补间和 hitTestObject 一起不起作用的东西,也许你的情况也是如此。
-
虽然 3rd 方库解决了这些问题,但您正在处理的问题可以通过使用 Verlet 集成来跟踪对象的运动来解决。这允许您在渲染完成之前检测到碰撞,因此您可以在渲染任何内容之前对其进行处理。关于这个主题有很多可用的资源(搜索“Euler 与 Verlet 集成”)。我最近在一本名为AdvancED Game Design w/Flash 的书中读到了它。
-
如果你在补间中使用 onUpdate 属性来检查碰撞而不是进入帧呢?
标签: actionscript-3 tween