Layer 派生クラスの構成

まえがき

時間がないのでちゃんとしたものは後日書きます。たぶん。

Layer クラスとその派生クラス

吉里吉里2による提供クラスとして Layer クラスが存在します。一方で、KAG3には Layer クラスをもとにしたさまざまなクラスが存在しています。この文書はそのまとめです。

 Layer ( 吉里吉里ネイティヴクラス )
  +-- KAGLayer ( KAGLayer.tjs )
  |    +-- AnimationLayer ( AnimationLayer.tjs )
  |    |    +-- ClickGlyphLayer ( AnimationLayer.tjs )
  |    |    +-- GraphicLayer ( GraphicLayer.tjs )
  |    |         +-- BaseLayer ( GraphicLayer.tjs )
  |    |         +-- CharacterLayer ( GraphicLayer.tjs )
  |    +-- MessageLayer ( MessageLayer.tjs )
  |    +-- ButtonLayer ( ButtonLayer.tjs )
  |    |    +-- LinkButtonLayer ( MessageLayer.tjs )
  |    |    +-- LButtonLayer ( HistoryLayer.tjs )
  |    +-- EditLayer ( EditLayer.tjs )
  |    |    +-- LinkEditLayer ( MessageLayer.tjs )
  |    +-- CheckBoxLayer ( CheckBoxLayer.tjs )
  |         +-- LinkCheckBoxLayer ( MessageLayer.tjs )
  +-- HistoryLayer ( HistoryLayer.tjs )

以上は KAGLayer.tjs のコメントに書かれている解説をもとにコンパクトに記述したものです。さまざまなクラスへと特化していっているのがわかるかと思います。

loadImages

もっともいろいろ変化している loadImages メソッドを見てみたいと思います。

  • Layer.loadImages(image, colorkey=clNone)
    • レイヤクラスに用意されているものは、指定された画像ファイル(image)を読み込んで、第2引数に与えられた色を抜き色として透過させます。第2引数の取りうる値は吉里吉里2リファレンス参照。
  • KAGLayer.loadImages(storage, key)
    • おおむね一緒ですが、第2引数に取りうる値が変化しています。
    • 具体的には文字列として与えられることを想定しており、KAGLayer.adjustColorKey(key) により文字列から Layer.loadImages の第2引数に適する数値へと変換されています。
    • その後、Layer.loadImages(storage, key) で画像が読み込まれます。
  • AnimationLayer.loadImages(elm)
    • AnimationLayer から引数が辞書配列 elm となり、KAGLayer.loadImages(elm.storage, elm.key) として画像が読み込まれます。
    • そのあと、フリップ(flipud/fliplr)、クリッピング(clipleft/cliptop/clipwidth/clipheight)、レイヤモード(mode)、位置(pos/left/top/index)、描画仕方(grayscale/[rgb]gamma/[rgb]floor/[rgb]ceil/mcolor/mopacity/visible/opacity)と image タグの属性のほとんどがここで対応
    • またアニメーションファイル(*.asd)があればそれを読み込み、アニメーションを開始します
  • GraphicLayer.loadImages(elm)
    • AnimationLayer.loadImages(elm) により画像読み込みを行い、フリップなどの処理を行います。
    • 領域画像関係(mapimage/mapaction)および領域アクションファイル(*.ma)があれば読み込みます。
  • BaseLayer.loadImages(elm)
    • プライマリレイヤで使われることが多いため、その制約から mode/index/visible の固定を行います。
    • その後に、GraphicLayer.loadImages(elm) を行って画像読み込みを行います。
  • CharacterLayer.loadImages(elm)
    • オーバーライドを行っておらず、GraphicLayer.loadImages(elm) と同一です。

前景・背景系レイヤは AnimationLayer クラスによって引数が辞書配列となっています。そのため、吉里吉里2リファレンスに載っている Layer.loadImages の引数ではエラーとなります。また、elm.layer/elm.page は KAGWindow.getLayerFromElm(elm) で目的のレイヤオブジェクトを求めるメソッドに用いられますので、loadImages メソッド自体には必要ありません。

kag.fore.layers[1].loadImages(%["storage" => "graphic.jpg",
        "opacity" => "128", "visible" => "true"]);

上記のように用いることができます。KAGシステムのメソッドの中には引数に辞書配列をとるものがいくつかあります。それらの多くは記述されたタグによって呼び出されるタグハンドラと、そのタグハンドラから呼び出されるメソッドです。

記述されたタグの属性は辞書配列としてタグハンドラに渡ります。そのとき値はすべて文字列として扱われます。数値も真偽値もキーワードもすべてです。それは属性値を引用符で囲む囲まないに関わらずです。そのため、タグの属性を扱うときは与えられるデータは文字列を前提としています。

多くの場合は、辞書配列の値を数値などにしても問題なく動きますが、一部数値などでは困ったことになる場合がありますので、文字列で与えた方が無難です。

 
inside/layerfamily.txt · 最終更新: 2009/08/06 05:41 by tohka