2012-11-06 78 views
1

我有一個功能,在我的班加載2圖像,但只顯示一次基於一定的條件。如何提高我的功能

問題是我必須先加載圖像之前的條件,這是發生在我的主循環。而且我不知道這是明智的做法,以便在想我能做些什麼,使之稍微優雅....

這是我有:


Main Loop

btn_quit.RenderBttn(window,mouseX,mouseY); 

Class function

void RenderBttn(sf::RenderWindow &destination,int mouseX, int mouseY) 
{ 

    std::string img = "button.png"; 
    sf::Texture button; 
    if (!button.loadFromFile(img)){ 
     exit(4); 
    } 

    std::string img_on = "button_on.png"; 
    sf::Texture button_on; 
    if (!button_on.loadFromFile(img_on)){ 
     exit(5); 
    } 

    sf::Sprite sprite(button); 
    m_w = sprite.getLocalBounds().width; //get dimensions 
    m_h = sprite.getLocalBounds().height; //get dimensions 

    sf::Sprite result(IsIn(mouseX,mouseY) ? button_on : button); //check if mouse is over the button 
    result.setPosition(m_x,m_y); 
    destination.draw(result); 
} 

我遇到的一個解決方案是使用固定數量的按鈕大小,但這限制了以後更改圖像大小的能力。

但是我也每次都在我的主循環中加載2張圖片,這對於表現來說肯定是不好的?

希望你能幫助:)

回答

2

你應該做的是加載的圖像存儲爲可在主迴路中訪問的變量。例如,如果您的主循環位於類中,請將sf::Texture button;成員變量添加到該類中。加載程序時,加載這兩個圖像,然後可以在循環的每個迭代中執行檢查以查看是否繪製它們。這裏的關鍵是加載一次並將它們存儲在內存中,並在需要時選擇使用它們。如果你注意到在你玩的大多數遊戲中,通常是在地圖的開頭,所有的資源,比如紋理,聲音等等,都會在「加載屏幕」上加載,然後它們會一直坐在內存中,直到它們被使用爲止(注意不是所有的遊戲都是這樣的,但它只是一個例子)。

0

爲什麼不首先測試條件,然後加載圖像?例如,

編輯:您需要將您的裝載從主循環中取出。在你的類中有兩個按鈕變量,並將下面的代碼放入構造函數中。

if (button.loadFromFile("button.png")) { 
    exit(4); 
} 

if (button_on.loadFromFile("button.png")) { 
    exit(4); 
} 

在主循環中,您不需要一次又一次加載文件。

+0

因爲我需要知道圖像的尺寸,以便知道鼠標是否處於或超過「​​按鈕」的位置。所以我必須先得到它的局部範圍。 – Sir