Продуктивність відтворення для Flash-ігор


11

Я читав на ТАК про рідну флеш-рендерінг проти створення власного BitmapDataбуфера кадру, і деякі відповіді були дещо суперечливими, тому мені було цікаво:

  1. Це взагалі найкраща практика пройти користувальницький маршрут буфера Bitmap або найкраще залишити візуалізацію у флеш-двигун?
  2. Якщо ви використовуєте векторні анімації ( MovieClip-и) на відміну від спрайтів, чи це змінює відповідь на вищезазначене?
  3. Якщо так, то найкраща практика використовувати анімації на основі спрайту?

(Я націлюю Flash 10, якщо це має значення)

Відповіді:


14

1. Немає загальної найкращої практики.

Якщо у вашій грі є багато елементів (складної форми), частинок тощо, підхід до буферних рамок буде набагато швидшим. Буфер растрових зображень також покращиться зі збільшенням складності ваших спрайтів. Вектор визуализатор буде сповільнюватися з більш складними формами або твін (форма підліткових) анімації, він має деякі інші переваги , хоча:

  • Ви можете вільно масштабувати свої активи або навіть збільшувати масштаб сцени без втрати якості.
  • Обертання або інші перетворення, як перекос, буде набагато простіше виконати у векторній графіці

Отже, на закінчення, це зводиться до того, яку гру ви будуєте.

2. Використання MovieClips замість растрових спрайтів

Я думаю, ви мали на увазі "растрові спрайт-листи", а не клас Sprite AS3 ?

Це насправді не має значення. Ви завжди можете перетворити анімацію на основі MovieClip в анімовані растрові карти. Або вручну, експортуючи фільм у кадри та перетворюючи їх на аркуш спрайту , або динамічно, виводячи спрайт-лист із вашого MovieClip під час виконання. Ось як я це зробив:

  1. Створіть екземпляр MovieClip і stop()його.
  2. Створіть new BitmapDataоб’єкт такої ж ширини та висоти, що і Movieclip.
  3. Використовуйте метод draw () , щоб надати MovieClip на BitmapData.
  4. Зберігайте об’єкт BitmapData в масиві чи векторі.
  5. Перейдіть до наступного кадру вашого MovieClip і повторіть кроки 2 - 4, робіть це, поки ви не дійшли до останнього кадру свого MovieClip. Також корисно оновлювати дві змінні максимальною шириною та максимальною висотою кадрів MovieClip (оскільки вони можуть змінюватися від кадру до кадру).
  6. Тепер ви можете об'єднати всі збережені об’єкти BitmapData в Sprite-Sheet (використовуйте BitmapData.copyPixels () )

3. Анімації на основі спрайту

Як було сказано у відповіді на ваше перше запитання, на це немає однозначної відповіді. Якщо вам потрібно виконати багато перетворень зі своїми об'єктами, наприклад. Масштабування та обертання вам, мабуть, краще, використовуючи вбудований флеш-рендер. Якщо у вас є заздалегідь визначені анімації, які можна випікати на спрайт-листи (вручну або динамічно), і якщо вам потрібно одночасно відображати сотні спрайтів, то перейдіть до двигуна відображення растрових карт.


Коли (якщо?) Flash почне використовувати апаратне прискорення для його візуалізації, візуалізатор copyPixel, ймовірно, буде повільнішим, ніж нативний рендерінг.
Барт ван Хекелом

6

Я б сказав, що якщо ви будуєте гру на основі растру за допомогою спрайтів, займіться створенням власного рішення для візуалізації за допомогою BitmapData. Якщо ви будуєте гру на основі векторів, займіться використанням вбудованих механізмів анімації за допомогою MovieClips.

Якщо ви працюєте зі створенням спеціального рішення для візуалізації, ви майже відмежуєтеся від Flash, використовуючи лише ActionScript, щоб здійснити те, що вам потрібно. Двигун flixel використовує цей метод, і це досить приємно. Я вважаю за краще писати власний двигун з нуля, але ви розумієте.

За допомогою вбудованих механізмів анімації Flash працює найкраще для векторних ігор, оскільки ви можете легко створити свої бібліотечні активи як MovieClips, які ви зможете інстанціювати у ActionScript на вимогу. Ви використовуєте тимчасову шкалу, надану відеокліпами, для обробки анімації та відповідно переміщуйте розташування спрайта. Всі BattleOn! такі ігри, як Adventure Quest Worlds використовують цей метод. Це також добре виглядає.

Я припускаю, що ваше останнє питання стосується використання класу Sprite замість класу MovieClip для векторної анімації. Sprite - це MovieClip без часової шкали, тому ви втратите зручність керування анімацією.


3

Незважаючи на те, що загальноприйнята думка, що блищення швидше, я не бачив жодних орієнтирів, які б це підтверджували. Деякі розробники віддають перевагу блискучі, оскільки це дозволяє їм ставитись до Flash як до більш загальної віртуальної машини та контролювати рендерінг. Однак якщо вам подобається вбудований список дисплеїв (що я роблю), Flash може із задоволенням переміщуватись, змінювати масштаб, обертатись та застосовувати приємні ефекти до сотень на екрані DisplayObjects (наприклад, MovieClips, Sprites, Bitmaps) з високою швидкістю кадрів, тому якщо вони мають невеликі розміри, наприклад менше 200x200 пікселів. Можна використовувати MovieClips без використання векторів. Більшість ігор використовуватиме растрові активи залежно від системи, яку вони використовують. Але іноді корисно розміщувати та анімувати бітові карти на часовій шкалі, особливо якщо ви працюєте з дизайнером Flash-спеціаліста, а не піксельним виконавцем. Встановивши якість сценічного режиму в низький рівень, ви отримаєте набагато кращі показники за рахунок більш потворних перетворень. Flash не відображатиме жодні об’єкти, які не ввімкнуті на екран, тому вони не сповільнюватимуть вас.

Там, де Flash може повільно рухатись та перетворювати дуже великі растрові карти - наприклад, якщо у вас дуже великий рівень прокрутки або багато шарів паралакса. Гібридний підхід використання MovieClips для ваших ігрових об’єктів, одночасно блискучий фон із екрана екрана, може бути швидшим і дозволить вам мати нескінченно великі рівні, в той же час дозволяючи легко використовувати стандартні спрайти та MovieClips.


Складні векторні форми також можуть мати істотний вплив на продуктивність. Якщо у вас анімаційні MovieClips з великою кількістю градієнтів, і якщо ви не звертаєте уваги на рівень деталізації ваших векторних форм, то вона буде малювати набагато повільніше, ніж растрова карта.
bummzack

Можна використовувати MovieClips без використання векторів. Більшість ігор використовуватиме растрові активи залежно від системи, яку вони використовують. Але іноді корисно розміщувати та анімувати бітові карти на часовій шкалі, особливо якщо ви працюєте з дизайнером Flash-спеціаліста, а не піксельним виконавцем.
Iain

Так, для флеш-ігор я не рекомендую використовувати градієнти для будь-якого, що буде векторним і відображається спалахом кожного кадру, крім декількох речей на HUD та спрайті програвача. Градієнти швидко їдять продуктивність.
AttackingHobo

Деякі орієнтири візуалізації та оновлення: 8bitrocket.com/2007/12/23/…
Max Dohme
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.