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位置,发现位置显示错误。