首先,我爲標題感到抱歉,無法想出一些簡短的內容來描述我的問題。在運行時將主類對象的類型更改爲子類
我所擁有的是「基於文本的冒險遊戲」。我有一個叫做Game的主類,我有遊戲循環等,我也有一個叫Screen的類,還有一個叫Screen_One和Screen_Two等的Screen類的子類,用於我想要的許多不同的「屏幕」遊戲。
所以我在屏幕裏面有一個sf :: Texture和sf :: Sprite。 Screen_One和Two都使用不同的值初始化它們各自的構造函數中的值(在這種情況下,它只是一個背景紋理)。
我的問題在於,我的Game類有一個類型爲Screen的對象,我想根據遊戲中的位置來更改它,所以基本上我想將Screen作爲Screen_One對象初始化爲Game構造函數,當我在遊戲中進展到Screen_Two時,我想將該屏幕對象更改爲Screen_Two對象,並因此爲我當前所在的屏幕獲取正確的背景。
我有什麼現在(不工作是這樣的)
Screen_One的構造
Screen_One::Screen_One(void)
{
Texture.loadFromFile("filename.png"); // background for screen_one
Sprite.setTexture(Texture);
}
遊戲類中:
Game::Game(void) : mWindow(sf::VideoMode(640, 480), "Game") // Game constructor
{
sc = Screen_One(); // sc is a declared like "Screen sc" in Game.h
}
void Game::render() // this function runs inside the game loop
{
//draw some stuff
mWindow.draw(this->sc.Sprite);
}
運行此代碼,但它只是給了我一個白色的背景(所以基本上什麼也不畫)。所以這種做法顯然不起作用,但我希望你能理解我想要做什麼,也許修復或給我另一種實現相同事物的方式。
編輯:tl; dr我可以有一個類型爲Screen的對象,然後在運行時將Screen對象分配給Screen_One或Screen_Two以便例如更改背景。
試過這個,並得到mWindow.draw(sc.Sprite)的錯誤;說「表達式必須有類型」爲什麼? – Jacco
sc現在是一個指針,所以你需要說'sc-> Sprite' –
啊,當然!非常感謝。 – Jacco