是否可以在 Flash (ActionScript 3) 中进行完全平滑的滚动?在下面的测试中,我将创建一个包含随机噪声的位图,然后定期将其向左移动。我没有在后台运行繁重的任务。我正在寻找的是与 1987 年的 Amiga 500 相当的平滑度 :-)
package {
import flash.display.*;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Game extends Sprite {
var noiseBitmap;
public function Game() {
var noiseBitmapData = new BitmapData(stage.stageWidth * 3, stage.stageHeight);
noiseBitmapData.noise(0, 0, 255, 7, true);
noiseBitmap = new Bitmap(noiseBitmapData);
addChild(noiseBitmap);
var t = new Timer(1000/30, 999999);
t.addEventListener("timer", function (e:TimerEvent) {
noiseBitmap.x--;
});
t.start();
}
}
}
“渲染代码”在我的计算机(2.4 GHz Mac)上运行需要不到 1 毫秒,但运动偶尔会卡住一两帧,使运动显得生涩。
FPS 在 Flash 中设置为 30。我尝试使用“测试电影”和浏览器(Chrome)运行它。目标是 Flash Player 11.2。我也尝试调用 e.updateAfterEvent() 来强制重绘。我还尝试将延迟和 FPS 设置为略有不同的值,但没有任何改善。
这与AS3 中的不平滑滚动不同,因为我已经在使用 BitmapData。我也尝试过使用 ENTER_FRAME 事件而不是计时器,如对该问题的回复中所建议的那样,但它没有帮助。