跟踪精灵体位移动时的位置

时间:2012-08-21 08:43:22

标签: ios cocos2d-iphone box2d box2d-iphone

这听起来很简单。我想跟踪一个精灵体位置,只有它被鼠标移动后才能跟踪它,所以我可以通过比较它的位置(在释放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方法中的条件永远不会得到满足。我不知道如何纠正这个问题。请帮忙

1 个答案:

答案 0 :(得分:0)

您可以使用ccpdistance(X2 , X1);查找两点之间的距离。从那个距离你可以限制精灵可以移动的范围。