[AS]画像をゆっくり動かす方法
偉い人に教えてもらったテクニック。
通常ゆっくり動かすときに1px以下だとカクカクした動きになります。
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; /** * ... * @author 393 */ public class Test extends Sprite{ private var bm:Bitmap; //ライブラリに画像を用意し、クラス名Bmpでリンケージ。 //画像サイズは400×300 public function Test() { var bmd:BitmapData = new Bmp(0, 0); bm = new Bitmap(bmd); addChild(bm); addEventListener(Event.ENTER_FRAME , enterFrameHandler); } private function enterFrameHandler(e:Event):void { //かくかくと動く bm.x += 0.08; bm.y += 0.08; } } }
スムーズに動かしたいときは、beginBitmapFill()を使えばOK。
package { import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Matrix; /** * ... * @author 393 */ //ライブラリに画像を用意し、クラス名Bmpでリンケージ。 //画像サイズは400×300 public class Main extends Sprite{ private var matrix:Matrix = new Matrix(); private var bmp:BitmapData; private var sp:Sprite; private var mx:Number = 0; private var my:Number = 0; private var w:Number; private var h:Number; public function Main() { bmp = new Bmp(0, 0); sp = new Sprite(); addChild(sp); buttonMode = true; this.addEventListener(Event.ENTER_FRAME , xEnterFrame); } function xEnterFrame (e:Event):void { mx += 0.05 my += 0.05 matrix.tx = mx; matrix.ty = my; sp.graphics.clear(); //smoothプロパティをtrueにするのがポイント sp.graphics.beginBitmapFill(bmp, matrix,false,true); sp.graphics.drawRect(mx, my, 400, 300); sp.graphics.endFill(); } } }
このときのポイントは、beginBitmapFill()の第3引数のsmoothをtrueにするということ。
(デフォルトはfalse)
falseのままだと、先のサンプルと同じくカクカクした動きとなります。
もっと簡単にできる方法を追加しました。
[AS]画像をゆっくり動かす方法 その2