Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Мерцание при движении объекта (пример внутри)) (http://www.flasher.ru/forum/showthread.php?t=174695)

Black Soviet 31.01.2012 11:09

Мерцание при движении объекта (пример внутри))
 
Товарищи, вчера весь день лопатил и рунет и буржуйские форумы в поиске проблемы, связанной с мерцанием графического объекта при его программном движении. Эта проблема и здесь на форуме поднималась различными пользователями в нескольких темах, но нигде результирующего решения так и не было озвучено.(или я слепой).
НЕТ ПРОБЛЕМ С ПЛАВНОСТЬЮ ДВИЖЕНИЯ Есть проблема с отрисовкой объекта при его перемещении. То есть как я понимаю проблема в том Flash начинает рисовать объект на новом месте, до конца не удалив его с предыдущего, в результате на объекте видны мерцающие горизонтальные полосы.
В качестве примера быстро набросал программку с вращением шара по эллипсоидной траектории (фон черный, объект белый, специально для лучшего контраста), где сами можете даже не на слишком большой угловой скорости увидеть эффект с мерцанием.
http://megaswf.com/serve/2104891
Код:
Код AS3:

package 
{
 
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.display.Shape;
        import flash.display.BitmapData;
        import flash.display.Bitmap;
        import flash.utils.getTimer;
        import flash.events.TimerEvent;
        import flash.utils.Timer;
 
 
        public class main extends MovieClip
        {
                var a:int=100; // горизонтальный радиус (для эллипса)
                var b:int=100; // вертикальный радиус (эллипса)
                var cx:int = 350; // Х центра точки вокруг которой вращается шар
                var cy:int = 150; // Y центра точки вокруг которой вращается шар
                var t:Number=0;      // текущий угол в радианах
                var speed:Number = 0.05; // скорость вращения в радианах
                var mc:MovieClip; // Шар
                var dx,dy:Number; // используются как вспомогательные в формуле эллипса
 
                public function main()
                {
                mc = new Planet();
                addChild(mc);
                //mc.cacheAsBitmap = true;
                //mc.scaleX=1.1;
 
                addEventListener(Event.ENTER_FRAME,Vertigo);
                upBtn.addEventListener(MouseEvent.CLICK,Up); // нажатие на поле увеличивает скорость вращения
                downBtn.addEventListener(MouseEvent.CLICK,Down); // нажатие на поле уменьшает скорость вращения
 
                }
 
                function Vertigo(e:Event):void
                {
                        t +=  speed; // увеличиваем угол
                        dx = a * Math.cos(t); // определяем положение по Х на эллипсе
                        dy = b * Math.sin(t); // определяем положение по Y на эллипсе
                        mc.x = cx + dx; //выставляем координаты шара, учитывая центр вращения (сх, су)
                        mc.y = cy + dy;
 
 
                        speedBar.text=String(speed); // показываем скорость на экране
                }
                function Up(e:MouseEvent):void
                {
                        speed+=0.01;       
                }
                function Down(e:MouseEvent):void
                {
                        speed-=0.01;       
                }
        }
 
}

Что пробовал для решения этой проблемы:
  • запихивать в мувиклип и вектор и растр - не помогает
  • cacheAsBitmap - не помогает
  • Использовать Timer с updateAfterEvent вместо EnterFrame - не помогает
  • прямолинейное движение только по целым координатам - не помогает
  • Увеличение FPS - не помогает

Кто-то говорит что надо ждать новой версии флеш-плеера, кто-то что это проблема ВООБЩЕ на флеше не решается. Но может есть у кого какой-нибудь опыт в борьбе с этим эффектом ? Был бы очень признателен.

i.o. 31.01.2012 11:29

Полет нормальный (win7 x64):
Цитата:

10.3.181.34 release
11.0.1.60 debug

Black Soviet 31.01.2012 11:39

i.o.

Ух ты! Ух ты! У меня уже при угловой скорости =0.12 мерцает, при 0.18 аццкие перетяжки.
Спасибо, уже интереснее!

Hauts 31.01.2012 12:10

Попробуйте поменять частоту обновления экрана :)

Black Soviet 31.01.2012 12:16

Hauts

Вы хотите сказать, что и у вас шар не мерцает ?

Hauts 31.01.2012 12:20

Мерцает. Но я к такому эффекту давно привык и как-то не задумывался об этом.

Black Soviet 31.01.2012 12:31

i.o.

Скачал 11 версию плеера, всё равно мерцает.

Добавлено через 2 минуты
Hauts

Вспомните любую мало-мальскую флеш-игру в которой достаточно крупные объекты (или даже фон) двигаются по криволинейной траектории и при том не мерцают.

expl 31.01.2012 13:34

Да, что-то здесь этот отвратительный эффект плеера во всей красе проявляется. Может попробовать градиент в растр загнать (научного обоснования у меня нет, но вдруг поможет)?

fish_r 31.01.2012 13:47

Только недавно такая тема поднималась

Black Soviet 31.01.2012 13:59

fish_r

Нет, я в первом посте написал что Я НЕ ПРО ДЕРГАННОСТЬ при перемещении говорю. Шар в моём проекте движется плавно, он мерцает, Флеш не успевает отрисовать его.


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

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