0

4 つの GameObject を追加したのに、GameLoop で Console が "GameObject Update" と "GameObject Render" を 1 回しか出力しないのはなぜですか?

もう 1 つの質問ですが、ゲームオブジェクトの自己破壊関数を作成するにはどうすればよいですか?

最後の質問は、GameObject がリスト内の他のゲーム オブジェクトと通信できるようにする最善の方法は何ですか?

#include <iostream>
using namespace std;

class GameObject
{
public:
    GameObject *nextGameObject;

    GameObject()
    {
        cout<<"GameObject Constructor!\n";
        nextGameObject = nullptr;
    }
    ~GameObject()
    {
        cout<<"GameObject Destructor\n";
        if(nextGameObject != nullptr)
        {
            delete nextGameObject;
        }
    }

    virtual void Update()
    {
        cout<<"GameObject Update!\n";
    }
    virtual void Render()
    {
        cout<<"GameObject Render!\n";
    }
};

class GameObjectManager
{
private:
    GameObject *firstGameObject;
public:
    GameObjectManager()
    {
        firstGameObject = nullptr;
    }
    ~GameObjectManager()
    {
        if(firstGameObject != nullptr)
        {
            delete firstGameObject;
        }
    }

    void Update()
    {
        if(firstGameObject != nullptr)
        {
            GameObject *helpGameObject = firstGameObject;
            while(helpGameObject != nullptr)
            {
                helpGameObject->Update();
                helpGameObject = helpGameObject->nextGameObject;
            }
        }
    }
    void Render()
    {
        if(firstGameObject != nullptr)
        {
            GameObject *helpGameObject = firstGameObject;
            while(helpGameObject != nullptr)
            {
                helpGameObject->Render();
                helpGameObject = helpGameObject->nextGameObject;
            }
        }
    }

    void Add(GameObject *newGameObject)
    {
        if(firstGameObject == nullptr)
        {
            firstGameObject = newGameObject;
        }
        else
        {
            GameObject *helpGameObject = firstGameObject;
            while(helpGameObject != nullptr)
            {
                helpGameObject = helpGameObject->nextGameObject;
            }
            helpGameObject = newGameObject;
        }
    }
};

int main()
{
    GameObjectManager gom;
    bool run = true;

    gom.Add(new GameObject);
    gom.Add(new GameObject);
    gom.Add(new GameObject);
    gom.Add(new GameObject);

    while(run)
    {
        cout<<"GameLoop Start\n";
        gom.Update();
        gom.Render();
        cout<<"GameLoop End\n";
        cin.get();
    }

    return 0;
}
4

2 に答える 2

0

これはリンクされたリストの恐ろしい解決策ですが、私はあなたの質問に答えます. 障害は Add() にあります。ここでは、ローカル変数 helpGameObject を変更するだけです。代わりに、後続オブジェクトがないオブジェクトで停止し、そのオブジェクト nextGameObject を変更する必要があります。

于 2013-06-24T18:35:56.953 に答える