- ■吉里吉里/KAG/TJS雑談質問スレ■その23
865 :名前は開発中のものです。[sage]:2011/05/20(金) 14:18:22.00 ID:eAwQCbJq - 目の錯覚じゃないよ。
吉里吉里のセーブデータは、ちょっと変わっただけのほとんど内容のデータがずらずら並んでる構造だから、すごく圧縮が効きやすいの。 特に、どこでもセーブ系のプラグイン使ってたりして、改ページ単位でラベル入れてたりするとその傾向が顕著ね。
|
- ■吉里吉里/KAG/TJS雑談質問スレ■その23
866 :名前は開発中のものです。[sage]:2011/05/20(金) 14:19:06.24 ID:eAwQCbJq - s/ほとんど内容/ほとんど同じ内容/
|
- ■吉里吉里/KAG/TJS雑談質問スレ■その23
872 :名前は開発中のものです。[sage]:2011/05/20(金) 19:12:28.26 ID:eAwQCbJq - TJSについて詳しく無い人にわかるようにきちんと説明するのはかなり大変なので、要点だけ解説します。
まず、一番大本の obj[i] = new SystemButtonLayer(kag, kag.fore.base, btn(i)); では駄目なのか? この場合、期待しているのは「ボタンが押された時にbtn関数が呼ばれる」事なのに、 この表記だと「ボタンを作成した時にbtn関数が呼ばれる」事になってしまいます。 つまり、最初の表記ではSystemButtonLayerに「btn関数を渡す」つもりで 「btn関数の呼び出し結果を渡してしまっている」ことがエラーの原因です。 (続く)
|
- ■吉里吉里/KAG/TJS雑談質問スレ■その23
873 :名前は開発中のものです。[sage]:2011/05/20(金) 19:15:40.36 ID:eAwQCbJq - TJSではbtn関数が定義されている状態で「btn()」と書くと、
その関数が呼び出した実行結果がとなります。関数そのものを あらわすには「btn」と、括弧無しで表記する必要があります。 つまり、元々の意図通り「SystemButtonLayerに、ボタンが 呼び出された時に処理されるようにbtn関数を渡す」場合は、 以下のように表記するのが正しいことになります。 obj[i] = new SystemButtonLayer(kag, kag.fore.base, btn); …でも、これはこれで何かおかしいですね? そう、btn関数は引数をひとつ必要とする関数なのに、 これではボタンが押された時に引数無しでbtn関数が呼び出されてしまい、 やはりエラーになってしまうでしょう。 ではどうすればいいのか? (続く)
|
- ■吉里吉里/KAG/TJS雑談質問スレ■その23
874 :名前は開発中のものです。[sage]:2011/05/20(金) 19:26:16.66 ID:eAwQCbJq - 吉里吉里の関数は「ファーストクラスオブジェクト」と言って、
変数に代入が可能な要素になっています(その仕組みのおかげで、 SystemButtonLayerに関数を指定して、後から実行してもらう 事が出来ます)。 ですが、ファーストクラスオブジェクトとしての関数は、 「関数そのもの」と「関数が実行されるコンテキスト」の 2つの要素だけで構成されています。関数を実行する際に 与える引数は、含まれていません。 つまり、吉里吉里の素の表記では、引数まで含めて関数を 遅延評価するために変数に代入してやることは出来ません。 (続く)
|
- ■吉里吉里/KAG/TJS雑談質問スレ■その23
875 :名前は開発中のものです。[sage]:2011/05/20(金) 19:29:42.81 ID:eAwQCbJq - そこを何とかするための小技が「funccall」の一連の仕組みです。
詳細に書くと「目的の関数と引数を含めた新たなコンテキスト」を 作って、そのコンテキストで「目的の関数を目的の引数で呼び出す関数」 を作り、最終的にその関数を返値として返すという処理をしてるんですが、 自分で書いてて何言ってるんだという感じですね。 すいません、ややこしいのでなかなかうまく説明できる気がしません。
|