我正在尝试在cocos2d游戏中检测角色和平台之间的冲突。
整个游戏在一个类中运行,并在一个方法中更新:在前一个问题中,据说一个更新方法与许多更新方法不会有性能差异。
这是我检查碰撞的方法:
if(velY<=0)
{
if(_guy.position.x<child.position.x+child.contentSize.width/2 && _guy.position.x>child.position.x-child.contentSize.width/2)
{
if(velY/50<5)
{
if(((_guy.position.y - _guy.contentSize.height/2) - (child.position.y+child.contentSize.height/2))<abs(10) && ((_guy.position.y - _guy.contentSize.height/2) - (child.position.y+child.contentSize.height/2))>-4)
{
//some code
}
else if(((_guy.position.y - _guy.contentSize.height/2) - (child.position.y+child.contentSize.height/2))<abs(velY/50) && ((_guy.position.y - _guy.contentSize.height/2) - (child.position.y+child.contentSize.height/2))>=-4)
{
//some more of the same code as above
}
if(velY/50<5)
是这样的,如果它移动缓慢,它有一个大窗口,它可以在更大的范围内。
屏幕上的所有精灵都在移动,并且都包含在一个大批量中。在更新方法中,我循环遍历批处理的每个子项,如果它位于x
(主要字符)的y
和_guy
范围内,则会将其设置在平台上。然而,有时当这个家伙刚刚超过平台的顶部时,它似乎会错过它,并让他失败。我猜这是因为检查每个平台需要很长时间?有一个更好的方法吗?
答案 0 :(得分:0)
LearnCocos2D是对的,它不是一个性能问题。问题是我正在使用它:
((_guy.position.y - _guy.contentSize.height/2) - (child.position.y+child.contentSize.height/2))<abs(10)
但是_guy sprite在图像周围有额外的空白区域,所以即使图像在平台上方,空白空间也不会,因此它不会检测到碰撞。以下代码效果更好:
if(abs((_guy.position.y - _guy.contentSize.height/2+15) - (child.position.y+child.contentSize.height/2))<abs(5)){
if((_guy.position.y - _guy.contentSize.height/2+15) - (child.position.y+child.contentSize.height/2)>0){
//code
}
}