cacheAsBitmap не влияет на спрайт, замаскированный scrollRect в AIR для iOS

#ios #actionscript-3 #air

#iOS #actionscript-3 #air

Вопрос:

Я разрабатываю простой компонент пользовательского интерфейса kinetic menu для AIR для iPad. По сути, это облегченное заполнение для выпадающего списка, которое соответствует стилю iOS. У меня есть спрайт, содержащий от 2 до 60 кнопок элементов, который появляется и позволяет вам листать / прокручивать их, показывая только около 7 элементов в любой момент времени.

В моей первой попытке для этого использовалась маска поверх моего спрайта, перемещая мой спрайт меню вверх и вниз под неподвижной маской. Это привело к тусклым результатам на тестовом устройстве (<20 кадров в секунду).

Затем я попробовал быстрое решение, оставив спрайт меню вне списка отображения и используя BitmapData.draw() для отображения только той части списка, которая мне была нужна. Это дало наилучшие результаты на моей платформе Windows dev, но на этот раз частота кадров упала ниже 10 кадров в секунду на iPad. Я предполагаю, что я подвергался либо обременительному использованию ЦП, либо штрафу за возврат графического процессора. Первоначально я надеялся, что смогу запускать свое приложение со скоростью 60 кадров в секунду, однако я увеличил свою цель до более скромных 30 кадров в секунду.

Что подводит меня к моей 3-й попытке создания этого компонента пользовательского интерфейса с использованием функции маскирования sprite .scrollRect в сочетании с .cacheAsBitmap . Опять же, наблюдаемое поведение сильно отличается между AIR в Windows и iOS. В Windows он только перерисовывает часть спрайта меню, ограниченную размерами scrollRect, как и должно быть. С iOS я могу коснуться области экрана выше или ниже видимой области спрайта меню и по-прежнему перетаскивать меню, даже если мой палец находится над «пустым» пространством! Производительность здесь приличная, колеблется между (19-25 кадров в секунду) и почти наверняка была бы идеальной при 30, если бы она работала так же, как в Windows.

Есть ли у кого-нибудь какие-либо идеи о поведении функции scrollRect в AIR для iOS или о лучшем способе реализации скользящего меню в стиле iOS в AIR для iOS?

Обратите внимание, что вышеупомянутые методы были опробованы как в режиме CPU, так и в режиме GPU, но режим CPU работал значительно лучше. Я использовал AIR 2.7, установленный поверх Flash Pro CS 5.5, с FlashDevelop в качестве моей IDE.

Комментарии:

1. Одна вещь, о которой я слышал противоречивые или, по крайней мере, неоднозначные ответы, — это обработка растровых изображений AIR for iOS. Я знаю, что в режиме GPU все экземпляры BitmapData кэшируются на графическом процессоре, но я не смог получить четкого представления о том, как они обрабатываются в режиме CPU. Я предполагаю, что аномалия scrollRect / cacheAsBitmap связана с этим.

Ответ №1:

http://esdot.ca/site/2011/fast-rendering-in-air-3-0-ios-android#comment-10

Действительно хороший парень из приведенной выше ссылки: «Да, scrollRect в основном недоступен для мобильных устройств, в основном забудьте, что API даже существует. Хотите верьте, хотите нет… маскировка старой школы — это правильный путь. Мы ходим по кругу и по кругу!»