Советы по оптимизации?AS3 iOS AIR 3.0 - PullRequest
1 голос
/ 08 ноября 2011

Я почти закончил с моей игрой, сделанной с помощью Adobe CS5.5 AIR 3.0 для iOS. Я пытаюсь оптимизировать код из-за некоторых проблем с предварительным исполнением.

Я немного новичок в программировании и просто задам несколько вопросов.

  1. Я использую класс I с именем «GlobalVariables». Я использую это для того, чтобы иметь «Скорость», которую я могу достичь везде. Поэтому, если я на главной линии или в классе, я могу набрать «GlobalVarialbes.Speed», а затем изменить скорость. Это хороший способ справиться с вещами? Или для преформана тяжело это сделать? Я просто вроде многих из этих "глобальных переменных".

  2. Одна ДЕЙСТВИТЕЛЬНО раздражающая вещь состоит в том, что когда объекты движутся, мне действительно нужно, чтобы FPS был 60 FPS. Потому что, если FPS составляет около 30-40, объекты не двигаются с одинаковой скоростью, и объекты, кажется, намного ближе друг к другу ... Это действительно раздражает. Я просто использую object.x + = GlobalVariables.Speed ​​(скорость может быть 4) ... Есть предложения?

  3. Если я использую фон, он фактически забирает у меня много FPS. Около 7-10 кадров в секунду. Как сделать фоновую картинку менее полезной для еды?

  4. Общие советы, может быть? Я использую режим GPU на iOS devies :)

РЕДАКТИРОВАТЬ, ПОЖАЛУЙСТА, ОТВЕТЬТЕ НА ЭТО: Мой друг сказал мне, чтобы я использовал «много» из «если», потому что тогда было бы легче, если бы префорант действительно увидел, будет ли он читать следующий код или нет. :)

Ответы [ 4 ]

6 голосов
/ 09 ноября 2011

Просматривая список по одному.(На самом деле это как минимум 4 вопроса)

  1. Я использую класс I с именем «GlobalVariables».Я использую это для того, чтобы иметь «Скорость», которую я могу достичь везде.Поэтому, если я на главной линии или в классе, я могу набрать «GlobalVarialbes.Speed», а затем изменить скорость.Это хороший способ справиться с вещами?Или для преформана тяжело это сделать?Я просто вроде многих из этих "глобальных переменных".Использование глобальных переменных и вызовов функций может занять некоторое время.Если вы используете переменную более одного раза в методе, вы можете слегка оптимизировать, кэшируя значение в локальной переменной.Но не забудьте проверить результат, так как кэширование объекта, если оно не является примитивным значением, может вызвать вызов конструктора "new Something ()", который очень медленный.

    One REALLY annoying thing is that when objects move, I really need
    the FPS to be 60 FPS. Because if the FPS is around 30-40, the
    objects doesnt move at the same speed, and the objects seems to be
    alot closer the each other to... This is really annoying. I just use
    object.x += GlobalVariables.Speed (Speed is maybe 4)... Any
    suggestions here?
    

Измените способ определения скорости от пикселей на кадр до пикселей в секунду.Затем используйте getTimer () каждую секунду, чтобы узнать, какой процент секунды прошел с последнего обработанного кадра.Вот пример кода в этой теме: Пропуск кадров во Flash

If I use a background it actually takes alot of the FPS from me.
Around 7-10 fps. How can I make a background picture less
preformance eating?

Фоны, и рисование в целом будет дорогостоящим процессом.Используйте cacheAsBitmap, если фон не прокручивается.Убедитесь, что фон не содержит дочерних слоев, если это возможно.Используйте растровое изображение, а не векторы.И держите его как можно меньше - не лишние биты за пределами экрана.Также убедитесь, что фон не масштабируется.Выключите растровое сглаживание тоже.Попробуйте установить качество сцены на StageQuality.LOW или StageQuality.Medium и посмотрите, поможет ли это.== ОБНОВЛЕНИЕ == Теперь, когда вышел AIR 3.2 и он поддерживает OpenGL на iOS и Android, используйте эту функцию.Он называется «stage3D» во флэш-памяти, и это действительно единственный хороший способ сделать вашу графику для мобильных устройств с помощью Flash.Для 2D-графики выходит скворец.http://gamua.com/starling/ Это тот же движок, который используется Angry Birds на Facebook.Таким образом, его испытания в реальных условиях и производство готово.(И его открытый исходный код!)

General tips maybe? I use the GPU mode on the iOS devies :)

Общие советы: используйте растровые изображения для всего.Избегайте прозрачности, когда это возможно.Не используйте фильтры или режимы наложения.Избегайте альфа-анимации.Избегайте создания новых объектов - утилизируйте часто используемые объекты, особенно отображаемые объекты.Помните, что добавление и удаление детей также является дорогостоящим.Если в пуле многократного использования есть несколько пуль, вы можете установить для них значение visible = false.Тогда visible = true, когда вы повторно инициализируете этот объект маркера.Попробуйте выполнить поиск «Объединение объектов AS3»

. Используйте Vector вместо Array.

И, наконец, выполните тестирование и повторное тестирование.Измерьте время каждого вызова функции.Оптимизация flash - это глубокая и насыщенная тема, которую вы никогда не исчерпаете.Частично потому, что ваш пробег будет варьироваться от проекта к проекту.Вот хорошая ссылка, чтобы вы начали изучать методы оптимизации для AS3 http://drawlogic.com/2009/05/22/as3-flash-efficient-code-techniques-vectors-in-flash-10-faster-jpeg-encoding-other-optimization-notes/

1 голос
/ 09 ноября 2011

Несколько полезных советов по оптимизации от Adobe:

http://www.adobe.com/devnet/flash/articles/optimize_content_ios.html

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

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

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

http://www.8bitrocket.com/2008/1/20/Tutorial-Using-Flash-CS3-and-Actionscript-3-to-create-Atari-7800-Asteroids-Part-1/

Он также подготовит вас к следующей версии air, в которой будет встроен API stage3d. Вы получите значительное увеличение производительности. В этот момент я бы, вероятно, рекомендовал перейти на скромный фреймворк, в котором используются все приемы, о которых вы прочтете в уроке, на который я ссылаюсь, но за кулисами.

http://www.gotoandlearn.com/

имеет достойное вступительное руководство, говорящее об этом.

0 голосов
/ 09 ноября 2011

1 Объекты передаются как ссылки, поэтому изменение этого объекта в одном классе будет отражаться везде, где этот объект был передан. Вы также можете изучить шаблон Singleton, если хотите, чтобы класс был доступен глобально. Последнее предложение - использовать config.as, используя объявления CONST, просто создать новый экземпляр этого экземпляра, когда вы хотите получить от него данные

2 Это недостаток использования события enterFrame. Измените это на таймер и избавьтесь от энтерфрейма. Также, если у вас есть тяжелые манипуляции с данными, которые изменяют экранный объект многократно с частотой кадров, вы можете заглянуть в UIComponent и изучить методы аннулирования. Это позволит дисплею обновляться только при перерисовке (частоте кадров)

3 Вы пытались кешировать AsBitmap

4 Я не уверен, сколько фактически используется графического процессора, поскольку он все еще довольно новый.

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