座標系とレイヤー - hoge1e3/Tonyu2 GitHub Wiki
座標系とレイヤー
Tonyu2の画面はいくつかの層(レイヤー)から成り立っています。
※ここでの「レイヤー」はマップにおける「手前のレイヤー」などとは別の概念です.
- まず、ゲームが動作しているデバイスの画面全体のレイヤーを
$uiLayer、その中に配置されたゲーム画面を$Screenと呼びます。

- さらに、$Screenは、画面の手前から順に
$frontLayer、$mainLayer、$backLayerという3つのレイヤーからなります。 - これらの3つのレイヤーは独立してスクロール(平行移動・回転・伸縮)が可能です

オブジェクトを配置するレイヤーの指定
オブジェクト(Actor)を生成すると、通常は$mainLayerに配置されます(※)が、生成時にlayerフィールドを設定すると、他のレイヤーに配置できます。
例:
new ScoreLabel{x=100, y=400, text="Score: 0", layer=$frontLayer};
デフォルトのレイヤー
あるクラスにおいて,layerフィールドを省略した場合に配置されるレイヤーは defaultLayer プロパティを定義すると変更できます.
\defaultLayer {
return $frontLayer;
}
なお,次のオブジェクトはデフォルトで$frontLayerに配置されます。
- Label クラスのオブジェクト
- Button クラスのオブジェクト
- APadクラスのオブジェクト
- $panel オブジェクト(ただし,new Panelで新たに生成されるPanelクラスのオブジェクトは,$mainLayer(※)に配置される)
※setDefaultLayerメソッド
Screen.setDefaultLayerメソッドを呼び出すと,layerフィールドを省略したときに配置されるレイヤーを変更できます. ただし,上記のdefaultLayerプロパティを定義したクラスのオブジェクトおよび「デフォルトで$frontLayerに配置される」オブジェクトは,setDefaultLayerの影響を受けません.
レイヤーのスクロール
$Screen.scrollToメソッド を用います。デフォルトでは$mainLayerをスクロールの対象としていますが、$Screen.selectLayerで別のレイヤーもスクロール可能です。
レイヤー間の座標変換
$Screen.convertメソッドを用いると、 あるレイヤーに置かれているオブジェクトの座標を、見た目の位置を変えずに別のレイヤーの座標に変換することができます。
マウスおよびタッチの座標系
$touchesおよび、$mouseX, $mouseYの座標系はデフォルトでは$Screenの左上を(0,0)、右下を($screenWidth, $screenHeight)としたものになっています。
$InputDevice.defaultLayerで座標系を変更できます。
.