【问题标题】:SFML pass renderwindowSFML 传递渲染窗口
【发布时间】:2011-06-04 22:30:51
【问题描述】:

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

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

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

【问题讨论】:

  • 请显示执行“给予”和“访问”的代码。
  • 另外,下次请说明您使用的是哪个版本的 SFML。

标签: c++ sfml


【解决方案1】:

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

头文件

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

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

【讨论】:

    【解决方案2】:

    RenderWindow 位于命名空间“sf”中

    也许你在某个地方“使用命名空间 sf;”而在其他地方却不见了。

    尝试在任何地方都使用 sf::RenderWindow 作为前缀。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        试试这个

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

        【讨论】:

        • 你有内存泄漏,我怀疑 sf::RenderWindow 无论如何是可复制的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        相关资源
        最近更新 更多