この章では、ユーザー独自のウィジェットを作成する方法と、その際に必要な機能を解説します。
UIToolkitのソースもSDKに同梱されていますので、そちらも参考にしてください。
新しいウィジェットを作成するためには、Widget クラス または Widget クラスを派生したクラスを継承する必要があります。
Contents
ウィジェットはいくつかの描画要素 (UIElement) から構成されています。 描画要素はツリー構造になっています。
また、別のウィジェットを子供として保持することも出来ます。
以下のような、背景画像、アイコン画像、テキストからなるウィジェットの場合、2つの描画要素と Label ウィジェットで構成できます。
描画要素の UIElement には、標準で RootUIElement と UIPrimitive、 UISprite の3種類があります(表1)。
表1 UIElement の種類 UIElement 描画要素の基底抽象クラスです。UIElementには1つのテクスチャを設定することが出来ます。 RootUIElement UIElement のツリー構造のルートになるクラスです。ウィジェットのオブジェクトの生成時に一つだけ生成されます。Widget.RootUIElement プロパティから取得することが出来ます。 UISprite 矩形の描画要素です。一つの UISprite に複数の矩形を含めることが出来ます。 UIPrimitive ポリゴンやラインを表示することが出来る描画要素です。
UISprite は矩形を表示する描画要素で、もっとも簡単な描画要素になります。
一つの UISprite で複数の矩形を表示することが出来ます。
1つの矩形をあらわすのが、 UISpriteUnit です。
UISpriteUnit は左上の位置と幅、高さ、上下左右のテクスチャ座標を指定することが出来ます。
UISprite オブジェクトを作成する場合は、コンストラクタで UISpriteUnit の最大数を設定します。
ImageAsset image = new ImageAsset("/Application/img.png"); sprite = new UISprite(1); sprite.ShaderType = ShaderType.TextureArgb; sprite.Image = image; UISpriteUnit unit = sprite.GetUnit(0); unit.X = 0.0f; unit.Y = 0.0f; unit.Width = image.Width; unit.Height = image.Height; this.RootUIElement.AddChildLast(sprite);
タッチイベントに対する処理を記述する場合は、OnTouchEvent メソッドをオーバーライドして下さい。
タッチ点とウィジェットのヒット判定をカスタマイズする場合は、HitTest メソッドをオーバーライドしてください。
同様に、キーイベントに対する処理を記述する場合は、OnKeyEvent メソッドをオーバーライドし、モーションイベントに対する処理を記述する場合は、OnMotionEvent メソッドをオーバーライドしてください。
毎フレームごとの更新処理が必要な場合は OnUpdate メソッドを使用します。
そのウィジェットに特化したアニメーションを作成する場合などに使用することが出来ます。 なお、汎用的なアニメーションを作成する場合はEffectクラスを使用することを推奨しています。
更新処理を記述したい場合には OnUpdate メソッドをオーバーライドし、必要な処理を記述します。 OnUpdate メソッドはフレーム毎に一回呼ばれます。
ただし、Visible プロパティが False の場合は、OnUpdate メソッドは実行されません。