1

若い頃、ゲームメーカーというツールをよく使っていました。そこからプログラミングを学び始めました。私は今それをはるかに超えていますが、振り返ってみると、その機能とデザインのいくつかは非常に興味深いものです. C++ を使用して、このツールと同様の機能を実装するにはどうすればよいでしょうか。私は疑問に思っています:

  • オブジェクト/クラス

Game Makerには、作成する「オブジェクト」のリストがありました。これらは、基本的にすべてが同じ基本クラス(今はゲームオブジェクトと呼びます)から派生した単なる異なるクラスであり、オブジェクトタイプを取る「instance_create」と呼ばれるシステム関数です。パラメータとして。C++ では、これは次のようになります (ただし、構文的には非常に正しくありません)。

class MyGameObject : GameObject
{
    //...
}
GameObject instance_create(class objecttype)
{
    objecttype newinstance = new objecttype();
    return newinstance
}
GameObject* gameobjectinstance = instance_create(MyGameObject);

それを実装するにはどうすればよいですか?

  • システム変数/関数

ゲーム・メーカーには、どこからでもアクセスできるシステム変数と関数がありました。限目。どこでも。私はグローバルを考えていますが、それが悪い設計であることは知っています。私はグローバルクラスを持ち、変数/関数を静的として持っていると考えていますが、それらは変更できません。どうすればいいですか?

  • 変数

Game Maker には var という 1 つのデータ型しかありませんでした。文字列、整数、小数など、何でもかまいません。そして、それらの間の変換のためのシステム関数がありました。

最後に、ある種のスクリプトでオブジェクト タイプを定義するにはどうすればよいでしょうか。たとえば、新しいタイプのオブジェクトを追加したい場合は、新しいスクリプトを作成しますか? C++ は実行時にオブジェクト型を作成できないと思いますが、どうすればよいでしょうか?

4

2 に答える 2

1

テンプレートの使用。

template<typename T> GameObject* instance_create()
{
    return new T;
}
GameObject* gameobjectinstance = instance_create<MyGameObject>();

ただし、指定した設計は非常に疑わしく (せいぜい)、C++ には適していません。過去のシステムを再作成するのではなく、適切に設計されたシステムとその言語に適したシステムを実装するよう努めるべきです。

特にスクリプトの実行時解釈についておっしゃっていますが、実はGameMakerのクラスとC++のクラスは何の関係もないと思います。また、実行時に C++ クラスを作成することも、実行時に型を渡すことも、実行時にテンプレートをインスタンス化することもできません

Lua などのスクリプト言語を簡単に作成し、必要な高性能コンポーネントのみを C++ で作成するのが最適です。

于 2011-10-28T19:25:22.053 に答える