2011-06-04 192 views
0

我試圖用SFML做一個遊戲。SFML通過渲染窗口

我在做一個sf :: RenderWindow,但是當我嘗試將窗口傳遞給另一個類 時,它失敗了。我無法訪問該窗口。因爲我認爲爲處理諸如「關閉窗口」等事件創建一個單獨的 類是很好的,但後來我無法訪問它。 如何解決這個問題?

RenderWindow *window; 
window = new RenderWindow(VideoMode(768, 614), "Tower Defence ver 2.0"); 
+5

請出示一個具有「給予」和「訪問」的代碼。 – 2011-06-04 22:47:47

+0

下次請說明您正在使用哪個版本的SFML。 – tr9sh 2012-11-30 13:05:02

回答

0

RenderWindow的是在命名空間 '科幻'

也許你在什麼地方 「使用命名空間SF;」並且在其他地方缺失。

嘗試在sf :: RenderWindow處處添加前綴。

0

您正在使用哪個版本的SFML?這在SFML 1.6中是不可能的,但是在SFML 2.0(即將推出的版本)中。

0

自己創建一個頭文件和定義功能,像這樣

頭文件

#pragma once 

#include "SFML/Graphics.hpp" 

class MyClass 
{ 
public: 
    sf::Sprite Sprite; 

    MyClass(); 
    void Setup(sf::Texture& texture); 
    void Draw(sf::RenderWindow& window); 
}; 

cpp文件

#include "Bullet.h" 

MyClass::MyClass() 
{ 

} 

void MyClass::Setup(sf::Texture& texture) 
{ 
    Sprite.setTexture(texture); 
    Sprite.setPosition(0, 0); 
} 

void MyClass::Draw(sf::RenderWindow& window) 
{ 
    window.draw(Sprite); 
} 

然後在你的遊戲循環繪製你可以調用這樣的事情

// myClass is an object of type MyClass 
// renderWindow is your sf::RenderWindow object 
myClass.Draw(renderWindow); 

希望這有助於。讓我知道你是否需要更多指導。

0

試試這個

class Foo 
{ 
public: 
    Foo(sf::RenderWindow& ptrwindow) 
    : ptrwindow(ptrwindow) 
    { 
      // your code here 
    }; 
    sf::RenderWindow* window() 
    { 
     return &this->ptrwindow; 
    } 

    private: 
     sf::RenderWindow ptrwindow; 
}; 

int main() 
{ 
sf::RenderWindow* mywindow = new sf::RenderWindow() 
Foo myfoo(*mywindow); 
myfoo.window()->create(sf::VideoMode(768, 614), "Tower Defence ver 2.0") 
} 
+0

你有內存泄漏,我懷疑'sf :: RenderWindow'無論如何都是可以複製的。 – Quentin 2017-10-30 10:29:55