SFML pass renderwindow - PullRequest
       5

SFML pass renderwindow

0 голосов
/ 05 июня 2011

Я пытаюсь сделать игру с SFML .

Я делаю sf :: RenderWindow, но когда я пытаюсь передать окно другому классу, это не получается.Я не могу получить доступ к окну.Потому что я думаю, что было бы хорошо создать отдельный класс для обработки таких событий, как «закрыть окно» и т. Д., Но тогда я не могу получить к нему доступ.Как я могу это исправить?

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

Ответы [ 4 ]

0 голосов
/ 30 октября 2017

попробуйте

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 голосов
/ 04 июля 2011

Какую версию SFML вы используете?Это невозможно в SFML 1.6, но в SFML 2.0 (новая версия).

0 голосов
/ 07 августа 2015

Создайте себе заголовочный файл и определите свою функцию следующим образом:

Заголовочный файл

#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 голосов
/ 05 июня 2011

RenderWindow находится в пространстве имен 'sf'

Может быть, вы где-то "используете пространство имен sf;" и это отсутствует в других местах.

Попробуйте префикс его везде с помощью sf :: RenderWindow.

...