Vsync во Flex / Flash / AS3? - PullRequest
       13

Vsync во Flex / Flash / AS3?

9 голосов
/ 13 июня 2009

Я работаю над 2D шутером с множеством движущихся объектов на экране (пули и т. Д.).

Я использую BitmapData.copyPixels (...) для рендеринга всего экрана в буфер: BitmapData. Затем я «copyPixels» из «буфера» на экран: BitmapData. Частота кадров 60.

private var bitmap:Bitmap = new Bitmap();
private var buffer:Bitmap = new Bitmap();

private function start():void {
    addChild(bitmap);
}

private function onEnterFrame():void {
    // render into "buffer"
    // copy "buffer" -> "bitmap"
}

Проблема в том, что спрайты разрываются на части: какая-то часть спрайта сместилась горизонтально.

Похоже, игра для ПК с выключенным VSYNC.

Кто-нибудь решил эту проблему?

ОБНОВЛЕНИЕ: вопрос не в производительности, а в том, чтобы избавиться от разрыв экрана .

[!] ОБНОВЛЕНИЕ: Я создал другой вопрос , и здесь вы можете попробовать обе реализации: используя Flash way или BitmapData + copyPixels ()

Ответы [ 3 ]

7 голосов
/ 15 марта 2010

Я чувствую твою боль, когда я в настоящее время в окопах, разрабатываю свою собственную игру. При настройках по умолчанию Flash рендерер вызывает ужасные проблемы с разрывом экрана / v-синхронизацией, независимо от того, какой код вы создаете.

Вот почему я был рад найти самый простой и элегантный ответ, который не был перефакторинг кода (который не помогает ни на секунду, проблема в Flash Player, а не в коде).

Просто включите аппаратное ускорение в настройках публикации . Есть два разных варианта:

Уровень 1: Прямой ; и Уровень 2: GPU .

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

Целевой рынок играет здесь важную роль: если это серьезная игра для геймеров, вам не нужно беспокоиться о возможных проблемах с производительностью, поскольку большинство геймеров имеют GPU.

Эта статья не дала мне конкретного решения, но привела меня в правильном направлении. НО, если ваша игра будет в окне браузера, вам, возможно, придется использовать ту же технику для установки wmode на direct или gpu.

0 голосов
/ 13 июня 2009

Не сохраняйте вещи в BitmapData, которые убьют, абсолютно убивают ваше приложение. Растровые данные не очень производительны.

Создайте все свои игровые элементы во флэш-памяти, как «Спрайты» (или, если нужно, MovieClips), а затем работайте так, как должен был работать флэш, в качестве платформы векторной анимации. Он никогда не был оптимизирован для двумерной растровой графики. Двухмерная векторная графика работает хорошо, и даже если вы импортируете растровые изображения, они будут работать лучше при перемещении, чем при визуализации в объект BitmapData.

0 голосов
/ 13 июня 2009

Первое, что вы можете сделать, - перестать относиться к Flash Player, как к DOS. Flash Player - это высоко оптимизированный движок 2D-игр, и я не совсем понимаю, почему вы пытаетесь изобрести колесо, копируя множество кусочков растрового изображения. Конечно, у вас будут проблемы с производительностью.

Flash Player не позволяет синхронизировать с любым вертикальным или горизонтальным пробелом, потому что Flash Player просто не имеет этого понятия.

Я лично считаю, что вам следует переосмыслить подход, если вы хотите более плавную анимацию. Flash Player, безусловно, способен на это, вы просто пытаетесь использовать неправильный подход.

...