У нас есть flash-игра, разрабатываемая в ActionScript 3, и она работает намного медленнее на нашем удаленном сервере.
Характеристики игры:
- 6-8 различных видеоклипов, все 1-кадровые статические файлы png от 10x10 до 100x100
- от 10 до 60 экземпляров этих MC на экране в любой момент времени
- Цикл события запускается с таймера флеш-памяти на 25 мс
- все взаимодействие осуществляется через клавиатуру
Странно то, что мы публикуем файл swf и запускаем его локально, и все быстро. Мы копируем SWF на удаленный сервер, и все работает намного медленнее. Музыка воспроизводится с нормальной скоростью, но все видеоклипы движутся по экрану примерно на половине скорости.
Почему файл будет работать по-другому при получении с удаленного сервера? Разве SWF всегда не запускается локально? Кроме того, мы запустили его локально и удаленно с запущенным диспетчером задач, и он, похоже, не потребляет много ресурсов ЦП или памяти.
РЕДАКТИРОВАТЬ: Хорошо, это действительно странно. Я добавил текстовое поле framecounter в игру. Он сообщает количество мс с момента последнего таймера. Это последовательно сообщает 50 мс. Мой таймер явно установлен на 25. Это объясняет половину скорости, но что объясняет это? Я также добавил проверку свойства timer.Interval, чтобы увидеть, изменилось ли оно и нет; во время игры игра по-прежнему устанавливается на 25.
DOUBLE EDIT !: Я нашел эту статью: http://www.bit -101.com / blog /? P = 910 и переключил свой код на использование ENTER_FRAME вместо таймера, и это работает. Я получаю полные 40 кадров в секунду, даю или беру несколько%. Все еще не уверен, что случилось с таймером, хотя; если бы он задерживался из-за времени, проведенного в моем цикле, он бы колебался, но это не так. Это 50 мс каждый раз, независимо от того, сколько происходит.
Вот код, который я использую (более или менее):
t = new Timer(25);
t.addEventListener(TimerEvent.TIMER, timerTick);
t.start();
и в тиковом коде таймера я использую getTimer () для синхронизации времени между тиками. Каждый раз выходит на 50 мс.