我正在尝试使用SFML制作游戏。
我正在制作一个 sf::RenderWindow 但是当我尝试将窗口传递给另一个类时它失败了。我无法访问窗口。因为我认为创建一个单独的类来处理“关闭窗口”等事件是很好的,但是我无法访问它。我怎样才能解决这个问题?
RenderWindow *window;
window = new RenderWindow(VideoMode(768, 614), "Tower Defence ver 2.0");
自己创建一个头文件并像这样定义你的函数
头文件
#pragma once
#include "SFML/Graphics.hpp"
class MyClass
{
public:
sf::Sprite Sprite;
MyClass();
void Setup(sf::Texture& texture);
void Draw(sf::RenderWindow& window);
};
cp文件
#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);
希望这可以帮助。如果您需要更多指导,请告诉我。
RenderWindow is in a namespace 'sf'
Maybe you have somewhere "using namespace sf;" and it's missing in other places.
Try prefixing it with sf::RenderWindow everywhere.
您使用的是哪个版本的 SFML?这在 SFML 1.6 中是不可能的,但在 SFML 2.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")
}