Flash AS3 анимация в Mac против Windows - PullRequest
0 голосов
/ 12 января 2010

Я работаю над коротким анимированным сюжетом, который имеет чистую временную шкалу и заголовки глав. Я использовал TimelineMax для его упорядочения. По большей части, это работает нормально. Я вижу какое-то странное поведение, которое всплывает, хотя: спрайты исчезают, функции перестают реагировать на ввод пользователя, швы спрайтов становятся прозрачными - все это небольшие проблемы, но их довольно сложно зафиксировать, потому что они происходят только в Mac.

Так что мне интересно, что не так с Flash и почему он плохо себя ведет на Mac?

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Я часто работаю над одними и теми же проектами на Windows на работе, а затем на моем Mac дома. Я также вижу некоторую разницу на Mac по сравнению с Windows. Я обнаружил, что различные версии Flash Player для Mac, как правило, медленнее, чем проигрыватели Windows, и я видел странное поведение на Mac, которого нет в Windows.

В большинстве случаев я ограничил это сборкой мусора в AS3. Сборка мусора происходит, когда игрок определяет, что у объекта больше нет ссылки в фильме, поэтому он удаляет этот объект, чтобы освободить память. Допустим, у вас есть метод класса, подобный этому:

function myTweenFunction():void {
    var myTween:Tween = new Tween(myDisplayObject, 'x', Strong.easeInOut, 0, 500, 10, true);
    myTween.addEventListener(TweenEvent.MOTION_FINISH, onMyTweenDone);
}

Приведенный выше метод изменяет значение x в myDisplayObject с 0 до 500 в течение 10 секунд. Когда эта анимация завершена, она должна запустить метод onMyTweenDone (не показан). Однако myTween был создан внутри myTweenFunction, поэтому он существует только в области действия myTweenFunction. Когда myTweenFunction завершена, на объект myTween больше не ссылается ни один объект в фильме, поэтому он становится кандидатом на сборку мусора. Вы начнете видеть анимацию, но в какой-то момент она остановится, пока не достигнет 500, и событие финиша не сработает. Это означает, что myTween был уничтожен. Чтобы решить эту проблему, myTween должен быть членом класса или просто иметь ссылку вне функции класса.

Возвращаясь к проблемам Mac и Windows, я вижу, что сборка мусора для созданных во время выполнения объектов на Mac более очевидна, чем в Windows. Сборка мусора происходит в проигрывателе Windows Flash Player, но анимация и другие события могут завершиться до того, как сборка мусора произойдет, поскольку проигрыватель Windows Flash Player имеет более высокую производительность. Если проигрыватель Mac Flash работает медленнее (т. Е. Та же анимация может занять больше времени), сбор мусора может произойти до того, как анимация будет завершена. Сборка мусора не происходит покадрово, как анимация; это фоновый процесс, который может произойти в любое время или вообще не произойти, если для Flash Player достаточно памяти. Ваша Windows-машина может иметь кучу оперативной памяти, и фильм может воспроизводиться без необходимости сбора мусора, поэтому myTween никогда не исчезнет. Если на вашем Mac меньше памяти или если у вас одновременно открыта масса приложений, а объем памяти Flash Player ограничен, то Flash Player будет выполнять сборку мусора чаще.

Я также использовал TimelineMax, и есть функция автоматической сборки мусора, которая включена по умолчанию. Попробуйте отключить это и проверить на Mac.

В конечном счете, вы должны разработать свой проект исходя из предположения, что у пользователя может быть очень ограниченная память, поэтому ваши объекты должны быть созданы, на них есть ссылки и сборщик мусора.

0 голосов
/ 12 января 2010

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

Если вы делаете это в веб-браузере, попробуйте поиграть с настройкой встраивания WMODE и посмотрите, изменятся ли ваши результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...