将 SFML 渲染窗口传递给类
Passing SFML RenderWindow to class
恐怕我是从我有限的Python经验中得出C++的。在Python中,我经常使用Tkinter来处理我的GUI,我可以将我的"画布"或"窗口"传递给存储它的其他类,然后可以绘制到画布/窗口,只传递一次。
我希望对 SFML 和 C++ 做同样的事情,但到目前为止,只找到了每次调用该方法时都必须将我的sf::RenderWindow
传递给方法的解决方案。
例如,我有一个"玩家"类,我想在每次调用 Player.move('up') 时保存玩家的精灵并移动精灵,目前我找到的解决方案说我必须使用以下代码(它可能有点不正确,我刚刚在火车上输入了这个, 但希望你明白了):
主.cpp
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "Player.h"
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "My Game");
Player player(); //Nothing passed
player.move(window, "up"); //Pass window every time
player.move(window, "down");
player.move(window, "left");
return 0;
}
播放器.cpp
Player::move(sf::RenderWindow& window, char direction){
/*Code to move the sprite shall be on this line*/
window.draw(sprite);
}
我知道将渲染窗口window
传递给方法并不是一个巨大的困难,但我觉得一定有一种方法可以像这样做:
主.cpp
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "Player.h"
int main(){
sf::RenderWindow window(sf::VideoMode(800, 600), "My Game");
Player player(window); //Pass window once.
player.move("up"); // Relax knowing that everything is already handled.
player.move("down");
player.move("left");
return 0;
}
播放器.cpp
Player::Player(sf::RenderWindow& win_gui){
window = win_gui;
}
Player::move(char direction){
/*various case statements to move the sprite on this line*/
window.draw(sprite);
}
我要么错过了什么大东西,要么完全误解了。我的猜测是两者兼而有之。如果可以用另一种语言,为什么不C++呢?
您可以从包含纯虚拟draw()
方法的sf::Drawable
继承。
class Player : public sf::Drawable
{
protected:
void draw(sf::RenderTarget& target, sf::RenderStates state) const
{
target.draw(sprite);
}
};
当Player
类成为sf::Drawable
时,您将能够这样做:
Player player;
window.draw(player);
这也是在SFML中绘制实体的方式,如形状,精灵,顶点等。
相关文章:
- SFML RenderWindow打开窗口需要很长时间
- 获取 SFML 窗口的 HWND 和高可用性?
- SFML 文本未绘制在窗口上
- 如何从单独的线程控制 SFML 窗口?
- 在SFML(C++)中启动一个新窗口
- 当鼠标移出窗口时,SFML 窗口会自行关闭
- SFML 窗口没有响应
- SFML视图与窗口混乱
- SFML 中的分段错误 调用 sf::窗口::关闭后
- SFML参考窗口在绝对位置绘制
- 使用套接字 SFML 时窗口无响应
- 窗口在 SFML 中未打开
- 如何在调用函数时将对象绘制到 sfml 窗口上
- 运行 SFML 图形后看不到新窗口
- 如何将SFML窗口声明为我所有的类功能
- 将 SFML 渲染窗口传递给类
- 如何将窗口始终放在SFML的顶部
- SFML-无法在窗口中修改对象
- SFML FPS访问窗口事件的问题
- 好奇心:背景C++窗口.SFML/SDL类型和Qt(GUI)类型之间的差异