SFML 传递渲染窗口

发布于 2024-11-13 10:12:33 字数 321 浏览 3 评论 0原文

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

我正在制作 sf::RenderWindow 但是当我尝试将窗口传递给另一个类时 它失败了。我无法访问该窗口。因为我认为单独制作一个很好 用于处理“关闭窗口”等事件的类,但我无法访问它。如何 我可以解决这个问题吗?

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

Im trying to make a game with the SFML.

I'm making a sf::RenderWindow but when I try to pass the window to another class
it fails. I can't access the window. Because I think it's good to make a separate
class for handling events like 'close the window' etc. but then I can't access it. How
can I fix this?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

眼睛会笑 2024-11-20 10:12:33

为自己创建一个头文件并定义您的函数,如下所示

头文件

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

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

Create yourself a header file and define your function like so

Header file

#pragma once

#include "SFML/Graphics.hpp"

class MyClass
{
public:
    sf::Sprite Sprite;

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

Cpp file

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

Then in your game loop for drawing you can call something like this

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

Hope this helps. Let me know if you need any more guidance.

相思故 2024-11-20 10:12:33

RenderWindow 位于名称空间“sf”中

也许您在某个地方“使用名称空间 sf;”而且在其他地方也不见了。

尝试在各处添加 sf::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.

烟雨凡馨 2024-11-20 10:12:33

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

Which version of SFML are you using? This is not possible in SFML 1.6, but is in SFML 2.0 (upcoming version).

怀里藏娇 2024-11-20 10:12:33

试试这个

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")
}

try this

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")
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文