0

我正在尝试使用SFML制作游戏。

我正在制作一个 sf::RenderWindow 但是当我尝试将窗口传递给另一个类时它失败了。我无法访问窗口。因为我认为创建一个单独的类来处理“关闭窗口”等事件是很好的,但是我无法访问它。我怎样才能解决这个问题?

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

4 回答 4

1

自己创建一个头文件并像这样定义你的函数

头文件

#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);

希望这可以帮助。如果您需要更多指导,请告诉我。

于 2015-08-07T00:06:00.850 回答
0

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.

于 2011-06-05T03:07:08.043 回答
0

您使用的是哪个版本的 SFML?这在 SFML 1.6 中是不可能的,但在 SFML 2.0(即将发布的版本)中是不可能的。

于 2011-07-04T02:05:07.103 回答
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")
}
于 2017-10-30T10:26:37.913 回答