squirrelスクリプトを使ってゲームプログラミングなどをする人はまだ少ないみたいですね。やはりLUAのほうがサンプルプログラムや資料がたくさんありますからね。
squirrelスクリプトの情報はあんまりないし・・・
でもね、ウィキペディアからsquirrelスクリプトを検索してみるとゲームでは”小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル”で使われているんだよ。といってもたった一つorz いや、公開してないだけで使用してる所もあるはずだ!
実際 私は使用しているのですが、とにかく使いやすい!とくにC++になれたあなた!そう、そこのあなた(って、誰にいってるやら^^;
興味を持つと吉でっせ^^;
冗談はこのくらいにしておいて、とりあえず下記のスクリプトをみてくださいな
私が実際に使用しているスクリプトの例です。アクションゲームで使用してます。
どうでしょうか?このスクリプトに一目惚れをしましたか?w
興味を持たれて方はまずは、Squirrel2.2リファレンスマニュアルをまず読んでみてください。文法構造や予約語の仕様が書いてありますんで(-。☆
ありがたいことに、上記のリンク先は日本語に翻訳された説明を読めます。翻訳してくれた方に感謝です!
さて、squirrelスクリプトマニュアルを読んでみて、ちょっと取っつきにくいなぁ~と思ったあなた!そんなあなたに朗報です。
squirrelスクリプトの通常ライブラリをより簡単に扱うことのできるライブラリがSqPlusなんです。一度ダウンロードをしてみて実験をまずしてみてください。ここら辺の説明はしませんよ!私はスパルタでいきます(-。☆
SqPlusのサイトで使用されているsquirrelのバーションが2.2.4ではないです。私のSqPlusは最新の2.2.4にバージョンアップされ、VS2010用にソースコードも少し修正してあります。修正しない場合、スタックオーバーフローのエラーが出ます。修正箇所の詳しい説明は、”VS2010でSqPlusを実行したところ、スタックオーバーフローが!”を参照!
上のイメージはスクリプトにわざとエラーを出させている状態です。アクションゲームで使用してる時のです。
SqPlusを使ったサンプルなどを公開する予定ですが、以下の環境が必要となります。
Visual Studio 2010
持っていない方は下記のサイトからダウンロードしてください。
http://www.microsoft.com/japan/msdn/vstudio/express/
インストール方法などはググってくださいな、
とりあえずこれだけ!
サンプルプログラムのディレクトリ構造は下記のようになります。
今回はここまで、次回はsquirrelスクリプトファイル呼び出しをして、実際にSqPlusを使い、どのようにう動くかを話しますね(-。☆
次回へ続く「SqPlusを使う 第二回」
squirrelスクリプトの情報はあんまりないし・・・
でもね、ウィキペディアからsquirrelスクリプトを検索してみるとゲームでは”小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル”で使われているんだよ。といってもたった一つorz いや、公開してないだけで使用してる所もあるはずだ!
実際 私は使用しているのですが、とにかく使いやすい!とくにC++になれたあなた!そう、そこのあなた(って、誰にいってるやら^^;
興味を持つと吉でっせ^^;
冗談はこのくらいにしておいて、とりあえず下記のスクリプトをみてくださいな
私が実際に使用しているスクリプトの例です。アクションゲームで使用してます。
Include("hero/hero01.nut"); Include("stage/stg01/test01.nut"); Include("stage/stg01/test02.nut"); Include("enemy/GZombie01.nut"); Include("bullet/bullet01.nut"); //CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC //C クラス名:Stage //C //C 説明: //C 1つのステージを管理する //CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC class Stage01 extends CStage { //============================================ // メンバ変数定義 //============================================ //----------------------------------------------------------------------------------- // コンストラクタ //----------------------------------------------------------------------------------- function constructor() { // これ削除したら死刑 ::CStage.constructor(); } //----------------------------------------------------------------------------------- // [ 説明 ] private // 一度だけ呼び出される初期化処理 // ※ゲーム管理側から呼び出される // // [ 戻り値 ] // 何もなければ1を返す //----------------------------------------------------------------------------------- function Initialize() { try{ //======================================== // カメラ //======================================== //======================================== // 主人公の設定 //======================================== //======================================== // ステージオブジェクト //======================================== //======================================== // 敵グループ //======================================== //======================================== // ステージ全般の設定 //======================================== }catch(id){ throw(id); return -1; } return 1; } //----------------------------------------------------------------------------------- // [ 説明 ] private // 更新処理 // ※ゲーム管理側から呼び出される // // [ 引数 ] // fElapsedTime :時間 // [ 戻り値 ] // 何もなければ1を返す //----------------------------------------------------------------------------------- function Update(fElapsedTime) { return 1; } //----------------------------------------------------------------------------------- // [ 説明 ] public // メッセージが送られてくる // ※Update()より先に呼び出される場合は、ゲーム管理側から自動的に呼び出される // // [ 引数 ] // nMsg :整数値のメッセージが送られてくる // xPar1 :nMsgの種類により型が変わるパラメータ1 // xPar2 :nMsgの種類により型が変わるパラメータ2 // [ 戻り値 ] // 何もなければ1を返す //----------------------------------------------------------------------------------- function Message(nMsg, xPar1, xPar2) { switch(nMsg) { case F.MSG_HERO_DEATH: //-------------------------- // 主人公死亡 //-------------------------- //print("主人公死亡"); break; case F.MSG_EVENT: //-------------------------- // イベント発生 //-------------------------- break; case F.MSG_MAPCHIP_CHANGE_START: //-------------------------- // マップ置き換えが始まった //-------------------------- // xPar1(文字列:マップ名) // xPar2(文字列:置き換え名) break; case F.MSG_MAPCHIP_CHANGE_END: //-------------------------- // マップ置き換えが終了した //-------------------------- // xPar1(文字列:マップ名) // xPar2(文字列:置き換え名) break; default: return -1; } return 1; } }; // これを宣言しなければ死刑 gSTG = Stage01();
どうでしょうか?このスクリプトに一目惚れをしましたか?w
興味を持たれて方はまずは、Squirrel2.2リファレンスマニュアルをまず読んでみてください。文法構造や予約語の仕様が書いてありますんで(-。☆
ありがたいことに、上記のリンク先は日本語に翻訳された説明を読めます。翻訳してくれた方に感謝です!
さて、squirrelスクリプトマニュアルを読んでみて、ちょっと取っつきにくいなぁ~と思ったあなた!そんなあなたに朗報です。
squirrelスクリプトの通常ライブラリをより簡単に扱うことのできるライブラリがSqPlusなんです。一度ダウンロードをしてみて実験をまずしてみてください。ここら辺の説明はしませんよ!私はスパルタでいきます(-。☆
SqPlusのサイトで使用されているsquirrelのバーションが2.2.4ではないです。私のSqPlusは最新の2.2.4にバージョンアップされ、VS2010用にソースコードも少し修正してあります。修正しない場合、スタックオーバーフローのエラーが出ます。修正箇所の詳しい説明は、”VS2010でSqPlusを実行したところ、スタックオーバーフローが!”を参照!
上のイメージはスクリプトにわざとエラーを出させている状態です。アクションゲームで使用してる時のです。
SqPlusを使ったサンプルなどを公開する予定ですが、以下の環境が必要となります。
Visual Studio 2010
持っていない方は下記のサイトからダウンロードしてください。
http://www.microsoft.com/japan/msdn/vstudio/express/
インストール方法などはググってくださいな、
とりあえずこれだけ!
サンプルプログラムのディレクトリ構造は下記のようになります。
解凍後のディレクトリ構造
┣ bin(ビルド後の実行ファイルが作られる)
┗ data(画像、音声、スクリプトなどがある)
┗ sc(スクリプトがある)
┣ lib(ビルド後にシンゲンライブラリが作られる)
┣ obj(ビルドしたときに中間ディレクトリとして使われる)
┗ source(プログラム”VS2010”で作られたプロジェクトがある)
┣ 3rdParty(SqPlusなどのヘッダファイル、ライブラリなどがある)
┣ プロジェクトごとのディレクトリ
┗ SGLib(プログラムを扱いやすくするためのライブラリ、主にsquirrel関係)
┣ bin(ビルド後の実行ファイルが作られる)
┗ data(画像、音声、スクリプトなどがある)
┗ sc(スクリプトがある)
┣ lib(ビルド後にシンゲンライブラリが作られる)
┣ obj(ビルドしたときに中間ディレクトリとして使われる)
┗ source(プログラム”VS2010”で作られたプロジェクトがある)
┣ 3rdParty(SqPlusなどのヘッダファイル、ライブラリなどがある)
┣ プロジェクトごとのディレクトリ
┗ SGLib(プログラムを扱いやすくするためのライブラリ、主にsquirrel関係)
今回はここまで、次回はsquirrelスクリプトファイル呼び出しをして、実際にSqPlusを使い、どのようにう動くかを話しますね(-。☆
次回へ続く「SqPlusを使う 第二回」