Objectsが使えるようになるライブラリlinq.tjsを公開しました。ObjectsはC#の強力なコレクション操作ライブラリです。foreachすらないtjsではfor文を回すしかありませんでしたが、linq.tjsではより簡潔に複雑な処理を記述出来ます。吉里吉里2/Zどちらでも使えます。codeをダウンロードします。linq_generate.tjsを自分のプロジェクトフォルダに入れます。最新のScriptsEx.dllをダウンロードして吉里吉里と同じフォルダに入れます。以下のコードのようにlinq.tjsを読み込みます。以下のように使えます。表示される[/tjs]使い方はC#のLINQと全く同じです。簡単に説明すると次のように動作します。}が鬱陶しいのでlinq.jsを見習って文字列で指定できるようにしています。}”に変換するだけですが結構便利です。先の例は以下のようになります。=>,4,8,12,16,20[/tjs]さらに省略してYYY部分のみでも使えます。この場合は第1引数が_、第2引数が_2、第3引数が_3、...のようになります。=>,4,8,12,16,20[/tjs]引数の受け渡しtjsにはjavascriptと異なりレキシカルスコープがありません。functionの中で外にある変数が参照できずLINQを使う上で非常に不便です。selectやwhereなどコールバックを引数にとる関数では、通常の引数の後ろに渡された引数をそのままコールバックに渡すようにしています。以下の例ではargやcaptionとして引数を受け取っています。indexはここでは使っていませんが現在のインデックス番号です。渡すとLINQが使えるようになります。配列の場合はそれぞれの要素が順番に列挙されるだけです。toArray()を使うと列挙中のシーケンスを配列に変換できます。900]になる[/tjs]辞書の場合はkeyにキー、valueにその値が入った辞書配列として列挙されます。[/tjs]文字列の場合は先頭から1文字ずつ列挙されます。toString()でシーケンスを文字列に変換できます。strはSRGになる。[/tjs]Enumerable.extendToLINQを頻繁に使う場合、Enumerable.fromを毎回呼び出すのは面倒です。今のところ配列限定ですが、一度Enumerable.extendTo(Array);を呼び出せば配列からselectなどの関数を直接呼び出せるようになります。Objectsにある関数は全て移植済みです。Extensionsやlinq.jsなどから必要そうな関数を追加しています。Enumerable.generateEnumerable.matcheslinq.tjs独自の関数としてEnumerable.matchesを追加しています。TJSではRegExpクラスで正規表現を使えますが癖があっていまいち使いづらいです。Enumerable.matchesでは正規表現のマッチ結果を扱えます。表示される[/tjs]第1引数は使用する正規表現です。第2引数は正規表現の対象となる文字列です。このようにするとRegExp.matchesの結果が列挙されます。正規表現を使うのにfor文は必要ありません。吉里吉里Zに移行しようとしてみた吉里吉里Zに移行しようとして挫折した話を読んだ。吉里吉里2と吉里吉里Zではかなり違うので意外と大変そう。(勝手に)吉里吉里Z移行ガイドはまず読んだ方がいいです。以下、ここに書いていない部分など。・コンソールがないgithubにあるKrkr2Compatにtjsで書かれたコンソールがあります。ZIPボタンから吉里吉里Zのソースコードをダウンロードできます。その中のscript/Krkr2Compat/フォルダがKrkr2Compatです。使い方などの詳しい説明はreadme.txtを読んでください。・Layerのメソッドが減ってるLayer.affineBlendなど古いメソッドが無くなっています。以下のスクリプトをstartup.tjsの最初などに書いておけばいいです。厳密にはLayer.faceとLayer.typeを使っていると描画結果が変わることがあるかもしれません。type);};[/tjs]・自分でビルドしよう配布されているバージョンはあまり更新されないようなのでできれば自分で最新版をビルドして使った方が良いです。発見されたバグなどが修正されていません。やり方はgithubのHowToBulid.txtに書いてあります。2012を起動する5.メニューのビルド>ソリューションのビルドをクリックするしばらく待つとbin/win32/フォルダにtvpwin32.exeができます・移行する意味あるの?新しい機能を使わないなら苦労するだけです。以下のスクリプトを実行すると、ウィンドウが一瞬表示されてもすぐに吉里吉里が終了してしまいます。吉里吉里ではメインウィンドウ(最初に作ったウィンドウ)が無効化されると自動的に終了する仕組みになっているからです。この場合は先に作成したtemporaryWindowが無効化されているため終了してしまいます。true;[/tjs]System.exitOnWindowCloseをfalseにしておけばメインウィンドウが無効化されても終了しなくなります。以下のようにすればtemporaryWindowが無効化されても吉里吉里が終了しないようにできます。true;[/tjs]mainWindowが作成される時点で他のウィンドウがないので、mainWindowが新しいメインウィンドウとして機能します。よってSystem.exitOnWindowCloseをtrueに戻しておけば、mainWindowが無効化されたときに吉里吉里も終了するようになります。falseのままだとウィンドウが全て消えても吉里吉里自体は起動したまま、ということになってしまうので戻しておくのが安全です。実際に表示して使用するウィンドウを作成する前に、別の用途で一時的にウィンドウを使う場合などに便利だと思います。ウィンドウ作成したら勝手に終了するようになったので、この辺を覚えていないと微妙に詰まりました。ちなみにですが、ウィンドウオブジェクトは右上の閉じるボタンやWindow.closeなどで閉じると自動的に無効化されるようです。無効化せず非表示にしたいだけの場合はWindow.visibleの方を使います。直矢Array.assignStructやDictionary.assignStructで二次元配列などをコピーすると、中に入っている分の配列はシステム側で新しく作成されます。そのような配列には追加した分の関数が反映されません。以下のコードのERRORという部分では「testFuncが見つかりません」というエラーがでます。ように直接呼ばない形なら使えます。ERROR[/tjs]assignStruct以外にも(const)を付けた場合や関数の可変長引数としての配列の場合などにも駄目なようです。ERROR}func();[/tjs]saveStruct.dllのArray.save2など、プラグインで追加されるものについても同様です。吉里吉里のリファレンスには書いてませんがレイヤタイプにはltBinderというのがあります。さっき気付いた衝撃の事実。4parentが違うレイヤ間の合成は見た目が変になったりしますがparentのレイヤタイプをltBinderにしておけば防止できたりします。吉里吉里のキャプションに実行中のksファイル名と行番号を表示できます。こちらも開発中用の機能。以下のスクリプトをafterinit.tjsにコピーするだけです。KAGとKAGEXどちらでも使えます。現在のksファイルをShift+Sで開くプラグインです。ダウンロードKAG/KAGEXどちらでも使えます。ゲーム製作中は結構便利。秀丸、サクラエディタ、TeraPadなど対応しているテキストエディタなら実行中の行までジャンプします。対応してほしいエディタがあればコメント欄まで。かぐや姫Studio、KKDEは行指定で開く機能がないので無理です。最新開発版の吉里吉里では配列や辞書をバイナリで読み書きできます。読み込んだ辞書が解放されない。以下のloadBin()を呼ぶたびにメモリ使用量が際限なく増えていきます。load()では大丈夫。明示的にinvalidateしても消えない。吉里吉里Zではこのバグは修正されています。吉里吉里2は修正されないようなのでバイナリ形式のファイルを繰り返し読み込むのは止めましょう。メモリを使いすぎて最終的にゲームが強制終了します。直矢Font.mapPrerenderedFontの説明では”現在選択されているフォント名”に対してレンダリング済みフォントを割り当てることになっていますが、フォント高さなども揃えないと適用されないようです。使わない機能なのでちょっと詰まった。WordPress.com.。