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