<   2009年 05月 ( 10 )   > この月の画像一覧
GENOウイルス
 最近「GENOウイルス」なるものが感染拡大してるそうですね。
 詳しくは同人サイト向け・通称「GENOウイルス」対策まとめを見てもらうとして。
 とりあえず自分のPCが感染していないことと、自分のサイトとサークルHPが改竄されていないことは確認しました。
 WEBページが感染源となるので、サイト管理者の方は十分注意したほうが良さそうです。
[PR]
by lyricist_m | 2009-05-17 19:29
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
スクリプト解読中
 すいはんさんのすいはんBlog 〔NScripter+Lua〕〔弾幕?STG〕についてから「弾幕?STGサンプル」を落としてスクリプト解読中。いやー、久しぶりに他人の書いたスクリプトをガッツリ読んでる気がします。
 うちのノートPCじゃ多少FPSが落ちますが(それでも平均20ちょいってとこ)、普通にプレイできることに驚きました。凄いなぁ。
 どうも自分はこういうゲームらしいゲームを作る方向に食指が動かないのですが、こういうの見てると作りたくなってくるなぁ。数年前、CとWindowsのAPIを触ってた頃に作ったどうしようもないゲームでも移殖してみようかな。
[PR]
by lyricist_m | 2009-05-03 18:23 | NSLua
system.luaを読み込むタイミング
 system.luaはgame命令終了後に読み込まれます。つまり、
1.*define
2.game
3.system.lua
4.*start
 の順番に読んで行く、と。
 このうち、1~3までは定義節、4からは実行節になります。なのでsystem.lua中ではdefsubやluasubなどの定義節専用命令が使用できます。

 system.luaを読むのがgame命令実行後のため、たとえばLua側に値を渡す目的で、定義節でローカル変数を使用しても、game命令でローカル変数がクリアされてしまいます。
 なので「定義節内からLuaへ値を渡す」場合はグローバル変数を使用しましょう。実行節からならluasubが使えるので、普通にそっちで。
[PR]
by lyricist_m | 2009-05-03 09:21 | NSLua
numalias&Luaについて考えてみる
 どうにかして、Luaでaliasを便利にできないものでしょうか。
 例えば実際のエイリアスの定義を別ファイル(例えばalias.txtとか)に分けて、それをLuaから読み込むのであれば楽に出来るんですが。
 理想としてはvaralias 変数名って感じで変数番号を意識せずに変数名をつけられる自作命令を作れて、普通に定義節で使えるのが一番かなと思います。だけどsystem.luaが読み込まれる順番はgame命令通過後なんですよね……。

 仕組み自体は、単にinc %0してたのを関数内部に引っ張ってくるだけにすれば楽に実装できるので、問題はどこでその関数を実行するか、ですね。
 とりあえず変数定義別ファイル化の方向で動いてみるかなぁ。
[PR]
by lyricist_m | 2009-05-01 09:04 | NSLua
テーブル周り
 Luaでテーブルを弄るサンプルスクリプトをアップしました。Delusionist's Utopia -NScripter-からDLできます。
 サンプルスクリプトと言ってもtable.luaが一つ入ってるだけなので、そのままでは動作しません。余裕があれば後でsystem.luaと00.txtを追加しておきます。

 テーブルを1つの文字列に圧縮したり、逆に文字列からテーブルに展開したり。またはテーブルをCSVとして保存したり、CSVからテーブルに復元したりできます。これらの命令とコールバックのセーブやロードと組み合わせれば、テーブルのセーブ・ロードも簡単にできるかと思います。
 また、テーブルを配列(array)や連想配列(hash)と見なして上記の動作を行なう関数も入っています。このスクリプトを読めば、Luaにおける配列の扱い方、テーブルとforループの連係、文字列の連結、ファイルの読み書きの仕方なんかが少しは理解しやすくなるんじゃないでしょうか。コメントは全く書いていないので、おそらく読むのが大変でしょうけども、テーブル・配列・連想配列間で処理の内容に大差はないので、見た目ほど量は多くないかと。



 次はどうしましょうか。
 とりあえずストックとして、NSCALL_animationを利用したマウスカーソル移動スクリプトとか表示文スプライト化(製作途中)とかあるんですが、個人的にはnumaliasをどうにかしてLuaで使いやすくしたいところです。
[PR]
by lyricist_m | 2009-05-01 08:55 | NSLua