碰撞检测不同类中的两个对象

时间:2013-07-22 07:09:55

标签: iphone ios cocos2d-iphone

我从两个不同的节点调用两个​​不同的对象  在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 中的位置不正确。我无法检查碰撞。

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

2 个答案:

答案 0 :(得分:0)

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

应该是这样的:

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

答案 1 :(得分:0)

如果我理解正确,你需要获得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);