2010-01-12 2 views
0

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

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

ответ

0

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

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

2

Я часто работаю над одними и теми же проектами в 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); 
} 

Описанные выше метод будет промежуточными кадры й значения 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.

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