0

我正在尝试检测 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

4

1 回答 1

0

LearnCocos2D 是对的,这不是性能问题。问题是我正在使用这个:

    ((_guy.position.y - _guy.contentSize.height/2) - (child.position.y+child.contentSize.height/2))<abs(10)

但是 _guy 精灵在图像周围有额外的空白空间,所以即使图像在平台上方,空白也不会出现,因此它不会检测到碰撞。以下代码效果更好:

    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
             } 
    } 
于 2013-01-05T14:57:04.917 回答