PDA

Просмотр полной версии : Плавное движение


RadiationX
30.09.2006, 13:33
Вот код на AS3:

package {
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;

public class Test extends Sprite
{
private var w:Number;
private var h:Number;

public function Test()
{
w = 200;
h = 200;

stage.stageWidth = w;
stage.stageHeight = h;
stage.frameRate = 30;
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

x = 5;
y = 50;
graphics.beginFill(0xff0000, 1);
graphics.drawCircle(0, 0, 5);

addEventListener(Event.ENTER_FRAME, Update);
}

public function Update(event:Event):void
{
x += 5;
if(x > w) x = 5;
}
}
}

При перемещении шарика видно как он дергается и неравномерно ускоряется. Почему? Как сделать движение плавным?

Nirth:испольхуйте теги

RadiationX
01.10.2006, 20:08
Неужели никто не знает?

etc
01.10.2006, 20:29
Естесственно видно, шаг слишком большой.

RadiationX
02.10.2006, 18:41
А если нужно чтобы двигалось с большой скоростью? Видел похожие ролики на AS2, там все движется быстро и плавно.

Nirth
02.10.2006, 23:40
Подобный код на любом языке будет дергатся.

MerlinTwi
02.10.2006, 23:51
Заставь его перерисовываться чаще :)
...
import flash.utils.Timer;
...
var t:Timer = new Timer(3);
t.start();
t.addEventListener("timer", Update);
//addEventListener(Event.ENTER_FRAME, Update);
}

public function Update(e:Event):void
{
x += 1;
if(x > w) x = 5;
e.updateAfterEvent();
}

RadiationX
03.10.2006, 03:11
Подобный код на любом языке будет дергатся.
Подскажите пожалуйста как сделать правильно

Заставь его перерисовываться чаще
Не помогает, все равно дергается

По идее при смещении надо:
x += speed * delta

где delta - время прошлого цикла

etc
03.10.2006, 18:21
Только если увеличить FPS, других вариантов не вижу. Или запустить с интервалом и updateAfterEvent()