Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Flash тормозит в браузерах? (http://www.flasher.ru/forum/showthread.php?t=208589)

sospamom 01.08.2014 23:37

Flash тормозит в браузерах?
 
Flash тормозит в браузерах. Проверял на последних версиях IE, Firefox. Версия FlashPlayer последняя релизная.

Сравните как гладко скользит квадрат в standalone-плеере и как дрожит-подергивается в браузере. Иногда в браузере тоже скользит гладко, нужно подождать секунд 10.

[Вложение #31074 - не найдено]

Код AS3:

package 
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Main extends Sprite
        {
                private var _bitmap:Bitmap;
 
                public function Main():void
                {
                        _bitmap = new Bitmap(new BitmapData(100, 100, false, 0));
                        _bitmap.y = 100;
                        addChild(_bitmap);
 
                        addEventListener(Event.ENTER_FRAME, enterFrame);
                }
 
                private function enterFrame(e:Event):void
                {
                        _bitmap.x++;
                        if (_bitmap.x > 500) _bitmap.x = -100;
                }
        }
}

Проблема в том, что в моей игре этот эффект так сильно бросается в глаза, что кажется, что игра тормозит.
Тестировал на 4-рех компах.
В диспетчере задач процессор нагружен на ~4%, редко поднимается до 20%. В Scout память не растет (занимает ~130Мб), Garbage Collector не запускается.

Движок flashpunk, вся графика рисуется на экран блиттингом.

Задано 60fps.

Что делать?

LifeIsRhythm 01.08.2014 23:59

У меня не показывает...

А вариант только один - анимировать все движения. Да и то они будут дергаться.

Котяра 02.08.2014 00:05

во-первых, никогда не делайте привязку к фреймрейту. Делайте всегда по времени.
во-вторых, поиграйте со скоростью - чем выше скорость тем менее заметны перерисовки.

dimarik 02.08.2014 00:23

Присоединяюсь к Котяриной "во-первых". А после этого можно скрасть неравномерность движения с помощью блюр-фильтра или подобной механики. Но это уже от лукавого, по моему мнению.

Я мастрячил года три назад плавный скролл для игрушки типа "Contra", с оригинальными изображениями. То, что я увидел мне настолько не понравилось, что я решил отложить это до лучших времен. Времена наступили, но несколько в другом плане. У флеша появился Stage3D. Но и здесь тебя поджидает масса подвохов. Может лучше на Unity перейти сразу?

sospamom 02.08.2014 00:39

Вложений: 1
Спасибо за помощь, но по времени тот же самый эффект. В standalone гладко, в браузерах дрожит.
Фильтры попробую, если не получится по-другому решить.

empty.swf   (0.7 Кб)


Код AS3:

package 
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.utils.getTimer;
 
        public class Main extends Sprite
        {
                private var _bitmap:Bitmap;
                private var _timeInPreviousFrame:Number;
 
                public function Main():void
                {
                        _bitmap = new Bitmap(new BitmapData(100, 100, false, 0));
                        _bitmap.y = 100;
                        addChild(_bitmap);
 
                        addEventListener(Event.ENTER_FRAME, enterFrame);
                }
 
                private function enterFrame(e:Event):void
                {
                        var elapsed:Number = getTimer() - _timeInPreviousFrame;
                        _timeInPreviousFrame = getTimer();
 
                        _bitmap.x += elapsed / 10;
                        if (_bitmap.x > 500) _bitmap.x = -100;
                }
        }
}


dimarik 02.08.2014 00:48

Попробуй обойтись одним getTimer(). И потестировать это не под хромом (с его PPAPI). Хотя ты и так уже все понял.

ShockWave512 02.08.2014 01:12

Давно перешел на Starling, плавность идеальная, не хуже чем в Unity.

dimarik 02.08.2014 01:22

Это проходит со сложностью приложения.

Tails 02.08.2014 10:22

Цитата:

Сообщение от dimarik (Сообщение 1169998)
Это проходит со сложностью приложения.

Как именно сложность влияет на плавность анимации?

sospamom 02.08.2014 23:38

Вложений: 1
Оставил один getTimer(). Тестирую под Firefox и IE. Все равно квадрат дрожит и дергается.
Попробовал задать PixelSnapping.NEVER — не помогает.

empty.swf   (0.7 Кб)


Код AS3:

package 
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.PixelSnapping;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.utils.getTimer;
 
        public class Main extends Sprite
        {
                private var _bitmap:Bitmap;
                private var _timeInPreviousFrame:Number;
 
                public function Main():void
                {
                        _bitmap = new Bitmap(new BitmapData(100, 100, false, 0), PixelSnapping.NEVER);
                        _bitmap.y = 100;
                        addChild(_bitmap);
 
                        addEventListener(Event.ENTER_FRAME, enterFrame);
                }
 
                private function enterFrame(e:Event):void
                {
                        var getTimerTemp:Number = getTimer();
                        var elapsed:Number = getTimerTemp - _timeInPreviousFrame;
                        _timeInPreviousFrame = getTimerTemp;
 
                        _bitmap.x += elapsed / 10;
                        if (_bitmap.x > 500) _bitmap.x = -100;
                }
        }
}


Цитата:

Хотя ты и так уже все понял.
Про что ты?


Часовой пояс GMT +4, время: 15:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.