[AS]画像をゆっくり動かす方法 その2
以前にも書いた内容についての補足です。
画像をゆっくり動かす方法
上のリンクを読んでもらうとわかるのですが、
画像をゆっくり動かすにはbeginBitmapFill()の第2引数のMatrixを使って位置を変更しながら毎フレーム描画する、
ということだったのですが、これだとあまり直感的でなくてちょっとめんどくさい。
↓のサイトを観たらもっと簡単にできました。
にゃあプロジェクト|[AS3.0] カルーセルに挑戦! (2)
要はShapeなりSpriteなりにbeginBitmapFill()を使って(smoothing=trueで)描画してしまえば、画像が描画されたShapeなりSpriteは0.1px刻みで動かしてもカクカクすることはないようです。
前回のスクリプトを例に修正すると、
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); //■追加:あらかじめspにBitmapDataを描画する。 sp.graphics.beginBitmapFill(bmp, null, false, true); sp.graphics.drawRect(0,0,bmp.width,bmp.height); } 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(); //直接動かしてもカクカクしない sp.x += 0.05; sp.y += 0.05; } } }
こちらの方が直感的に使えていいですね。
Tweet
1 Comment
[…] もっと簡単にできる方法を追加しました。 [AS]画像をゆっくり動かす方法 その2 Tweet […]