めんそ〜れ沖縄

ネットサーフィンしていたら、面白い研究ページを見つけた。

http://www.crew.sfc.keio.ac.jp/projects/1999okinawa/article/index.html

研究分担
(1)熟年向けボケ防止ゲームの作成
   「めんそ〜れ沖縄 〜沖縄旅行 長寿探しの旅〜」の試作
                    研究分担 慶応大学
(2)熟年モニターにゲームを実際に行ってもらい、反応を調査する
                    研究分担 日本福祉大学

ゲーム概要
商店街の福引きで特賞を当てた主人公は、沖縄旅行に出発する。三泊四日の旅行の間に様々な場所を訪れ、沖縄独自の文化に触れ人々と交流する。長寿日本一であるこの沖縄県で、長寿の秘訣を探しだし長寿度をアップさせるのが、ゲームの目的である。ゲームは沖縄の写真を見ながらセリフを読み進めていく「観光シーン」と、観光シーンのところどころで出てくる「ミニゲーム」とで構成されている。観光シーンでの主人公の行動の選択、ミニゲームのクリアーの得点によって、長寿度が増える。

簡単なゲームを作り高齢者の反応を調べるようだ。ゲームの名前も内容もネタだとしか思えないが、実在する大学の研究である。
高齢者はこんなゲームをさせられてさぞ憤慨していると思いきや、以外に楽しんでいるようだ。日本における高齢者数は無視できない程になっているので、これからは子ども向けとは違う老人向けゲームの開拓を本気で考えた方がいいのかもしれない。

スクリプト言語Lua2

昨日、Luaは遅いと書きましたが正確な計測結果を公開したいと思います。速度としてはとりあえず、関数呼び出しの速度しか考えていません。

呼び出しもと→呼び出し先 1000000回の呼び出しで掛かった時間
C→C 3[ms]
C→Lua 253[ms]
Lua→C 114[ms]
LuaLua 161[ms]

なんだか大学のレポートっぽくなってきましたが(笑 この表の見方、分かるでしょうか? C→LuaというのはC言語側からLuaの関数を呼び出したと言うことです。LuaLuaLua→Cなども同様です。

この結果を見ると、CからCの呼び出しが最速、CからLuaの呼び出しが最遅(造語?)です。個人的にはLuaLuaよりもC→Luaの方が時間が掛かるのが驚きでした。C→Luaで掛かった時間の内訳を調べてみると

  • strlen に 約30[ms]
  • lua_pushlstring に 約100[ms]
  • lua_gettable に 約50[ms]
  • lua_call に 約70[ms]

となりました。LuaからLuaを呼ぶ場合には lua_pushstring(lua_pushlstring + strlen) をする必要がなく、その分軽くなっているようです。


これについて調べているうちに有用なページを発見したのでリンクを張らせていただきます。
http://www.radiumsoftware.com/0407.html#040709
以下、引用の引用です。

Lua をフレーム毎のアクションに利用するのは避けた方が良い。パフォーマンスが劇的に低下してしまう。例えば, Lua をアニメーションの更新に利用してはいけない。 Lua はアニメーションのパラメータのセットアップにとどめ,更新は C/C++ 側で行うようにするべきである。
Lua を大規模な用途に利用するのは避けた方が良い。短期間かつ小規模なアクションに利用した方が良い。
極端に大きなサイズのテーブルの利用は避けた方が良い。テーブルへのアクセス速度が落ちてしまう。

やはりLuaのパフォーマンスはあまり良くないというのが共通認識のようです。ただ、組み込みでこれだけ便利な言語というのもなかなかないので、毎フレーム呼び出すようなまねをせずよいお付き合いをしていきましょう、ということですね。(なんじゃこの結論)


今回の実験に使ったソース&実行ファイルを公開します。著作権などは主張しませんので煮るなり焼くなり好きにしてください。
http://cielacanth.s60.xrea.com/programs/lua_test.lzh

スクリプト言語Lua

最近、ゲームに組み込む予定のLuaをいじっています。やっと使えるようになってきたのでちょっとばかり解説を。詳しい解説はこちらです。
http://www.uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html

文法
LuaはCのようなRubyのような構文で癖がなく、初心者にも分かりやすいと思います。ただ、function foo() end のようにbeginなしendありの構文が気持ち悪いと感じる人もいるかもしれません。他人のソースを読んでいるとこれが以外に分かりにくかったりします。
ライブラリ
実はあんまりつかっていません。一見した限りでは io, string, math, debugと一通りはそろっているようです。
速度
巷では速い速いと言われているLuaですが、私はそんなに速いとは思いません。C言語からLuaの関数を呼び出す(逆でもよい)だけでもかなりの時間が掛かり、計測してみるとだいたいCの50倍!ほどかかります。GC付きでスタック指向のスクリプトだと仕方の内面もありますが、それにしても ヽ(`Д´)ノウワァァン!! です。

スクリプト言語について

ゲームにはよく組み込みスクリプトが使われます。主にイベントなどを記述する目的で使われ、ゲーム本体を再コンパイルせずともスクリプトの変更がゲームに反映されるようになっています。

これを使えばプログラマとは別のデザイナがゲームを記述できるようになりますし、スクリプトの変更もかなり容易になります。特に再コンパイルしなくていいというのがとても大きな利点の一つです。

もちろん欠点もいくつかあります。スクリプト用のライブラリを整備しなければならないだとか、スクリプト用にクラスを出力しなきゃいけないなどです。これは採用するスクリプト言語の事情によっても多少左右され、ときには難解なライブラリを使うことになるかもしれません。スクリプト言語を自作してもいいのですが、それはそれで問題がたくさんあります。

プログラマとデザイナがいるようなゲーム開発ではスクリプトを使った方がいいですし、一人で開発する場合でも将来的なことを考えて採用した方がいい気はします。

ゲムデヴ2

今日はマップエディタの開発を進めようと思っていました。思ってはいましたが、ダメでした orz。

マップエディタとは言っても3レイヤだったりイベントがあったりと、で設計が決まりません。現在のプロトタイプでもアンドゥが上手く動かなく、早速挫折気味です。本当に完成するんだろうか?そのうち問題の切り分けをしたいと思っていますが、しばらくは時間が掛かりそうです。

愚痴日記にならなきゃいいけど。