Cocos2D получает успехи CCAction - PullRequest
       24

Cocos2D получает успехи CCAction

1 голос
/ 22 августа 2011

У меня есть игра Cocos2D с физикой Box2D. В моем GameScene.mm я работаю над методом увеличения масштаба до заданного масштаба:

-(void) zoomToScale:(float)zoom withDuration:(ccTime)duration
{
    id action = [CCScaleTo actionWithDuration:duration scale:zoom];
    [scrollNode runAction:action];

    currentZoomLevel = zoom;
}

Проблема, с которой я сталкиваюсь, заключается в том, что currentZoomLevel (который используется в методе update () Сцены) сразу устанавливается на увеличение и не регулируется постепенно согласно анимации. Поэтому во время анимации переменная currentZoomLevel совершенно неверна.

Я пытаюсь найти способ, чтобы переменная currentZoomLevel соответствовала ходу анимации по мере ее появления. Согласно Ссылке API CCAction, метод обновления CCAction принимает значение ccTime, которое находится между 0 и 1 в зависимости от хода анимации (0 только начинается, 1 только что закончено).

Как я могу получить доступ к этому ccTime извне действия? Я хочу, чтобы в методе обновления моей сцены было что-то вроде этого:

if(animating)
{
    float progress = [action getProgress]; // How do I do this?

    // Do math to update currentZoomLevel based on progress
}

Я что-то упускаю здесь очевидное или мне придется подкласс CCScaleTo?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Вы должны иметь возможность доступа к весу напрямую во время его анимации.

вместо float progress = [action getProgress];

попробовать float current_scale = some_node.scale ;

где "some_node" - это то, что вы анимируете / масштабируете.

0 голосов
/ 13 декабря 2011

На самом деле, вам лучше всего использовать новое расширение Cocos2D "CCLayerPanZoom", которое прекрасно справится со всем этим для вас!Он должен быть частью любой новой установки cocos2D (v.1.0 +).

...