Flash AS3 - Счетчик очков - PullRequest
       5

Flash AS3 - Счетчик очков

0 голосов
/ 07 февраля 2012

Очевидно, что есть много сообщений о счетчиках очков, и у меня есть счетчик, который обновляет каждый кадр (функция Enter_frame), который работает отлично. Переменная Оценка увеличивается каждый кадр, и, таким образом, текстовое поле изменяется для отображения оценки.

Моя проблема в том, что на iOS это вызывает серьезные проблемы с частотой кадров, я говорю о падении на 5-10 кадров в секунду при включенном тикере, это очень запутанно и т.д. Мне просто интересно, есть ли Я полагаю, что это связано с тем, что оно должно обновлять и перерисовывать текстовое поле каждый кадр, но я не могу обойти это.

Любые предложения приветствуются,

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Использование TextField с непрозрачным фоном или переход на растровые шрифты может повысить производительность.

Например, вы можете заранее создать отдельные растровые изображения, или во время выполнения вы можете использовать bitmapData.draw для генерации отдельных экземпляров BitmapData для каждого необходимого вам числа. Затем вы можете поменять местами растровые изображения для отображения правильного количества очков.

В будущем вы также можете рассмотреть возможность использования NME, который очень похож на Flash, но работает в три-девять раз быстрее, чем Adobe AIR для мобильных платформ. Например, тест Iain Lobb's BunnyMark может отображать 500 кроликов с вращением и альфа-каналом при 16 кадрах в секунду с использованием Adobe AIR на iPhone 4. NME отображает 4750 кроликов со скоростью 30 кадров в секунду на одном устройстве.

Это то, что я использую, чтобы избежать проблем с производительностью

http://www.haxenme.org

0 голосов
/ 07 февраля 2012

Вы должны переопределить счет как функцию времени.

score = t / 100; //where t is in milliseconds

В начале вашей игры инициализируйте переменную таймера;

var start:Number = getTimer();

Затем в вашем ENTER_FRAME слушателе вычислите счет по фактическому времени, а не по числукадры:

score = (getTimer() - s) / 100;

Это независимый от производительности способ расчета результата по времени.

...