今回は、
Starlingフレームワークに[ライブラリ]のビットマップを表示する
まずは準備として、
![図1 [ライブラリ]のビットマップにクラスを設定する 図1 [ライブラリ]のビットマップにクラスを設定する](/assets/images/dev/serial/01/as3/0062/001.png)
![図1 [ライブラリ]のビットマップにクラスを設定する 図1 [ライブラリ]のビットマップにクラスを設定する](/assets/images/dev/serial/01/as3/0062/thumb/TH800_00102.png)
[ライブラリ]
var myBitmapData:BitmapData = new Pen();
var instance:Bitmap = new Bitmap(myBitmapData);
addChild(instance);
Starlingフレームワークではどうなるか。第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つのイベントリスナーで、
// フレームアクション: メインタイムライン
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について、
ふたつ目は、


StarlingフレームワークのDisplayObject.touchイベントを用いたドラッグの扱い
Starlingフレームワークでは、
Touch.
TouchPhaseクラスの定数 | 操作 | |
---|---|---|
タッチスクリーン | マウス | |
BEGAN | 画面に触れる | マウスボタンを押す |
ENDED | 画面から指を離す | マウスボタンを放す |
HOVER | - | マウスポインタを重ねる |
MOVED | 画面に触れた指を動かす | ボタンは押したままマウスを動かす |
STATIONARY | 画面に触れたまま動かさない | ボタンを押したままマウスは動かさない |
マウスをドラッグしているときのTouch.
さて、
TouchEventオブジェクト.getTouch(対象のDisplayObjectオフジェクト, TouchPhaseクラス定数)
第1引数は、
すると、
private function initialize(eventObject:Event):void {
// ...[中略]...
instance.addEventListener(TouchEvent.TOUCH , mouseOperated);
}
private function mouseOperated(eventObject:TouchEvent):void {
var myTouch:Touch = eventObject.getTouch(instance, TouchPhase.MOVED );
if (myTouch) {
// インスタンスをマウスポインタに追随させる
}
}
マウスポインタの座標はプロパティTouch.
すると、
前掲スクリプト1にドラッグのための手を加たのが、


// 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;
import starling.events.TouchEvent;
import starling.events.Touch;
import starling.events.TouchPhase;
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.addEventListener(TouchEvent.TOUCH , mouseOperated);
instance.x = stage.stageWidth / 2;
instance.y = stage.stageHeight / 2;
instance.pivotX = instance.width / 2;
instance.pivotY = instance.height / 2;
}
private function mouseOperated(eventObject:TouchEvent):void {
var myTouch:Touch = eventObject.getTouch(instance, TouchPhase.MOVED );
if (myTouch) {
var nMoveX:Number = myTouch.globalX - myTouch.previousGlobalX;
var nMoveY:Number = myTouch.globalY - myTouch.previousGlobalY;
instance.x += nMoveX;
instance.y += nMoveY;
}
}
}
}
Starlingフレームワークのドラッグの扱いは、
今回解説した次のサンプルファイルがダウンロードできます。
- スクリプト1~3のサンプルファイル
(CS6形式/script62. zip/ Zip圧縮/約106KB) - スクリプト1~3のサンプルファイル
(CS5形式/script62_ cs5. zip/ Zip圧縮/約111KB)