実際にエンジンをどのように設計したかによって異なります。レンダリング、サウンド、入力などのさまざまなことを担当する単なるライブラリではありません。それらを結合した作品が必要です。主な2つのアプローチは、シーングラフまたはコンポーネントモデルです。これをすべて組み合わせるモジュールです。入力を取得してエンティティまたはコンポーネントに渡し、いくつかのスクリプトを実行し、いくつかの変換を適用し、変換されたエンティティをレンダリングパイプラインに送信します。この流れではのスクリプトを実行しますは統合したいものです。それを行うには多くの方法があります。これらのスクリプトがあなたのエディタから来た場合、それを行う最良の方法です。エンティティテンプレート、エンティティインスタンス、トリガ、UI要素、入力デバイスに関連付けられます。エンジンはエンティティに関する特定のものを知ってはいけません。それらのテンプレートはエディタで定義し、エディタを使用して再び世界に配置する必要があります。
編集:もう少し詳細。
アプリケーションの部分を完全にスキップして、ゲーム固有のすべてのものがエディタでスクリプト化されていると仮定します。次にエンジンにメインループが必要で、シーンを更新して描画する必要があります。シンプルなスタートはUpdateです。あなたのループで待たずにできるだけ早くシーンを描きます。
あなたはコンポーネントモデルを持っていると仮定します...各コンポーネントにはアップデートがあり、そのアップデートはあなたがスクリプト化したコードです。コンポーネントがエンジンからアクセスできるインタフェースをいくつか作成する必要があります。たとえば、描画コンポーネントのテンプレートにはプロパティモデルがあり、その更新でエンジン上でDrawModelが呼び出され、そのモデルが渡されます。他のゲームパッドのコンポーネントの中には、そのボタンが押されたか解放されたかを問い合わせるための更新が必要です。エンティティ内の他のコンポーネントを見つけて、物理コンポーネントの位置や速度を変更できるようにする必要もあります。
基本エンティティの基本コンポーネントの作成を開始し、スクリプトからアクセスできないものを把握する必要があります。そして、それをあなたのスクリプティング層に公開する必要があります。しかし、すべての単一の機能を公開する前に2回考えてください。 APIが単純であればいいほどいいです。
編集:あなたは、私はそれがあまりにもそれを行うことができます賭けのJavaScriptの.NET実装を持っている場合、どのように、実行時にスクリプトをコンパイルする
IronPythonのは、コンパイルせずにコードを評価することができます。ここであなたのスクリプトをコンパイルするC#の方法です...あなたのエディタがC#であれば、エディタで別々のアセンブリをコンパイルすることをお勧めします。
private Assembly Compile(string fileName)
{
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
cp.TreatWarningsAsErrors = false;
CompilerResults cr = provider.CompileAssemblyFromFile(cp, fileName);
return cr.CompiledAssembly;
}
ゲームの種類にあまりにも多くを依存 - そのうちのいくつかは、メインループに含めることができますが、ロケット弾がフルにルール・エンジンが必要な場合があり... –
は、2Dのプラットフォーム上で、それを想定。ところで、私はイベントに何の問題もありません。メインループは、例えば、「ステップ」イベントまたは各フレームを実行することができる。何の問題もありません。 – MahanGM
あなたは 'C# 'でゲームロジックを指定しますか? – Tigran