Товарищи, вчера весь день лопатил и рунет и буржуйские форумы в поиске проблемы, связанной с
мерцанием графического объекта при его программном движении. Эта проблема и здесь на форуме поднималась различными пользователями в нескольких темах, но нигде результирующего решения так и не было озвучено.(или я слепой).
НЕТ ПРОБЛЕМ С ПЛАВНОСТЬЮ ДВИЖЕНИЯ Есть проблема с отрисовкой объекта при его перемещении. То есть как я понимаю проблема в том 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 - не помогает
Кто-то говорит что надо ждать новой версии флеш-плеера, кто-то что это проблема ВООБЩЕ на флеше не решается. Но может есть у кого какой-нибудь опыт в борьбе с этим эффектом ? Был бы очень признателен.