我从两个不同的节点调用两个不同的对象 在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 中的位置不正确。我无法检查碰撞。
请帮忙,我犯了什么错误?
答案 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);