# Eクラス

jgame.jsにおいて、最も基本的な単位です。より正確な名称はエンティティ（Entity）です。 Sprite、Shape、Label、Tile、さらにはLayerもこのクラスを継承して作られています。jgame.jsで描画される全てのオブジェクトはEntityであり、Entityでないもの（Sceneなど）は描画されません。 動作速度が重用視されるjgame.jsにおいて、Gameクラス、Rendererクラスと並ぶ最も重要なクラスですが、通常のユーザがこのクラスを利用することはありません。 このクラスを利用するのは、このクラスを継承して新しい描画オブジェクトを作るなど、一歩進んだ使い方をする時でしょう。
var entity = new E(); このクラスは直接インスタンスを生成することを想定していません。 通常は、Eクラスを継承している別のクラスのインスタンスを生成します。
x: number;//X座標 y: number;//Y座標 width: number;//横幅 height: number;//縦幅 _tl: Timeline;//Timelineクラスのインスタンス scene:Scene;//このEntityが属しているシーン parent:E;//親のEntity active_queue:Function[];//アクティブ化された後に実行されるアクション started:bool;//メインループのupdate処理を開始しているかどうか isUpdated:bool;//このEntityの画面が更新されているかどうか disableTransform:bool;//setDrawOptionで指定可能な描画オプションを無効にするかどうか entities:E[];//子のEntity群 pointCapture:bool;//マウスやタッチなどのポイント処理を受け取るかどうか inputDown: Trigger; Gameクラスの同名イベントと同様です。詳細はGameクラスを参照してください。 なお、本クラスではInputKeyboardEventは受け取れません。 --- inputUp: Trigger; Gameクラスの同名イベントと同様です。詳細はGameクラスを参照してください。 なお、本クラスではInputKeyboardEventは受け取れません。 --- inputMove: Trigger; Gameクラスの同名イベントと同様です。詳細はGameクラスを参照してください。 なお、本クラスではInputKeyboardEventは受け取れません。 --- options:Object;//描画に利用するオプション。setDrawOptionやgetDrawOptionで利用される orderDraw:Function;//子Entityの描画順。JGUtilのorderDrawYなどを指定すると、描画順を変更する事が出来る
enablePointingEvent() { InputPointEventに関する処理を有効にします。 また、有効にした後、自身のinputDown、inputUp、inputMoveが存在していない場合、それらのイベントを作成します。 これ以降、このEntityをユーザがクリックした際、イベントが発生するようになります。 --- disablePointingEvent() { InputPointEventに関する処理を無効にします。 これ以降、inputDown、inputUp、inputMoveの各イベントは発生しなくなります。 無効にするだけでinputDown、inputUp、inputMoveの各イベント自体は削除されないため、再度enablePointingEventをすればまた同じように発生します。 --- removeDrawOption(name:string) { name:string;//削除する描画オプション名 不要な描画オプションを削除します。描画速度の向上が見込めます。 --- setDrawOption(name:string, value:any) { name:string;//設定する描画オプション名 value:any;//描画オプションの値 描画オプションを設定します。 設定されていない描画オプションは追加され、存在する描画オプションは上書きされます。 描画オプションのより詳しい説明は、プロジェクトWikiのsetDrawOptionについても参照してください。 --- getDrawOption(name:string):any { name:string;//取得する描画オプション名 描画オプションの現在の設定値を確認します。 設定されていない描画オプションの場合、Canvasに設定されているデフォルト値をとります。 ※注：Canvasに独自の描画オプションを事後に設定した場合、デフォルト値とCanvasの設定が食い違う場合があります。 --- moveTo(x:number, y: number) { x:number;//移動先x座標 y:number;//移動先y座標 このエンティティを指定された絶対座標に移動させ、また更新フラグを立てます。 --- moveBy(x:number, y:number) { x:number;//現在地点から見たxの移動量 y:number;//現在地点から見たyの移動量 このエンティティを指定された相対座標に移動させ、また更新フラグを立てます。 --- activate() { Entityがシーンに追加され、有効になった際に呼び出されるメソッドです。 addActiveQueueで追加された保留中処理を実行します。 --- addActiveQueue(f:Function) { f:Function;//追加する処理 Entityがシーンに追加されておらず、初期化処理が出来ない場合に利用されます。 例えば、シーンに追加されていないとどのgameとの関連かentityは知る事が出来ませんが、この関数を通して登録しておくとSceneに登録した後にまとめて実行する事が出来ます。 この関数はコーディングのしやすさのみを考慮した物で、ユーザが使いやすいよういつ値を変更しても良いようにしたい場合などに活用します。 --- appendTo(scene:Scene, layerName?:string) { scene:Scene;//追加先のScene layerName?:string;//追加先のレイヤー。省略時はrootレイヤーに追加される このEntityをシーンに追加します。 内容はSceneのappend、Layerのappendと同一です。 --- remove() { このEntityをレイヤーから削除します。 レイヤーもEntityですが、レイヤーをこのメソッドで削除する事は出来ません。SceneのdeleteLayerを利用してください。 削除されたentityはdestroyが呼び出され、完全に破壊されることに注意してください。 --- append(entity:E) { entity:E;//追加するEntity このEntityの子として別のEntityを追加します。 以前はLayerのみ利用出来ましたが、ver0.4からentitiesフィールドに配列を設定することで他のクラスにも子Entityを追加出来るようになりました。 Layer以外の場合、下記のように利用します。

    e.entities = []; e.append(e_other);

--- insert(entity:E, index: any) { entity:E;//挿入するentity index:any;//挿入場所のindexまたは挿入対象のEntity このEntityの子の特定の場所に別のEntityを追加します。 表示順を制御したい場合で、appendでは問題が出る場合に利用してください。 --- removeChild(entity:E) { entity:E;//削除するEntity このEntityに存在するEntityを削除します。 削除した後、destroyを呼び出し削除されたentityを完全に破壊することに注意してください。 --- start() { このEntityでgameのupdateイベントを受け取ります。すでに受け取っている場合、何も処理せずに処理を終えます。 このメソッドの多用は処理速度の面で注意が必要です。 --- stop() { このEntityでgameのupdateイベントの受け取りを停止します。まだ受け取っていない場合、何も処理せずに処理を終えます。 --- startTimer(wait:number, method?:Function) { wait:number;//ミリ秒で指定するタイマーの間隔 method?:Function;//イベントハンドラである関数 このEntityでGameTimerクラスによるタイマーイベントを受け取るようにします。 引数methodを省略した場合、intervalメソッドがコールバックとして利用されます。 --- stopTimer(wait:number, method?:Function) { wait:number;//startTimerで指定したものと同じ値 method?:Function;//startTimerで指定した物と同じ値 startTimerで登録したタイマーイベントを削除します。 --- updated() { このEntityの更新フラグを立てます。 このEntityが別のEntityの子供である場合、親のupdatedメソッドを呼び出し、親にのみ更新フラグを立てます。 つまり、ver0.2現在、この処理を実際に実行するのはLayerクラスのみです。 --- isUpdate():bool { 更新フラグの現在値を返します。 --- reflected() { 更新フラグをおろします。 --- tl():Timeline { このEntityに関連するTimelineクラスのインスタンスを返します。 まだ生成されていない場合は新規に生成し、生成済みの場合は生成済みのインスタンスを返します。 --- destroy() { このEntityに関連するあらゆる要素を削除します。 Entityクラスでは、Timelineインスタンスの削除、startTimerで実行したタイマーの削除、stopメソッドによるupdateの停止、inputDown、inputUp、inputMoveの各イベントハンドラの削除を行います。 また、レイヤークラスでは子Entityも全てdestroyで破壊します。 継承したクラスでこれ以外のなんらかの解放処理が必要な場合、本メソッドをオーバーライドして追加の解放処理を記述してください。継承しての解放処理については、Layerクラスのソースコードが参考になるかもしれません。 --- offset():CommonOffset { 親のx, y座標を反映したx, y座標を返します。 --- rect():Rectangle { 親のx, y座標を反映し、かつこのEntityのサイズも計算したRectangleクラスのインスタンスを返します。 --- hitTest(point: CommonOffset) { point:CommonOffset;//判定対象の座標 指定された座標がこのEntityに接触しているかどうかを返します。 --- getEntityByPoint(point: CommonOffset, force?:bool):E { point:CommonOffset;//判定するポイント force?:bool;//trueの場合、各EntityのenablePointingEvent設定値を無視します。 子Entityを含めたこのEntityの関連エントリで、指定されたポイントに関連するEntityを返します。 この際、引数forceが設定されていない限り、enablePointingEventを発行していないEntityは無視されます。 --- update() { Gameのupdateイベントを処理するためのメソッドです。 Entityクラスのupdateメソッドは何もしません。処理が必要な場合、継承先のクラスでオーバーライドした上で処理を記述する必要があります。 --- interval() { GameTimerに呼び出されるタイマーを処理するためのメソッドです。 Entityクラスのintervalメソッドは何もしません。処理が必要な場合、継承先のクラスでオーバーライドした上で処理を記述する必要があります。 --- draw(area:Area, context:CanvasRenderingContext2D) { area:Area;//描画対象エリア context:CanvasRenderingContext2D;//描画に利用するコンテキスト このEntityを描画します。Entityクラスは何も描画しません。描画する場合、継承先のクラスでオーバーライドした上で描画処理を記述する必要があります。 なお、disableTransformが設定されていない場合、Rendererクラスによって事前にEntityの座標は処理されています。通常、描画する場所をこの関数内で指定する必要はなく、x0、y0の場所に描画すればいいという点に注意してください。 --- createSprite() { このEntityの描画内容をSpriteにしたオブジェクトを戻します。 純粋に現在の状態を描画オプションのものも含めて描画しますが、大きさはこのEntityのwidthとheightに依存する事に注意してください。例えば、拡大している場合などは期待した結果と違うSpriteがとれる事があるでしょう。 複雑なSprite生成はBufferedRendererを利用し、簡単なSprite生成は本メソッドで行う事が推奨されています。 ---