Unofficial
"CLDC 1.1
+ MIDP 2.0"
API Reference.
(日本語版)

javax.microedition.lcdui.game
クラス LayerManager

java.lang.Object
  上位を拡張 javax.microedition.lcdui.game.LayerManager

public class LayerManager
extends Object

LayerManager は一連の Layer を管理します。 LayerManager に加えられた複数の Layer を、適切な順序でそれぞれの Layer の正確な領域を自動的にレンダリングすることで、レンダリングに関するプロセスを簡素化します。

LayerManagerLayer の追加、挿入、削除することができる順序付きリストを維持します。 Layer につけられたインデックスがZオーダーに相当します。 最も高いインデックスを持つ Layer がユーザーから遠く(奥)にあり、インデックス 0Layer がユーザーの最も近く(手前)にあります。 インデックス・リストは常に隣接しています。 すなわち、Layer を削除すると、その後の Layer 群のインデックス・リストは連続を維持するように調整されます。

LayerManager クラスはゲームの Layer 群がスクリーンでどのようにレンダリングされるかを制御するいくつかの機能を提供します。

視点ウインドウLayerManager の座標系に相対する可視領域とその位置およびサイズを制御します。 視点ウインドウの位置を変更すると、ユーザー視点の画面をスクロールあるいはカメラをぐるっとまわして撮影するような状態などの効果表現をすることができます。 例えば右へスクロールするには、シンプルに視点ウインドウの位置を右に移動させます。 視点ウインドウのサイズは、ユーザー視点がどれくらいの大きさになるかを制御し、通常はデバイスのスクリーンに適切なサイズで固定します。

この例では視点ウインドウを 85×85 ピクセルに設定し、LayerManager の座標系 (52, 11) に位置しています。 Layer 群は LayerManager の原点からのそれぞれ相対的な位置に投影を行います。

paint(Graphics, int, int) メソッドは視点ウインドウがスクリーンに相対して何処にレンダリングされるかを制御する位置 (x, y) を含みます。 これらのパラメータを変更すると、視点ウインドウに関する内容は変化せず、それは視点ウインドウがレンダリングされる位置を変更します。 この位置は Graphics オブジェクトの原点に相対していて、その結果、その位置は Graphics オブジェクトの転移属性の影響を受けることがあることに注意してください。

例えば、ゲームが現在のスコアを表示するためにスクリーンの上部を使用するなら、視点ウインドウはスコアのための十分なスペースを提供するために (17, 17) にレンダリングするようにすることができます。

導入されたバージョン:
MIDP 2.0

コンストラクタの概要
LayerManager()
          新しい LayerManager を作成します。
 
メソッドの概要
 void append(Layer l)
          この LayerManagerLayer を追加します。
 Layer getLayerAt(int index)
          指定されたインデックスにある Layer を取得します。
 int getSize()
          この LayerManagerLayer 群の数を取得します。
 void insert(Layer l, int index)
          この LayerManager における指定されたインデックスに新しい Layer を挿入します。
 void paint(Graphics g, int x, int y)
          指定された位置に LayerManager の現在の視点ウインドウをレンダリングします。
 void remove(Layer l)
          この LayerManager から指定された Layer を削除します。
 void setViewWindow(int x, int y, int width, int height)
          LayerManager 上の視点ウインドウを設定します。
 
クラス java.lang.Object から継承されたメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

LayerManager

public LayerManager()

新しい LayerManager を作成します。

メソッドの詳細

append

public void append(Layer l)

この LayerManagerLayer を追加します。 既存の Layer 群リストに Layer を追加するため、それは最も高いインデックスを持つことになります(すなわち、それはユーザーから最も遠いことを意味します)。 それが既に加えられているなら、Layer は最初にこの LayerManager から削除します。

パラメータ:
l - 加える Layer を渡します。
例外:
NullPointerException - パラメータ lnull の場合に throw します。
関連項目:
insert(javax.microedition.lcdui.game.Layer, int), remove(javax.microedition.lcdui.game.Layer)

insert

public void insert(Layer l,
                   int index)

この LayerManager における指定されたインデックスに新しい Layer を挿入します。 それが既に加えられているなら、Layer は最初にこの LayerManager から削除します。

パラメータ:
l - 挿入する Layer を渡します。
index - 新しい Layer を挿入する位置をインデックスで渡します
例外:
NullPointerException - パラメータ lnull の場合に throw します。
IndexOutOfBoundsException - パラメータ index0 未満かあるいはこの LayerManager に既に加えられた Layer の数を超えているならば throw します。
関連項目:
append(javax.microedition.lcdui.game.Layer), remove(javax.microedition.lcdui.game.Layer)

getLayerAt

public Layer getLayerAt(int index)

指定されたインデックスにある Layer を取得します。

パラメータ:
index - 希望する Layer のインデックスを渡します。
戻り値:
指定されたインデックスにある Layer を返します。
例外:
IndexOutOfBoundsException - パラメータ index0 未満かあるいはこの LayerManager に既に加えられた Layer の数を超えているならば throw します。

getSize

public int getSize()

この LayerManagerLayer 群の数を取得します。

戻り値:
Layer 群の数を返します。

remove

public void remove(Layer l)

この LayerManager から指定された Layer を削除します。 指定された Layer がこの LayerManager に加えられていなければ、このメソッドは何もしません。

パラメータ:
l - 削除する Layer を渡します。
例外:
NullPointerException - パラメータ lnull の場合に throw します。
関連項目:
append(javax.microedition.lcdui.game.Layer), insert(javax.microedition.lcdui.game.Layer, int)

paint

public void paint(Graphics g,
                  int x,
                  int y)

指定された位置に LayerManager の現在の視点ウインドウをレンダリングします。

LayerManager は、インデックスの逆順にそれぞれのレイヤーをレンダリングします。その結果、正確なZオーダーを実装します。 完全に視点ウインドウの外側にあるレイヤーはレンダリングされません。

このメソッドに渡された座標は、LayerManager の視点ウインドウが Graphics オブジェクトの原点に相対して何処にレンダリングされるかを決定します。 例えば、ゲームが現在のスコアを表示するためにスクリーンの上部を使用するかもしれないため、その領域の下のレイヤーをレンダリングするために、視点ウインドウは位置 (0, 20) にレンダリングされるかもしれません。 Graphics オブジェクトの原点からの相対であるため、Graphics オブジェクトの原点を移動させることは、視点ウインドウがスクリーンの何処でレンダリングされるかの変更を意味します。

Graphics オブジェクトのクリップ領域は、視点ウインドウと同じサイズを持っている矩形と交差する (x, y) に位置します。 LayerManager がそのときに Graphics オブジェクトの転移を行うため、点 (x, y)LayerManager の座標系で視点ウインドウの位置に対応します。 Layer 群はそのとき、適切な順序でレンダリングされます。 このメソッドが返される前に、Graphics オブジェクトの転移とクリップ領域は元の値に復元します。

レンダリングは Graphics オブジェクトによるクリップ領域と転移の影響を受けることがあります。 したがって、クリップ領域があまり広くないのなら、指定された視点ウインドウの一部だけをレンダリングすることもできます。

性能の理由から、このメソッドは目に見えないか、または Graphics オブジェクトのクリップ領域の完全に外側にレンダリングされる Layer 群を無視するかもしれません。 Graphics オブジェクトの属性は Layer 群の paint メソッドの呼び出しの間は既知の状態に復元しません。 クリップ領域は Layer の境界を越えて拡張されるかもしれません; レンダリング操作が境界の中で実行されることを保証するのは Layer の責任です。

パラメータ:
g - LayerManager を描画するための Graphics オブジェクトを渡します。
x - Graphics の転移された原点から相対した視点ウインドウをレンダリングする水平位置を渡します。
y - Graphics の転移された原点から相対した視点ウインドウをレンダリングする垂直位置を渡します。
例外:
NullPointerException - パラメータ gnull ならば throw します。
関連項目:
setViewWindow(int, int, int, int)

setViewWindow

public void setViewWindow(int x,
                          int y,
                          int width,
                          int height)

LayerManager 上の視点ウインドウを設定します。

視点ウインドウは paint メソッドが呼び出されたとき、LayerManager が描画する矩形を指定します。 これにより、開発者は LayerManager の座標系に相対する視点ウインドウの位置と同様に可視領域のサイズを制御できます。

設定はこのメソッドへ別の呼び出しによって変更されるまで、視点ウインドウは有効な状態が維持されます。 デフォルトで、視点ウインドウは LayerManager の座標系の位置 (0, 0) にあります。そして、その幅と高さはともに Integer.MAX_VALUE に設定されます。

パラメータ:
x - LayerManager の原点に相対した視点ウインドウの水平位置を渡します。
y - LayerManager の原点に相対した視点ウインドウの垂直位置を渡します。
width - 視点ウインドウの幅を渡します。
height - 視点ウインドウの高さを渡します。
例外:
IllegalArgumentException - パラメータ width あるいは height0 未満の場合に throw します。

Unofficial
"CLDC 1.1
+ MIDP 2.0"
API Reference.
(日本語版)

公式仕様書原文の著作権表記等(※):

Mobile Information Device Profile Specification ("Specification")
Version: 2.0
Status: FCS
Release: November 5, 2002

Copyright 2002 Sun Microsystems, Inc. and Motorola, Inc.
All rights reserved.
※ただしこの API リファレンスは英語仕様を一語一句正確に翻訳したものではなく、一度私が英語の仕様原文を読んだ上で元の意味と構造をなるべく保つように書き起こしたものです。このため一部は完全に異なる説明となっています。また CLDC 1.1 部分は同仕様の範囲外であるため、まったく参考とはしていません。

※仕様書のライセンス上、問題は無いと考えておりますが、万が一問題があるとお考えの関係者の方がいらっしゃいましたらメールにて連絡をいただけると幸いに存じます(第一言語に日本語、第二言語に英語を希望しますが、返信は基本的に日本語で行います)。

この API リファレンスは仕様書の日本語版という位置づけでは作成していませんし、仕様書ほど厳格でもありません。MUST、SHOULD、MAY などの仕様の条件を強調する文を維持していません(反映すらしていない個所もあります)。仮想マシンおよび MIDP の実装のために使用することは避けてください。そのような用途には必ず公式仕様書原文そのものを用いるべきです。
この API リファレンスに記載されている内容は"さかきけい"が Sun Microsystems, Inc や Motorola, Inc、Java Community Process が公開している各種公式資料を元に、独自に調査・編集したものであり、Sun Microsystems, Inc や Motorola, Inc、Java Community Process 等とは一切関係ありません。したがってこの API リファレンスに関する問い合わせを関係各社等に対して行うことを固く禁じます。
また、記載された内容には既知か否かに関らず誤りが含まれる可能性があり、一切保証はありません。本 API リファレンスを使用した結果、不利益が生じたとしても"さかきけい"は一切の責任を負いません。
許可無く公開/非公開および Internet/Intranet/LAN を問わず他サイトに転載すること、複写および複製すること、ローカル・ファイル等に保存することを禁じます。


Copyright© 2001-2002,2005-2009,2011 by KEI SAKAKI.
ALL RIGHTS RESERVED.
無断転載を禁じます。

Unofficial "CLDC 1.0 + MIDP 1.0" API Reference はこちらです。