NScripterページを整理しました
 Delusionist's Utopia -NScripter-を整理しました。
 といっても、上げてあるサンプルと関連したブログの記事にリンクを貼っただけですけどね。
 あと、リンクを貼る際に記事にも軽く目を通して、情報が古いものには多少追記を書きました。
 基本的にどのサンプルも投げっぱなしで、中にはreadmeすらついてないものもあるので、そこらへんも追々修正していきたいですね。



[2009年5月11日追記]
 そういえばexciteブログって、該当カテゴリの記事一覧って機能、無いですよね。
 うちは現在ほぼNScripter関連のTIPSで埋め尽くされていて、NScripterカテゴリの記事数は100を超えます。NSLuaもあわせると大体150ってとこですね。検索機能があるとはいえ、これは記事を読んでいくのが大変そう。
 どこか別のブログに移るべきかなぁ。
[PR]
# by lyricist_m | 2009-05-11 02:37 | NScripter
ゲームサンプル(ドッジ)をバージョンアップ
 幻惑郷 : ゲームサンプル(ドッジ)で上げたものをバージョンアップしました。

 LuaでOOP
 上記サイトさんを参考に、クラス周りを修正しました。前回とは「親クラスのメソッドが使える」点が大きく違いますね。実は当初こちらで製作していたのですが、どうもおかしなエラーが頻発するので泣く泣く簡単な実装で我慢することになったのでした。そして昨日、改めてほぼ同じスクリプトを書いてみたところ、なぜかエラーは出ず。未だに原因は解っていません。なんだったんだろうなぁ、一体……。
 それはともかくとして。やはりクラスが使えるとやりやすいですねぇ。ノベルゲームだと必要なさそうですが、こういうゲームゲームしたものだと便利です。クラス以外でも、メタテーブルを色々弄ればもっと便利になりそうですが、あまりやりすぎると可読性が落ちそうですね。作ってる当時はいいけどある程度時間を置いてから見直すと「これ、何やってるんだっけ?」ってなりそう。
 他の修正点としては、スペースキーでのポーズやエスケープキーでのゲーム終了などのキー入力周りですね。NSGetKey(checkkeyやbexecもそうですが)は基本的に、キーが押されるとすぐ処理が返ってきてしまうので、今までのボタン処理に慣れてると少し苦労します。キーダウンじゃなくてキープレスを取得する関数でも作るべきかなぁ。
[PR]
# by lyricist_m | 2009-05-09 16:49 | NSLua
returnとbreakについて
 Luaのリファレンスマニュアルに「return 文と break 文はブロックの 最後 の文としてのみ書くことが許される」と記述されていますが、基本的に気にしないでいいです。
 一般的にreturnとbreakを書くタイミングって、ブロックの最後以外に来ることがまず無いんですよね。
 たとえばbreakの場合、
while true do
if NSGetKey("RETURN") then break end
NSSleep(1)
end

 といった使い方をするわけですが。
「最後の文」と書かれているのでなんとなく「whileの最後に来てないし、こういう書き方だめなのかなぁ」という気になりますが、if文のブロック内の最後の文になっているので、これは正しい使い方になります。
 もしわざと不正な使い方をするのであれば
while true do
if NSGetKey("RETURN") then
break
NSExec('caption "RETURN key is pressed"')
end
NSSleep(1)
end

 という感じですね。もしこういう書き方をするとしたら、デバッグしたい時なんかでしょうか。ループや関数を途中まで進めて様子を見たい、とか。そういう時は単にbreakと書くのではなくdo break endとしましょう。

 ちなみに、returnとbreakで不正な使い方をした場合、「'end' expected...」というエラーメッセージが出ます。
[PR]
# by lyricist_m | 2009-05-09 15:57 | NSLua
ゲームサンプル(ドッジ)
 NSLuaで作成した簡単なゲームのサンプルをアップしました。Delusionist's Utopia -NScripter-からDLできます。

 ゲーム内容は「出現する敵をただひたすら避け続ける」というシンプルなもの。カーソルで自機を操作でき、一定時間を経過すると勝利、敵に当たると敗北です。
 特徴は
・ほぼNSLuaのみで作成されている
・アニメーションを使用していない(延々ループを回している)
・簡易クラスを用いている
・簡単なFPS調整を行なっている
・スペースキーによるポーズに対応している
 といったところでしょうか。
 個人的にはクラスの機構をもうちょい弄りたかったなぁ。実は別の方法でクラスを実装していたんですが、どうも親クラスの参照がおかしいらしく、親クラスから継承したインスタンス変数がインスタンス間で共有されちゃってたんですよね。色々頑張ってみたものの問題を解決できなかったので、簡単な方に移行しました。これだと子クラスで親クラスの関数を呼んだりできないので、次はそこらへんを改善したいですね。



 あと、同じくNSLuaサンプルである「テーブル周り」のリンクがおかしかったのをついでに修正しました。
 おかしいなぁ、確認したと思ったんだけど。
[PR]
# by lyricist_m | 2009-05-07 20:43 | NSLua
コロンの使い方
 関数定義と関数呼び出しの際にコロンが使えます。コロンを使うと暗黙の引数selfが使えるようになり、かなり便利になります。
 詳しくはリファレンス等を見てもらうとして、今回は自分がはまったことをひとつ。

 関数定義において、
function test:func(...) ... end
 は
function test.func(self, ...) ... end
 とほぼ同じですが、
test:func = function(...) ... end
 という書き方はできません。「function arguments expected near '='」なるエラーが出ます。
 functionを後置したいのであれば、暗黙の引数selfを略さずに書いて
test.func = function(self, ...) ... end
 とする必要があります。

 マニュアルをよく読めばすぐ解る話なのですが、小一時間ほど悩んでしまいました。
[PR]
# by lyricist_m | 2009-05-06 01:17 | NSLua