3/13追記:昨日公開のv1.90ですがEXEファイルのビルドミスにより、一部機能がリリース通りに動いておりませんでした。本件を修正したAIMS v1.90aを公開しましたので、お手数ですがダウンロードをお願いします。
AIMS ver1.90aを公開しました。ダウンロードページへどうぞ。
色々今後に向けてどうのこうのしている途中のバージョンです。追加修正が山ほどあるのですが、特に大事なところだけ載せます。詳細はリリースノートをご確認ください。
zip公開版としてはv1.50からかなり間が開いておりましたが、その間に一部互換性に関わる重要な変更が入りました。
互換性に関わる変更
①(v1.90から)コアをLuaJIT2.0.0へ更新
一番デカい変更です。動作速度がやや向上することが期待されますが、一部Lua5.2の仕様を取り入れている関係で互換性の問題が発生しています。(基本同等の動作になるようにしていますが)
リリースノートの方で詳しく書いていますので必ずご確認ください。
②(v1.60から)シーンスクリプトのOnStart、OnStep、OnCloseがコルーチン扱いになった
簡単に言うとシーンクラスの各関数でwait()関数が使えるようになったということです。これまで別途コルーチンを呼んでいたような処理の多くがシーンクラスでまとめて記述できるようになることが期待されます。
互換性については万全を期しましたが1フレーム単位でのタイミングズレなどはあるかもしれません。タイミングに対してシビアなコーディングをしている場合はご注意ください。
なおアクターの方については扱いはこれまで通りです。
③(v1.80から)ローダースレッドの動作変更。
これまではLuaコードを丸ごと別スレッドで動作させていたのですが、メインスレッドのメモリ空間にアクセスしてしまいLuaが異常終了する事例が発生しておりました。
原因としてはスレッドセーフでないLuaを無理矢理マルチスレッド動作させていたせいだった、ということで、ローダースレッドの処理を大幅に変更しました。
具体的には下記のような挙動に変更となります。
- startLoaderThreadを呼ぶとメインスレッドのままローダー関数を呼ぶ。
- ローダー関数内ではloadGraphic,loadSound,createTextureFontを呼んでもその場では読み込まない。ファイルを「後で読みこむ」リストに積むだけ。
- ローダー関数を抜けた後、「後で読みこむ」リストのファイルを実際に読み込むスレッドを起動。このスレッドが終わったら読み込み完了。
スレッド内でLuaコードを実行しないようにしたのが最大の変更です。コード自体は原則変更不要ですが、読み込みのタイミングがズレている都合、下記のような問題があります。
- ローダー関数内でgetGraphicClipRectなど「画像を読み込んでみないと結果がわからない」関数を呼んだ場合はその場で画像をロードするため、メインスレッドが止まる。
ローダー関数内で画像を読み込まざるを得なかった場合はdebug.htmlで報告されます。
途中読み込みが発生する可能性のある関数は下記の通りです。- getGraphicClipRect
- getGraphicCenterX/Y
- getGraphicRCenterX/Y
- ローダー関数内に余りにも重い処理を突っ込むとメインの処理が止まる。
外部から定義ファイルをテキストで読む、などが該当するかもしれません。(画像、音、フォント以外は遅延ロードにはなりません)
これまで正しく動いていたものがエラー落ちするような問題はないと思いますがご注意ください。
④(v1.60から)シーンあたりレイヤーの最大数が12枚から16枚になった
これはご覧の通りというほかありません。これまでのスクリプトをそのまま動かす分には一切影響しないはずです。v1.60以降はレイヤー指定の範囲は0~15となります。
あとは機能追加類となります。続きで簡単に紹介します。
- テクスチャフォント・ASCIIフォントの強化
いままでテクスチャフォントやASCIIフォントは回転、拡大縮小ができませんでしたが、可能になりました。
また複数行のテキストを作った場合、文字そろえがおかしくなっていましたが、これも今回から行毎に適切に揃えられるようになりました。
さらに、折り返し幅を指定することで指定した幅で強制的に改行を入れさせることができます。メッセージボックスとかで便利かも。
createTextActorで作られるアクターはこの新機能対応になっています(そのためコードによっては表示が変わってしまうかもしれません)
OnDrawイベント内でこれら新機能に対応した文字描画を使う場合はdrawTextureFontExをご使用ください。drawTextureFontは前の挙動のまま残しています。 - アクター描画やOnDrawでの9Patch描画のサポート。長くなるのでリリースノート参照で……
- アフィン変換とパース補正
レイヤー全体に対して変換行列を与えることで変形エフェクトをかけられるようになりました。
また、今まではZ値は単なるソート基準でしたが、今回からZ値に応じたパース補正を入れられるようにしました。アフィン変換と組み合わせればダイナミックなレイヤー変形ができます。
どちらもかなりクセの強い機能なので説明を確認してからご利用ください。 - 4×4行列クラス、3次元ベクトルクラス、64bit整数クラスの追加
それぞれCクラスへのインタフェースです。今までもコッソリ入れてはいたのですが、アフィン変換で使用することもあり、今verから正式サポートとします。
64bit整数クラスは取り回しがちょい煩雑になるものの±922京3372兆0368億5477万5807と言う範囲の値が変な工夫いらずで扱えるようになるので倍率だらけのSTGとか作っても安心です。 - アクターへのスペキュラ色指定。ダメージ表現としてよくある光る演出とかができます。
- MOVERの新規要素多数。
- キャラクターマップ新形式の制定とそれに追従してマップエディタ更新。
- 他色々と関数追加。