1

私はQtでゲームに取り組んでいます。私のキャラクター/オブジェクトは私のモデル クラスに格納されています (私は MVC モデルに従おうとしています)。

各オブジェクトを含むQMapを作成しました:

QMap<int, Safe*> *safes;
QMap<int, Mushroom*> *mushroom;
QMap<int, Floor*> *floors;

しかし、次に、コントローラーでこれらすべての QMap を取得し、コントローラーからビューの paintEvent() クラスに送信したいと思います。QMap を次のように QList に格納する方法はありますか:

QList<QMap<int, void*>>

そしてそれをキャストしますか?単一のオブジェクトからこれらの QMap にアクセスする方法を探しています。

ご協力ありがとうございました !

4

3 に答える 3

1

まず、はいQList、この目的で を使用できますが、最初にインターフェイス クラスを作成し、これを で使用することをお勧めしますQMap

struct GameObjectInterface {
};

class Safe : public GameObjectInterface {};
class Mushroom : public GameObjectInterface {};
class Floor : public GameObjectInterface {};

QMap<int, GameObjectInterface*> _GameObjects;

// Is game object with ID `n` a `Safe`?

Safe* s = dynamic_cast<Safe*>(_GameObjects[n]);
if (s != nullptr) {
    // Yes it is a safe
}

別の可能性:

QList<QMap<int, GameObjectInterface*>> _GameObjects;

また、必要に応じて、他のレスポンダーから示唆されているように、すべてを 1 つの構造体にカプセル化できます。

struct MyGameObject {
    QMap<int, Safe*> Safes;
    QMap<int, Mushrooms*> Mushrooms;
    QMap<int, Floor*> Floors;
};

QList<MyGameObject> _GameObjects;

それぞれが関連している場合 (すべてのオブジェクトで同じキー)、次のように単純化できます。

struct MyGameObject {
    Safe* _Safe;
    Mushrooms* _Mushroom;
    Floor* _Floor;
};
QMap<int, MyGameObject*> _GameObjects;
于 2015-10-15T08:38:24.493 に答える
0

特定のすべてのオブジェクトの基本クラスへのポインターを保持できます。

QMap<int, MyBaseClass*> allObjects;
于 2015-10-15T08:36:48.553 に答える