ゲームエンジン AIMS を触ってみる 2
Mac への lua コンパイラのインストール
homebrew でインストールできるので、これだけ。
brew install lua
わたしは vim での構文チェックに syntastic を使用してますが、 lua コンパイラを入れると、luaスクリプトを開いた時/保存したときに 自動で構文チェックしてくれるようになったので、 特に追加でプラグインを入れなくても、これで満足です。
Mac 上で Windows を動かす。
Mac 上で AIMS製ゲームの動作確認をできるようにします。 VirtualBox 上に windows 10 を入れて、その上でゲームを動かすようにします。
VirtualBox は、複数の仮想マシンを作成し動作させることができる無償のアプリケーションソフトウェアです。 このアプリケーションを使って、Windows 10を、Mac のゲストOSとしてインストールします。
Win10 の ISO ファイルは MS の公式Webサイトからダウンロードできます。
https://www.microsoft.com/ja-jp/software-download/windows10ISO
windows 上で AIMS を動かす
AIMS サンプルプログラム「Suica32」を Win10 on Mac で動かしてみます。
http://aims.dna-softwares.com/?page_id=14
とはいえ、特に必要な設定もなく、公式から「Suica32」をダウンロードしてきて、 AIMSのZIPファイル中にある”bin\AIMS_dev.exe”もしくは”bin\AIMSd.exe” を suica32\AIMSd.exe としてコピーしたのち、AIMSd.exeを起動するだけです。
サンプルプロジェクトを作る
AIMS ディレクトリの中に 「proto」というディレクリがありますが、 これを利用すると、簡単にサンプルプロジェクトが用意できます。
Mac <-> Win10 でのプログラムファイルのやり取りは githubを 介して行おうと思います。 proto ディレクトリを git 管理します。
win10 に git をインストール
こっからDLしてきてインストールするだけです。 https://git-for-windows.github.io/
プロジェクト内に以下のバッチファイルを置いておきましょう。
gitpull.bat
git pull --rebase
これで Win10 上で動作確認する際、コマンドラインを開いて わざわざ git pull しなくても、バッチをダブルクリックするだけで 最新の変更を落としてこれます。
ゲームエンジン AIMS を触る 1
こんにちは、さいです。
同人ゲームを作らせて頂く機会を得たので、ゲームエンジンを使って
ゲームを作ろうと思います。
今回ご紹介させていただくのは、「ゲームエンジン AIMS」です。
AIMS
AIMS は 2Dのアクション主体のゲームを作成するためのエンジンです。
特徴的なのは、Lua言語でゲームロジックを記述するところです。
D.N.A.Softwaresさんが開発しています。
面白いのは、商業で使われているゲームエンジンではないんですね。
D.N.A.Softwares さんは同人サークルです。
とはいえ、長く歴史のある同人サークルさんで、
AIMS を利用して、これまでたくさんのゲームをリリースされていらっしゃいます。
公式サイトから引用させていただきますが、AIMSが得意とするジャンルは以下です
・2Dゲーム全般
シューティングゲーム
アクションゲーム
テーブルゲーム
etc...
他にもたくさんの2Dゲームを作ることができます。詳細は公式で
またドキュメント類もしっかりしてて、公式にリファレンスがあるのはもちろん、
ガイドブックも pdf で販売されております(2016/06現在)
なぜ?
世間ではゲームエンジンといえば、Unity とか UE4 がメジャーなようですが、
なぜ AIMS を選択するのか?
技術的興味
C++ のようなコンパイル型言語から、Luaのようなスクリプトを動的ロードすることに興味があり、 まずは Lua を触ってみたかった。開発環境構築の容易さ
Unity や UE4 の開発環境構築は大変です。エディタも 使用できるエディタは実質限られてしまいます。 (※僕は触ったことがないため、完全に第一印象だけで 喋ってるのでツッコミ希望です)
おまけに僕はGUIが苦手です。やりたいことが全てコードを通して命令できることを望みます。 AIMS は Lua で記述できます。Lua は vim で編集できます。 ちょっと工夫すれば、Mac 上で動作確認もできます(これについては別の機会に書きます) いわゆるオーソドックスな webプログラミングの開発環境を流用できそうなところが魅力的でした。薄い
AIMS はフルスタックにゲームエンジンとしての機能を 何もかも揃えているわけではありません。 デメリットのように見えて、それは覚えるべきAPIが少ない点で、 学習コストが低いというメリットになります。
リンク
次回
sails で migrate されるテーブルのカラムの型定義
さいです。
サーバーサイドのフルスタックMVCフレームワークの sails.js を触ってます。
フルスタックなので migrate 機能があります。
モデル定義するだけで、アプリケーション起動時に自動でテーブル作ってくれるヤツですね。
sail.js のモデルは Waterline なのですが、どのストレージでも同じ型定義で記載できるよう、
integer
とか string
とかそんな型定義しかありません。
具体的に MySQL でどんな型になるんや!となったので調べました。
Watarline の型定義 -> MySQLの型定義の変換は sails-mysql
モジュールの
lib/sql.js にあります。
v0.12.1 時点だと以下のようになってるっぽいです。(大文字小文字問わない)
type | size | MySQL上の型 |
---|---|---|
string | N(省略した場合 255) | varchar(N) |
text | LONGTEXT | |
array | LONGTEXT | |
json | LONGTEXT | |
mediumtext | mediumtext | |
longtext | longtext | |
boolean | BOOL | |
integer | 8 | TINYINT |
integer | 16 | SMALLINT |
integer | 32(デフォルトサイズ) | INT |
integer | 64 | BIGINT |
float | FLOAT | |
double | FLOAT | |
decimal | DECIMAL | |
date | DATE | |
datetime | DATETIME | |
time | TIME | |
binary | BLOB |
ざっと見たけど、 unsigned を数値に設定する方法はないっぽかった。。。
同人誌即売会向けレジアプリ「レジプラ」を例大祭13で使用しました
こんにちは、さいです。
わたくし、趣味事として同人サークルを営んでおり、 東方Project や アイドルマスター等のキャラクターの グッズを制作して、同人誌即売会で販売しております。
https://sai-chan.com/rubberstrap.html
2016/05/08 に開催された 東方Projectオンリー同人誌即売会 博麗神社例大祭においても サークル参加してグッズを頒布させていただきました。
ところで、Twitter レジプラさんの下記のようなツイートを拝見しまして、 モニター登録をお願いしたところ、例大祭で使わせて頂けることになりました。
即売会向けレジアプリ「レジプラ」のモニター機貸し出しキャンペーン実施中。6月の正式販売前にモニター利用できるチャンスです。iPhone限定ですが、利用してみたい方はぜひご連絡下さい。レジプラで正の字カウントから卒業しよう! pic.twitter.com/lLEMvEXPSu
— レジプラ公式@技術書典A-01 (@tokyo_ff) 2016年5月5日
こんな感じでレジプラ土台と、さらにアプリインストール済みのiPhoneを貸して頂けました。
土台の中はこんな感じ。スイッチを入れるとコードレスで、 レジプラ土台とiPhone が接続されます。便利!
レジプラの商品登録画面
商品一覧画面
4つ目以降の商品はスライドさせると出てきます
お会計はこんな感じ。お釣りの額も自動で表示してくれるのがイカス!
そんな感じで、会場ではこんな感じで置いておりました。
弊サークルの名物、机を寂しく見せないために とりあえずグッズを並べるの図。
おかげさまでたくさんの方に足を止めて頂き、 盛況に終わりました!
レジプラさん、モニターとして使わせて頂きありがとうございました! 正式に販売される日を楽しみにしております!
当日、胸に貼ってたサークル参加証。 サークル参加証の入ったかばんを電車に忘れて、 再発行してもらうアホっぷりだった……
MySQL サーバーを再起動するとAUTO_INCREMENT の値が戻る
InnoDB では AUTO_INCREMENT のカウンタはメモリ上に保持します。
14.6.5.1 従来の InnoDB の自動インクリメントロック https://dev.mysql.com/doc/refman/5.6/ja/innodb-auto-increment-traditional.html
InnoDB テーブルに AUTO_INCREMENT カラムを指定すると、InnoDB データディクショナリ内のテーブルハンドルに、カラムに新しい値を割り当てる際に使用される自動インクリメントカウンタと呼ばれる特別なカウンタが含まれます。このカウンタは、ディスク上には格納されず、メインメモリー内にのみ格納されます。
InnoDB では、ai_col という名前の AUTO_INCREMENT カラムを含むテーブル t に自動インクリメントカウンタを初期化するために、次のようなアルゴリズムが使用されます。サーバーの起動のあとで、テーブル t への最初の挿入をするために、InnoDB は次のステートメントと同等なものを実行します。
SELECT MAX(ai_col) FROM t FOR UPDATE;
何が問題かというと、最新のレコードを削除して MySQL サーバーを再起動すると AUTO_INCREMENT の値が巻き戻る。
>select * from test; 1 2 3 4 5 >show create table test; CREATE TABLE `test` ( `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; >delete from test where id = 5; >show create table test; CREATE TABLE `test` ( `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; ここでMySQLを再起動 >show create table test; CREATE TABLE `test` ( `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
まあこのように SELECT MAX(id) FROM test FOR UPDATE;
の値に巻き戻る。
AUTO_INCREMENTした値が一意であることを見越して、
他のテーブルの外部キーにしてたりすると、整合性が取れなくなってしまう。
対策としては
・外部キー制約入れる
・AUTO_INCREMENTに頼らず、別に採番テーブルを用意する
・論理削除してレコードを delete しない(!)
toho-like-js を自分で作った
そのうち詳細はまた別に書きますが、自分で1から実装してみました。 まだ未実装箇所は多々あり、完コピにはなってません。
toho-like-js のソースコードを読む 5
進捗
TalkState ClearState GameOverState ShootingState
わかったこと
StageState からは 各要素の Manager インスタンスを通して要素を操作する。