2013年3月29日金曜日

Starlingコンテンツの描画領域とassetsの管理 解説編

描画領域の処理
ScreenMultiResolution.as
var showType:int = 0;

if(showType == 0)
{
showAll();
} else if(showType == 1) {
showCenter();
} else {
return;
}
変数showTypeの0で画面全体を表示し、1で画面の中央に表示に切り替えます。
ScreenMultiResolution.as
  private function showCenter():void
  {
   viewport = RectangleUtil.fit(
    new Rectangle(0, 0, stage.stageWidth,stage.stageHeight), 
    new Rectangle((stage.stageWidth >> 1) - (STAGE_WIDTH >> 1),
    (stage.stageHeight >> 1) - (STAGE_HEIGHT >> 1),
    STAGE_WIDTH,
    STAGE_HEIGHT),
    starling.utils.ScaleMode.SHOW_ALL);
  }

  private function showAll():void
  {
   viewport = RectangleUtil.fit(
    new Rectangle(0,0,stage.stageWidth,stage.stageHeight), 
    new Rectangle(0,0,stage.fullScreenWidth,stage.fullScreenHeight),
    starling.utils.ScaleMode.SHOW_ALL);
  }
RectangleUtil.fit()メソッドは、第1引数の矩形領域を第2引数の矩形領域に、縦横比は変えずに納めるためのRectangleオブジェクトを返します。
第3引数には、ScaleModeクラスの定数で伸縮モードが渡せます。 

詳しくは
Starlingフレームワーク1.3の新しい機能(リンク先へ)
Multi-Resolution Development(リンク先へ)
をご覧下さい。

assetsの管理
Main.as
  private function addAssets(data:Object):void
  {
   var sheetPngName:String = "sheetPng";
   var sheetXmlName:String = "sheetXml";
   var scaleFactorName:String = "scaleFactor";
   var contentScaleFactor:int;
   var sScale:String;

   if(Starling.contentScaleFactor >= 1 && Starling.contentScaleFactor < 3)
   {
    contentScaleFactor = int(Starling.contentScaleFactor);
    sScale = "x"+contentScaleFactor.toString();

    assetManager = new AssetManager(contentScaleFactor);
    assetManager.verbose = true;
    assetManager.enqueue(data[sScale][sheetPngName]);
    assetManager.enqueue(data[sScale][sheetXmlName]);
    assetManager.loadQueue(loadAssetsHandler);
   }
  }

  private function loadAssetsHandler(ratio:Number):void
  {
   if(ratio < 1.0) return;

   addTextures();
  }

addAssetsメソッドでは、Starling.contentScaleFactorからテクスチャのスケール係数を取得します。 スケール係数に適したSpriteSheetを用意し、jsonファイルで管理するという仕組みになります。
SpriteSheetファイルが決定した所で、次にAssetManagerクラスを利用し指定した読み込み処理を行なっています。 読み込みが完了(1.0)になるまで、loadAssetsHandlerを繰り返しコールされます。

0 件のコメント:

コメントを投稿