0

这听起来可能很简单。我想仅在它被 mouseJoint 移动之后才跟踪精灵主体的位置,因此我可以通过将它的位置(在释放 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;
        }
    }
}
}

ccTouchesEnd:

- (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 方法中的条件永远不会得到满足。我不知道如何纠正这个问题。请帮忙

4

1 回答 1

0

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

于 2012-08-21T12:14:31.003 回答