отслеживание положения тела спрайта при его движении

Это может звучать довольно просто. Я хочу отслеживать положение тела спрайта только ПОСЛЕ того, как он был перемещен с помощью 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;
        }
    }
}
}

ccTouchesEnded:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

if (mouseJoint)
{
    [self spritePositionRelease];
    world->DestroyJoint(mouseJoint);
    mouseJoint = NULL;
}
}

В методе тика я добавил следующий код:

        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);
                }
            }
        }
    }

Я инициализировал spritePosition в классе HelloWorldLayer.h. Я знаю, что сделал что-то не так. Я не думаю, что spritePosition, к которому я обращаюсь в методе tick, имеет то же значение, что и spritePosition в методе ccTouchesEnded, поэтому условие в методе tick никогда не выполняется. Я не уверен, как это исправить. Пожалуйста помоги


person newbie    schedule 21.08.2012    source источник
comment
что ты уже испробовал? Мне кажется, что вы можете просто получить положение тела с помощью GetPosition() в любое время.   -  person iforce2d    schedule 21.08.2012
comment
@iforce2d: я только что обновил вопрос, указав, что я сделал. Пожалуйста, проверьте это.   -  person newbie    schedule 22.08.2012


Ответы (1)


Вы можете использовать ccpdistance(X2 , X1);, чтобы найти расстояние между двумя точками. И с этого расстояния вы можете ограничить диапазон, на который может двигаться спрайт.

person Shailesh    schedule 21.08.2012