Flash中可以完全平滑滚动(ActionScript 3)吗?在下面的测试中,我创建了一个由随机噪声组成的位图,然后定期将它移动到左边。我没有在后台运行繁重的任务。我所寻找的是光滑度,这将是看齐我的Amiga 500从1987年:-)Flash AS3上的平滑滚动
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();
}
}
}
的“渲染代码”需要< 1毫秒到我的电脑(2.4GHz的苹果机)上运行,但仍机芯偶尔会卡住一两帧,使机芯显得不平整。
Flash中的FPS设置为30。我试着用“测试电影”和浏览器(Chrome)来运行它。 Target是Flash Player 11.2。我也尝试调用e.updateAfterEvent()强制重绘。我也玩过将延迟和FPS设置为稍微不同的值,但没有改进。
这与not smooth scrolling in AS3不同,因为我已经使用了BitmapData。我也试着用ENTER_FRAME事件来代替计时器,正如在回答这个问题时所建议的那样,但它没有帮助。
帧之间的延迟保持在31-34毫秒之间。 – Bemmu
正如其他地方所回答的那样,您绝对应该使用ENTER_FRAME而不是定时器。但无论哪种方式,垃圾收集器都可能导致这种急躁行为。如果您还没有访问任何分析工具来诊断您的代码,Adobe Scout非常值得一看(免费)。 – 2013-01-14 23:43:59