Pull to refresh

Comments 10

Вопрос по примеру Animate: Cocos2d не поддерживает атласы, или это просто пример такой?
Cocos2d-x поддерживает атласы, при этом предоставляет и другие средства для создания анимации. Подробная инструкция создания атласа для Cocos2d-x в TexturePacker:
Позволяет. Имеется нескольо различных адаптеров — под Cocosbuilder (deprecated), CocoStudio и еще скелетные анимации Spine

В libGDX тоже есть система Actions, пишутся очень похоже. Например, для перемещения обьекта на 50 пикселей влево за 1 секунду:


actor.addAction(moveBy(50, 0, 1f));


Прочитал статью — практически все Action-ы есть в libGDX. Судя по тому, что поддержка Action в libGDX появилась где-то три года назад, разработчик libGDX вдохновлялся Cocos-2d в этом плане :)

спасибо, узнал парочку полезных вещей (про reverse и clone)

Обратите внимание на то, что обе секвенции запускаются на одном и том же спрайте. Любые N секвенций запущеных на одной и той же ноде будут работать ОДНОВРЕМЕННО, поэтому если сделать что-то вроде


sprite->runAction(MoveTo::create(Point(0, 100)));
sprite->runAction(MoveTo::create(Point(100, 0)));

Будут работать параллельно и ноду (в данном случае условный спрайт) будет колбасить между этими двумя позициями. Поэтому для ясности все же лучше использовать Spawn.


А clone позволяет дублировать секвенции, чтобы не писать две одинаковые, но иметь независимое влияние/поведение.

Извините, а если вы об этих Move'a уложите в Spawn, Node (Sprite) колбасить не будет между этими двумя позициями?

Будет. Если положить два MoveTo, то каждый будет пытаться высчитать новую дельту позиции основываясь на текущем положении. Поэтому финальная позиция вполне может не совпасть ни с одной из указанных точек.
Различие в том что Spawn запускает эти события явно из одного места. Если очень хочется запустить Action на ноде, которая потенциально уже имеет действующий Action, существует проверка на наличие isRunning и методы для остановки stopAction и stopAllAction.
Ну и небольшое эмпирическое правило: Не запускать два одинаковых трансформирующих Action'а параллельно (Move, Scale, Skew, Rotate, Fade).

Нет, мы как-то отклонились в сторону, вы писали
Будут работать параллельно и ноду (в данном случае условный спрайт) будет колбасить между этими двумя позициями. Поэтому для ясности все же лучше использовать Spawn.
У вас по тексту получилось, что запускание этого через Spawn имеет преимущества перед отдельным параллельным запуском. Мне кажется, никакого в этом случае, кроме понятной организации кода.

Различие в том что Spawn запускает эти события явно из одного места.

Я думаю, что он их запускает также, как и если бы мы их запускали один за другим, просто все это упаковано в один аккуратный вызов Spawn. Надо глянуть в реализацию.

Да, вы можете явно сгенерировать две секвенции и запускать эти два события друг за другом, но никто не гарантирует что они запустятся корректно по времении и не перебьют друг друга.


sprite->runAction(MoveTo::create(Point(0, 100)));
heavyEval();
sprite->runAction(MoveTo::create(Point(100, 0)));

в таком примере heavyEval делает очень тяжелое вычисление и в следующий участок кода он попадет с задержкой. Поэтому тайминг второй "сползёт" и параллельности не выйдет. У Spawn же группирует вызовы и оптом в цикле вызывает каждому из них обновление.

Sign up to leave a comment.

Articles