2011-01-07 4 views
4

私はウェブ開発者であり、ゲームを作成しようとしています。 一部の研究では、State Based以外のゲームのための決定的なデザインパターンは実際には見つかりませんでした(誰もがそうしているようです)。ゲームのスクリプティングデザインパターン

人々はゲームでのスクリプティングについて語りますが、私は単にそのための良いリソースを見つけられませんでした。

私はLuaとGroovyをチェックアウトしましたが、ゲームの基本コードと統合されたスクリプト言語をどのように使用するのですか?

すべてのヘルプ(書籍、サイトなど)を評価されて

+0

ゲームスクリプト言語を作成しようとしていますか?または、スクリプト言語を使用するゲームですか?後者の場合はどちらですか?ルア?すごい?これらの質問にはそれぞれ異なる回答があります。 –

+3

http://gamedev.stackexchange.comに関するいくつかの関連する質問があります。 http://gamedev.stackexchange.com/questions/421/how-do-you-add-a-scripting-language-to-a-game- http://gamedev.stackexchange.com/questions/11/what-スクリプティング言語は私のためにゲームを選択してください –

+0

このgamedev.stackexchangeに感謝、本当にそれについて知りませんでした。 – Draiken

答えて

4

投稿された質問はゲームについてですが、同じロジックは、ユーザーのやりとりに基づいて実行時に異なる動作をするアプリケーションに適用されます。 Markが言っているように、アプリケーションで解釈したり、コアアプリケーションに直接フィーチャを構築するスクリプトでこれを実装できます。なぜ前者をしたいのですか?

  1. あなたのゲームはmoddableになります。ユーザーは機能を追加したり、ゲームを専門にすることができます。
  2. プラットフォーム(ハードウェアまたはOS)をゲームロジックから分離します。これにより、異なるチームが同時にゲームのさまざまな側面で作業することができます。また、ゲームの移植や更新がずっと簡単になります。
  3. アプリケーション(ファイル、ネットワーク、UI)とゲーム(クエスト、グラフィックス、サウンド)のデータを分けます。アプリケーションとゲームの作成は異なるスキルセットであり、両方を実行しようとすると、あなたが監督と俳優の両方で映画を作ろうとするほど簡単です。

スクリプト可能なゲームを作成することにしました。これを行う方法?まず、ディレクター(ゲームエンジンを書く人)かアクター(スクリプトを実行する人)になりたいかどうかを決めます。 Noctrineは、ゲームエンジンを書くための良いリンクをいくつか投稿しました。

ゲームをスクリプト化する場合は、既存のゲームエンジンを選択する方がよいでしょう。ネバーウィンター・ナイトは、modding communityの良い公表されたゲームです。無料のオープンソースのスクリプト可能なゲームが必要な場合は、Dungeon of Despairを検討してください。

ゲームエンジン、スクリプト言語、ゲームロジックを自分で作成することはお勧めしません。可能な限り、これは大量の作業です。

+0

ありがとう、助けが大歓迎です。私のニーズに合ったエンジンがないので、エンジンやゲームのロジックを選択する必要はありません。再度、感謝します ! – Draiken

5

ゲームでスクリプトをサポートするための様々な方法があります。それはスライディングスケールです。

スクリプト言語を使用して実際にすべてを実行することができます。そのため、スクリプトを使用してすべてのデータ、ロジックなどを定義し、C/C++のコアエンジン機能を使用します。このスキームでは、C/C++ *側のほぼすべてが、効率を十分に高めるために、または既にその言語で書かれており、再実装するのに費用がかかるため、分割のちょうど側にあります。

ほとんどのゲームコード&をC/C++で定義し、バインドやコールバックを実装して、スクリプトを使用したカスタマイズを行うことができます。バインディング(例:LuaBind)を使用すると、スクリプトコードで定義されていないC/C++側で値/呼び出し関数を取得して設定することができます。コールバックはスクリプトがトリガーされているゲームイベントをリッスンすることを許可します。たとえば、エンティティが被害を受けようとしているときに呼び出されるスクリプトがあります。スクリプトを使ってゲームロジックをカスタマイズ/拡張することができます。

書籍Game Engine Architectureは、サンプルコードなどは含まれていませんが、可能性を説明するうまく機能します。

どのようにのスクリプトは、あなたの実装スタイルが何で、どのコア&スクリプト言語を選択するかに非常に依存します。より具体的なものをご希望の場合は、いくつかの言語の選択肢(例:C++ & Lua)を入力し、this oneのようなチュートリアルを探してみてください。

なぜがアプローチに依存するのですか?一般的には、ゲームプレイの機能/動作/データをゲームエンジンの邪魔にすることです。これにより、プロジェクトの残りの部分を再構築することなく、実行時にスクリプトをリロードできるので、変更が容易になります。うまく実装されたスクリプティングシステムは、プログラマーに迷惑をかけることなく、人々がゲームに参加したり、ゲームを変更したり、拡張したりするのを容易にします。

具体的な例:

あなたは、彼らがラウンドにわたって扱ってどのくらいのダメージプレイヤーに伝える機能の一部を構築する場合があります。

これをC++ /コア側で行う場合は、非常に特定の機能を提供するために非常に特定のコードをロードし、プロジェクト全体を再構築して新しいバージョンをデプロイすることをプログラマに任せることを意味します。彼らはその後、デザイナーとすべてが壮大であることを確認します。そうでなければ、彼らは再コード化して再構築しなければならず、多くの時間を浪費します。

うまく設計されたスクリプトシステムでは、それはround_damageを削除する場合に過ぎません。luaスクリプトをscriptsフォルダにコピーします。ゲームが開始されると、スクリプトが自動的に表示され、アクティブになり、プレーヤーがダメージを受けるたびに、 "OnDamageReceived"ハンドラがトリガされます。ラウンドが終了すると、OnRoundEndedコールバックがトリガされ、スクリプトによってメッセージが表示されます。

フックの豊富なセットが公開されている場合、スクリプタはプログラマの助けを借りずにこのすべてを行うことができます。彼らが間違いを犯したり、何か他のことを試してみたいのであれば、スクリプタはゲームを止めることなく直ちにスクリプトをリロードすることができます。

*これは一般的な選択であるため、コアエンジンにはC/C++と言いますが、目的に合った言語であれば十分です。

+0

私はあなたの答えを理解しましたが、もう少し実用的なものを探しています。私たちはたくさんのスクリプトを書くことができ、コア言語だけをコア言語にして、あるいは他の方法ではアーラードにすることができます。私が知らないことは、あなたはそれをどうやってやっているのですか?なぜあなたはそれをやりますか?私はあまりにも高価な本の参照を愛して、あまりにも高すぎる:) – Draiken

+0

あなたはどの言語を使って作業していますか、どのようなスクリプトのアプローチに興味がありますか?より具体的なものが必要な場合は、このC++とLuabindのチュートリアルを探してみてください:http://www.nuclex.org/articles/cxx/1-quick-introduction-to-luabind –

+0

また、あなたのフォローアップのコメント –