cocos2d碰撞检测问题

时间:2013-01-05 03:36:57

标签: iphone ios cocos2d-iphone

我正在尝试在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范围内,则会将其设置在平台上。然而,有时当这个家伙刚刚超过平台的顶部时,它似乎会错过它,并让他失败。我猜这是因为检查每个平台需要很长时间?有一个更好的方法吗?

1 个答案:

答案 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
             } 
    }