2010-10-03 2 views
0

Я использую следующее, чтобы заменить только положение 2 спрайта.cocos2d: Interchange Sprite

CCSprite *sprite1 = (CCSprite*)[self getChildByTag:tagOfFirstSprite]; 
    CCSprite *sprite2 = (CCSprite*)[self getChildByTag:tagOfSecondSprite]; 

    CGPoint SpritePosition1 = [sprite1 position]; 
    CGPoint SpritePosition2 = [sprite2 position]; 



    [sprite1 runAction:[CCMoveTo actionWithDuration:1.0 position:ccp(SpritePosition2.x, SpritePosition2.y)]]; 
    [sprite2 runAction:[CCMoveTo actionWithDuration:1.0 position:ccp(SpritePosition1.x, SpritePosition1.y)]]; 

Это корпус box2d. Но это не работает ....... любая идея ??

ответ

2

Я предполагаю, что вы используете шаблон образца Box2D, который реализует функцию «tick()», которая постоянно вызывается планировщиком. Эта функция вызывает функцию world-> step() и обновляет положение body2D-тел, а затем обновляет положение ваших спрайтов в соответствии с новой позицией body2D-тел. Когда вы просто вызываете runAction, это не влияет на положение ваших тел Box2D, поэтому каждый раз, когда будет вызываться функция tick(), положение ваших спрайтов будет установлено в соответствии с положением body2D-тел. Теперь, даже если ваш runAction перемещает ваши спрайты, он получает сброс через пару раз каждую секунду, когда вызывается функция tick(). Надеюсь, вы понимаете.

+0

Пожалуйста, прочитайте эту тему, чтобы лучше понять эту проблему, http://www.cocos2d-iphone.org/forum/topic/6971 – Tayyab

+0

yes..если я уже узнал об этом ... но очень благодарю за ваш красивое описание ..... я думаю, да, дайте понять ... – Rony

Смежные вопросы