[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


