2012-04-22 50 views
1

所以我有一个每秒创建的精灵,它正在随机位置(sprite1)和另一个具有固定位置(精灵2)的精灵移动。我希望当sprite1与sprite2相撞时,sprite1就像粘在它上面一样(它停止移动并坚持它)。我该怎么做?对不起,我的英语我是法国人:/当它与它碰撞时,将一个精灵粘贴到另一个上

PS:sprite2与加速旋转,所以如果sprite1与它发生碰撞,我想它旋转太:)

回答

0

我想,你可以尝试使用的Box2D去做这个。这将有助于检测碰撞并管理旋转,移动等。

+0

但是,我不能在box2d上创建一个带有gl的精灵形状,因此它不是box2d中的矩形形状 – 2012-04-23 08:44:56

+0

,您可以选择任何您想要的对象的形体。 – Morion 2012-04-23 09:18:42

+0

是的,但我的形状只是一个圆形,所以我不认为我需要box2d只是一个圆形 – 2012-04-23 12:23:07

0

我认为,您可以简单地在Cocos2d中执行此操作。

1)首先设定sprite1的RECT和使用CGRectMake(x,y,width,height)

2)当你告诉sprite1在随机位置移动和sprite2被固定到特定位置,则可以检查它们通过使用CGRectIntersectsRect([sprite1 bounds],[sprite2 bounds])相撞sprite2。

3)如果相交,设置sprite1.position = sprite2.position

注意:你说sprite1旋转,矩形可以适合只有到正规的机构。如果你想精确的碰撞或物理属性的精灵更好,你可以去box2d。

+0

,而不是去box2d我可以创建一个我的精灵与gl形状,所以它不是一个矩形形状 – 2012-04-23 08:44:49

+0

我didn没有在GL上工作过。但你可以使用第三方工具,如物理编辑器(http://www.physicseditor.de/)等,在box2d中获得精灵的形状。 – Anish 2012-04-23 09:40:40

+0

是的,但我的形状只是一个圆圈,所以我不认为我需要box2d只是一个圆圈 – 2012-04-23 12:49:31

0

如果你不想使用的Box2D(它可以处理圆碰撞),你可以尝试这样的事:

1)检测碰撞,是两个圆的中心点之间的距离(X, y),小于两个圆的半径之和。 2.)将Sprite1粘贴到Sprite2,停止Sprite1的移动,并将相对增量(x,y)保存到Sprite2,然后每当Sprite2移动或旋转时将相同的增量移动和旋转应用到Sprite1。

相关问题