gpt4 book ai didi

c++ - 将 SFML RenderWindow 传递给类

转载 作者:行者123 更新时间:2023-11-28 05:16:47 27 4
gpt4 key购买 nike

恐怕我是从有限的 Python 经验中转向 C++ 的。在 Python 中,我经常使用 Tkinter 来处理我的 GUI,我可以将我的“ Canvas ”或“窗口”传递给存储它的其他类,然后可以绘制到只传递一次的 Canvas /窗口。

我希望对 SFML 和 C++ 做同样的事情,但到目前为止,我只找到了每次调用方法时都必须将我的 sf::RenderWindow 传递给该方法的解决方案。

例如,我有一个“播放器”类,我想在每次调用 Player.move('up') 时保存播放器的 Sprite 并移动 Sprite ,目前我的解决方案发现说我必须使用以下代码(它可能有点不正确,我只是在火车上输入的,但希望你能理解):

main.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;
}

Player.cpp

Player::move(sf::RenderWindow& window, char direction){
/*Code to move the sprite shall be on this line*/
window.draw(sprite);
}

我知道将 render-window window 传递给一个方法并不是一个很大的困难,但我觉得必须有一种方法可以更像这样:

main.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;
}

Player.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++?

最佳答案

您可以继承sf::Drawable,它包含一个纯虚拟的draw()方法。

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 中绘制实体的方式,如形状、 Sprite 、顶点等。

关于c++ - 将 SFML RenderWindow 传递给类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42470439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com