AIMS ver1.41を公開しました。ダウンロードページへどうぞ。
バグ修正がメインです。かなり恥ずかしいバグですが……
- AIMS本で「isWindowed」として紹介していた関数の名称が実際は「isWindowMode」だった点について、
isWindowed()でも、isWindowMode()でも、同じようにウィンドウモードかどうかを返すようにした。 - 特定の条件下において1つのアクターのOnVanishが2回呼ばれることがあった点を修正。
AIMS ver1.41を公開しました。ダウンロードページへどうぞ。
バグ修正がメインです。かなり恥ずかしいバグですが……
まずはコミケット79お疲れ様でした。AIMS本は予想以上の反響をいただきまして大変ありがたい限りです。1/6よりショップ委託を開始できるよう準備しますので、今回入手出来なかった方は是非ショップ委託をご利用ください。(1/13更新:リンク先をすべてショップごとの詳細ページに切り替え)
以上、6店舗での販売となります。ショップ価格は1800円(+税)です。すべてのショップでWeb通販が利用できます。遠方の方などは是非ご利用ください。
次にtwitterハッシュタグについて。
twitterでAIMSの話題を扱うハッシュタグを決めました。 #GE_AIMS とします。AIMSに関する話題、こんなんできましたけどー的ネタ、また疑問点や不具合報告とか、このハッシュタグとともにtweetください。疑問点などには@dnasoftwares か、@Ruw が返答を返したりすると思います(タイムラグはあると思いますが)
AIMS ver1.40を公開しました。ダウンロードページへどうぞ。
仕様と動作が食い違っていた点の修正がメインです(細かいところの不具合ですので、スクリプトの互換性には影響しないと思います)が、「MOD/IT/XM/S3Mファイル」の再生機能が試験的に実装されています。README.txtに詳細を書いてあります。
なおこのMOD再生については冬コミで頒布する本では書いていません(入稿した後に実装できてしまったので)が、まあ説明するほどでもないでしょう……。
D.N.A.Softwaresのトップでも告知していますが、AIMSの解説書を来たる12/30開催の「コミックマーケット」2日目にて頒布します。AIMSの基本的概念の解説から各種機能の説明紹介、リファレンスも収録し、AIMSのマニュアルとして使用できる一品です。
詳しくはD.N.A.Softwaresのエントリをご覧ください。
表紙画像をよく見るとAIMS1.40準拠となっておりますが、その1.40は今週木曜あたりに出します。1.30で見つかったいくつかの不具合を修正するものです。
AIMS ver1.30を公開します。上のメニューバーのダウンロードページへどうぞ。
(11/24追記:パッケージング及びPackerにミスがあったため、アーカイブを差し替えました。以前に一度ダウンロードされている方も改めてダウンロード下さい。)
今回のもっとも大きな変更点はリファレンスマニュアルの大幅改訂です。現時点でAIMSに搭載されている関数を全て網羅しました。PDF形式になっておりますので、適当にAcrobat Readerなどご用意ください。
その他変更点としては
で、今度の冬コミにD.N.A.Softwaresが無事当選した(スペースは「2日目東A-41a」)のですが、ゲームエンジンAIMSの「本」を出します。ここらでAIMSについて一度まとめておこうということで決断しました。リファレンスのPDF化もその一環で行ったものです。詳細は後日発表。
先日頂いたお便りから。
Actorを2000個ほど生成すると処理落ちしてしまいます。処理落ちを改善する方法はありませんか?
というわけで、大量のアクターで処理落ちするという事態を少しでも緩和する手段をご紹介します。
AIMSのレイヤーには「高速描画モード」というものがありまして、レイヤーにはいくつかの制限がかかる代わりに描画速度が数倍に向上します。
(客観的評価はしていませんが、Actor2000個を表示して15fpsだったものが60fpsに向上する程度には高速化されます)
高速描画モードを入れるキーになる関数は下の2つ。
1 2 | setLayerUseFastDraw(レイヤーNo, ON/OFFフラグ[true/false]); setLayerGraphicForFastDraw(レイヤーNo, グラフィックハンドル); |
setLayerUseFastDrawが高速描画ON/OFFの設定。setLayerGraphicForFastDrawはそのレイヤーで使うテクスチャの指定です。
高速描画中の制限事項は下記の通り。
実装例としてはこんな感じ。レイヤー10を高速描画レイヤーにします。
1 2 3 4 5 6 7 | function boot_OnStart() -- まず画像を読み込む G.sample = loadGraphic("sample1.png"); setLayerUseFastDraw(10, true); -- レイヤー10を高速描画ON setLayerGraphicForFastDraw(10, G.sample); -- G.sampleをレイヤー10に割り付け G.chara = cutGraphic(G.sample,0,0,20,20); -- 切り出してもOK createActor(G.chara,320,240,10,"class"); -- このアクターは高速描画される |
まあ軽く書くとこんな感じです。弾幕のように大量のアクターをばらまく必要があるときは是非お試し下さい。
AIMSのバージョン1.20を公開します。上のメニューバーのダウンロードページへどうぞ。
現在開発中の”群弾”で使用しているバージョンです。先のエントリーにあったMOVER_MOVETO_L以降のMOVER定義が使用できるようになっています。MOVERの拡張以外にも色々機能が増えているのですが、追々エントリーとして説明していきます。
アクターの当たり判定を行う場合、前準備として当たり判定を画像に設定する必要があります。
この関数で、グラフィックの特定位置に当たり判定に使用する矩形を追加します。当たり判定矩形は最大16個まで設定できます。
当たり判定は「矩形同士が重なっているか?」で判定しています。
重なっているかどうかを取得するには以下の関数を使用します。
isHitActorは指定されたアクター同士が重なっているかどうかをboolean値として返します。
getHitLayerは指定されたアクターに対して「指定レイヤー上で重なっているアクターのハンドル」をLuaのテーブルとして取得します。
複数のアクターを相手に判定を取る場合、isHitActorで1対1の判定を複数取るよりは、getHitLayerでまとめて判定を取った方が高速になります。レイヤーを使ってアクターをうまく分けておくのがコツです。(STGなら自機と敵の弾は別のレイヤーに置くとか)
AIMSの動作の基本となる関数です。[]内の引数は省略できます。
「createActor関数でアクターを作る」→「作ったアクターにaddMover関数で動きを与える」がAIMSにおけるキャラクタ制御の基本です。
addMoverで動作を操作するためには、createActorを実行したときに返ってくるアクターハンドル(number)を保存しておく必要があります。
開始時刻はその動作を開始する時刻(単位フレーム)です。この命令を呼んた直後を0として、指定したフレーム数だけ経過したら動作が始まります。継続時間は動作を続ける時間となります。
addMoverで指定できる動作命令は「MOVER定義一覧」のページを参考にしてください。
(現在公開されている1.01ではMOVER_MOVETO_L以降の定義は実装されていません)
clearMover関数は登録されている動作命令(待機中のもの含む)を全て消去します。ただし、既に変更されてしまった値(速度・角度・透明度・カラーなど)は元に戻りません。
AIMSではキーの入力に以下の関数を使用します。[]内の引数は省略できます。
キーIDはそれぞれ以下のようなものが定義されています。
getJoyPressCountはそのボタンが押されている時間(フレーム数)を、isJoyPressedは押されているかどうかのboolean値(trueかfalse)を、それぞれ返します。あるボタンが1秒間(60フレーム)押しっぱなしになっていたらgetJoyPressCountは60を返すという仕組みです。
サンプルの中で表示位置を移動するのに使っているaddMover関数は別のページで説明します。