【问题标题】:collision detection of two objects in different class不同类别的两个物体的碰撞检测
【发布时间】:2013-07-22 07:09:54
【问题描述】:

我从两个不同的节点调用两个​​不同的对象 在rock.h中

@interface Rock : CCnode {

int screenWidth;
int screenHeight;
float downWardSpeed;

}

@property (nonatomic, retain) CCSprite *falling_rock;

-(void) makeEnemyGoLower;
-(CGSize)contentSize_ofBugSprite;
-(CGRect)boundingBox_forRock;
end

在摇滚.m

-(CGRect)boundingBox_forRock
{
  return  falling_rock.boundingBox;
}

-(CGSize)contentSize_ofBugSprite
 {
 return falling_rock.contentSize;
}

-(void) runEnemyAnimationSequence:(ccTime) delta {

self.position = ccp(self.position.x, self.position.y - downWardSpeed  );

}

同样适用于玩家类。现在我使用 ccnode 在主游戏类中调用,但他们在 NSLOG 中的位置不正确。所以我无法检查碰撞。

请帮忙,我犯了什么错误?

【问题讨论】:

  • 您能否展示一下您是如何使用 CCNode 在主游戏中添加 Rock 和 player 的?
  • rock = [摇滚节点]; [self addChild:rock z:55];这边
  • 好的,对于碰撞检测,您必须使用各自的类对象制作两个 CGRect,并且您必须检查这两个 CGRects 之间的 CGRectIntersectRect。如果,它给出的结果比有碰撞检测,如果它给出false 比没有碰撞检测。
  • 是的,我这样做了,但他们没有正确碰撞。所以我记录了他们的 CGrect 位置,发现位置显示错误。

标签: iphone ios cocos2d-iphone


【解决方案1】:

我不确定语法是否正确,因为我使用的是 cocos2d-x,但我认为问题是两个边界框都必须在世界空间中。您可以使用 convertToWorldSpace 方法将您的位置从本地空间转移到世界空间。

应该是这样的:

-(CGRect)boundingBox_forRock
{
    CGPoint worldPosition = convertToWorldSpace(getPosition());
    return CGRectMake(worldPosition.x, worldPosition.y, getContentSize().width, getContentSize().height);
}

【讨论】:

    【解决方案2】:

    如果我理解正确,你需要获取Rock对象的falling_rock属性位置。

    而不是这个:

    -(void) runEnemyAnimationSequence:(ccTime) delta {
    
    self.position = ccp(self.position.x, self.position.y - downWardSpeed  );
    
     }
    

    试试这个:

    -(void) runEnemyAnimationSequence:(ccTime) delta {
    
    falling_rock.position = ccp(falling_rock.position.x, falling_rock.position.y - downWardSpeed  );
    
     }
    

    现在在您的主游戏类(GameController)中,您可以获得正确的位置。 做这样的事情: 在你的 .h 文件中

    Rock *myRock;
    

    并在您的 .m 文件中获取精灵位置

    CGPoint rockCurrentPosition = ccp(myRock.falling_rock.position.x, myRock.falling_rock.position.y);
    

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      相关资源
      最近更新 更多