【问题标题】:How to detect collision of sprite in cocos2d [closed]如何检测cocos2d中精灵的碰撞[关闭]
【发布时间】:2013-04-08 07:08:19
【问题描述】:
我想检测一个精灵与另一个精灵的碰撞。但我想检查精灵是否与其他精灵的左侧部分接触或与精灵的右侧部分接触。
我正在使用下面的代码来检测碰撞。但这会检测到整体碰撞(在其他精灵的任何点接触到的精灵)。但是如果精灵被触摸到其他精灵的正面,则要算作碰撞。
if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) {
NSLog(@"sprite1 to delete");
}
有人知道怎么做吗?
【问题讨论】:
标签:
iphone
ios
cocos2d-iphone
ccsprite
【解决方案1】:
你能比较碰撞时精灵的位置吗?
假设 sprite1.anchorpoint, sprite2.anchorpoint = ccp(0,0)。检测到碰撞时:
// left part of sprite 1 touched right part of sprite 2
if (sprite1.position.x == sprite2.position.x + sprite2.contentSize.width.x) {
}
// right part of sprite 1 touched left part of sprite 2
else if (sprite1.position.x + sprite1.contentSize.width.x == sprite2.position.x) {
}
【解决方案2】:
默认情况下,在 cocos2d 中,CCSprite 的锚点是 ccp(0.5, 0.5),它修改了精灵位置的比较。
比较位置以检查游戏循环中精灵之间的相对距离,我认为相等运算符不是最佳选择,大于/小于等于更好地准备不同的位置情况,精灵移动步骤。
为了更好地理解,我包括了精灵的情况,例如:
要检查相对位置(检测一个精灵在另一个精灵的哪一侧),您可以在碰撞检测检查中进行编程:
1)
if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) {
CGPoint diff = ccpSub(sprite1.position, sprite2.position)
if (diff.x<=0) {
// sprite1 is on the left side
} else {
// sprite1 is on the right side
}
}
2)
if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) {
if (sprite1.position.x <= sprite2.position.x) {
// sprite1 is on the left side
} else {
// sprite1 is on the right side
}
}