今回は,
Starlingフレームワークに[ライブラリ]のビットマップを表示する
まずは準備として,
[ライブラリ]
var myBitmapData:BitmapData = new Pen();
var instance:Bitmap = new Bitmap(myBitmapData);
addChild(instance);
Starlingフレームワークではどうなるか。第1に,
表1 ビットマップイメージをステージに表示するために用いるクラス
役割 | クラス | |
---|---|---|
ActionScript 3. | Starlingフレームワーク | |
ビットマップイメージをもつ | flash. | starling. |
ビットマップをステージに表示する | flash. | starling. |
だが,
// ActionScript 3.0クラス定義ファイル: MySprite.as
package {
import flash.display.BitmapData;
import starling.display.Sprite;
import starling.display.Image;
import starling.textures.Texture;
import starling.events.Event;
public class MySprite extends Sprite{
private var instance:Image;
public function MySprite() {
addEventListener(Event.ADDED_TO_STAGE, initialize);
}
private function initialize(eventObject:Event):void {
var myBitmapData:BitmapData = new Pen();
var myTexture:Texture = Texture.fromBitmapData(myBitmapData);
instance = new Image(myTexture);
addChild(instance);
instance.x = stage.stageWidth / 2;
instance.y = stage.stageHeight / 2;
instance.pivotX = instance.width / 2;
instance.pivotY = instance.height / 2;
}
}
}
これで
// フレームアクション: メインタイムライン
import starling.core.Starling;
var myStarling:Starling = new Starling(MySprite, stage);
myStarling.start();
定義済みActionScript 3.0のフレームアクションによるドラッグ
ふたつ目の課題はマウスドラッグだ。これも,
- InteractiveObject.
mouseDownイベント (定数MouseEvent. MOUSE_ DOWN) のリスナー - InteractiveObject.
mouseMoveイベントにドラッグのためのリスナーを加える。 - InteractiveObject.
mouseUpイベントにドラッグ終了のリスナーを加える。
- InteractiveObject.
- InteractiveObject.
mouseMoveイベント (定数MouseEvent. MOUSE_ MOVE) のリスナー - インスタンスの位置をマウスポインタの座標に追随させる。
- InteractiveObject.
mouseUpイベント (定数MouseEvent. MOUSE_ UP) のリスナー - InteractiveObject.
mouseMoveイベントのリスナーを除く。 - InteractiveObject.
mouseUpイベントのリスナーを除く。
- InteractiveObject.
3つのイベントリスナーで,
スクリプト2 タイムラインに置かれたインスタンスをドラッグするフレームアクション
// フレームアクション: メインタイムライン
var nOffsetX:Number;
var nOffsetY:Number;
my_mc.addEventListener(MouseEvent.MOUSE_DOWN, xMouseDown);
function xMouseDown(eventObject:MouseEvent):void {
nOffsetX = my_mc.mouseX;
nOffsetY = my_mc.mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, xDrag);
stage.addEventListener(MouseEvent.MOUSE_UP, xMouseUp);
}
function xDrag(eventObject:MouseEvent):void {
my_mc.x += my_mc.mouseX - nOffsetX;
my_mc.y += my_mc.mouseY - nOffsetY;
}
function xMouseUp(eventObject:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_MOVE, xDrag);
stage.removeEventListener(MouseEvent.MOUSE_UP, xMouseUp);
}
スクリプト2について,
ふたつ目は,
- ※1
- これまで
【特別編】 で解説してきたActionScript 3. 0を最適化するという見方でいえば, ドラッグでインスタンスを動かすのはInteractiveObject. mouseMove よりDisplayObject.enterFrame イベントのリスナーで扱う方が負荷は軽い。この後Starlingフレームワークと比べるために,マウスイベントだけで組み立ててみた。