今回は、
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) 
