这听起来很简单。我想跟踪一个精灵体位置,只有它被鼠标移动后才能跟踪它,所以我可以通过比较它的位置(在释放mouseJoint后的任何给定时间)与给定位置来限制它的移动。请帮忙。
已更新
这就是我的所作所为。我创建了一个返回精灵位置的方法,我在ccTouchesEnded方法中调用了它:
- (CGPoint)spritePositionRelease {
for(b2Body *b = mouseJoint->GetBodyB(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL)
{
CCSprite *mySprite = (CCSprite*)b->GetUserData();
if (mySprite.tag == 1) {
mySprite.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
spritePosition = mySprite.position;
CCLOG(@"the sprite position is x:%0.2f , y:%0.2f", spritePosition.x, spritePosition.y);
return spritePosition;
}
}
}
}
ccTouchesEnded:
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (mouseJoint)
{
[self spritePositionRelease];
world->DestroyJoint(mouseJoint);
mouseJoint = NULL;
}
}
在tick方法中,我添加了以下代码:
for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL)
{
CCSprite *mySprite = (CCSprite*)b->GetUserData();
if (mySprite.tag == 1) {
mySprite.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
CGPoint spriteCurrentPosition = mySprite.position;
if ( spritePosition.x != spriteCurrentPosition.x &&
spritePosition.y == spriteCurrentPosition.y) {
CCLOG(@"the sprite limit for y is y:%0.2f has been reached", spriteCurrentPosition.y);
}
}
}
}
我在HelloWorldLayer.h类中初始化了spritePosition。我知道我做错了什么。我不认为我在tick方法中访问的spritePosition与ccTouchesEnded方法中的spritePosition具有相同的值,因此tick方法中的条件永远不会得到满足。我不知道如何纠正这个问题。请帮忙
答案 0 :(得分:0)
您可以使用ccpdistance(X2 , X1);
查找两点之间的距离。从那个距离你可以限制精灵可以移动的范围。