Iphone 两个不同类别物体的碰撞检测

Iphone 两个不同类别物体的碰撞检测,iphone,ios,cocos2d-iphone,Iphone,Ios,Cocos2d Iphone,我正在从两个不同的节点调用两个不同的对象 在摇滚乐中 @interface Rock : CCnode { int screenWidth; int screenHeight; float downWardSpeed; } @property (nonatomic, retain) CCSprite *falling_rock; -(void) makeEnemyGoLower; -(CGSize)contentSize_ofBugSprite; -(CGRect)boundingBox

我正在从两个不同的节点调用两个不同的对象 在摇滚乐中

@interface Rock : CCnode {

int screenWidth;
int screenHeight;
float downWardSpeed;

}

@property (nonatomic, retain) CCSprite *falling_rock;

-(void) makeEnemyGoLower;
-(CGSize)contentSize_ofBugSprite;
-(CGRect)boundingBox_forRock;
end
在摇滚乐

-(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中的位置不正确。因此我无法检查碰撞


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

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

应该是这样的:

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

如果我理解正确,您需要获取岩石对象的坠落岩石属性位置

与此相反:

-(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);

你能展示一下你是如何使用CCNode在主游戏中添加Rock和player的吗?Rock=[Rock node];[self-addChild:rock z:55];这样,对于碰撞检测,您必须使用各自的类对象生成两个CGRect,并且必须检查这两个CGRect之间的CGRect INTERSECTRECT。如果为true,则表示存在碰撞检测,如果为false,则表示没有碰撞检测。是,我这样做了,但是他们没有正确碰撞。所以我记录了他们的CGrect位置,发现位置显示错误。