Cocos2d 3.0 Chipmunk с гравитация: позицията на спрайта не се променя

Пренасям моята игра от Cocos2d v2 към v3. Не знам кога спрайтовете излизат от екрана.

Във v2 моето решение беше:

-(void) update:(ccTime) delta
{
   // Should use a fixed size step based on the animation interval.
   int steps = 2;
   CGFloat dt = [[CCDirector sharedDirector] animationInterval]/(CGFloat)steps;

   for(int i=0; i<steps; i++){
       cpSpaceStep(space_, dt);
   }

   if (mySprite.getPhysicsBody->p.y > 500)
       [mySprite resetPosition];
}

сега с Cocos2d v3 mySprite.physicsNode.position не се променя през времето.

Някаква идея или връзка с някакъв пример?

Благодаря.


person cimminog    schedule 25.02.2014    source източник


Отговори (1)


physicsNode.position не се променя с времето, защото използва своето родителско координатно пространство на спрайта, а не глобалното координатно пространство.

Можете да получите глобалната позиция на всеки възел, като вземете предвид опорната точка, като използвате това:

CGPoint worldPos = [node convertToWorldSpaceAR:CGPointZero];

След това можете лесно да го конвертирате във всяко друго пространство на възел, ако е необходимо (като вашето ниво, може би), като използвате:

CGPoint position = [_levelNode convertToNodeSpaceAR:worldPos];

Но внимавайте, че не трябва да кодирате твърдо размера на екрана във вашия код, тъй като той варира за всяко устройство. Можете да използвате вместо това:

CGSize viewSize = [[CCDirector sharedDirector] viewSize];
person Felizardo    schedule 02.03.2014