如何将 kineticJS 与 box2dweb 一起使用,以便可以进行碰撞检测?就像,我怎样才能在通过 kineticJS 渲染的图像周围放置一个圆形边界并通过 box2dweb 应用物理?
有没有关于这个的好教程或任何可以帮助我的代码?或者有什么有效的方法可以用 kineticJS 本身进行碰撞检测?
如何将 kineticJS 与 box2dweb 一起使用,以便可以进行碰撞检测?就像,我怎样才能在通过 kineticJS 渲染的图像周围放置一个圆形边界并通过 box2dweb 应用物理?
有没有关于这个的好教程或任何可以帮助我的代码?或者有什么有效的方法可以用 kineticJS 本身进行碰撞检测?
你要做的是:
建立一个box2d“世界”——把世界想象成地球(或任何其他星球)上的一个房间
将“物体”添加到世界中——物体是移动或静止的物体,它们的行为取决于您分配给它们的物理特性。
对于每个 box2d 主体,分配一个 kineticJs“皮肤”——皮肤是由 kineticJs 在画布上绘制的“漂亮”的 kineticJs 形状对象。例如,在游戏中,皮肤可能是足球。
让 box2d 世界运动并监听 box2d 的“tick”事件——当 box2d 计算出在您指定的时间长度内发生的物理现象时,就会触发 tick 事件。此时 box2d 知道了 box2d 世界中每个 box2d 主体的位置和旋转。
在 box2d tick 事件中,检查每个 box2d body 的位置/旋转,并在 box2dbody 的相同位置/旋转处绘制 kineticJs 皮肤。
有一个很好的例子:http ://www.luxanimals.com/blog/article/combining_easel_box2d
此示例使用画架在画布上绘图,但转换为 kineticJs 库非常简单——应用完全相同的概念。
[编辑以提供更多信息]
此外,如果您不需要 box2d 中的所有物理,这里有一个非常简单的使用 kineticJs 的 2 圆碰撞测试。
function CirclesAreColliding(circle1,circle2){
var dx = circle2.getX() - circle1.getX();
var dy = circle2.getY() - circle1.getY();
if( Math.sqrt( dx*dx + dy*dy ) <= ( circle1.getRadius() + circle2.getRadius() ) {
return true;
}
return false;
}