c++ - 如何在 SFML 上添加更多精灵?
问题描述
我正在尝试制作游戏界面,并且我有一些图像文件(它们都是PNG)。这些是图像文件:坦克、地图、状态栏、barguage
这是我的代码
#include <SFML/Graphics.hpp>
#include <cassert>
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML works!");
sf::Texture tex;
sf::Sprite map;
sf::Sprite tank;
enter code here
assert(tex.loadFromFile("map_skybridge.png"));
map.setTexture(tex);
tank.setTexture(tex);
sf::Event event;
while (window.isOpen())
{
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(map);
window.display();
}
return 0;
}
我想知道如何添加更多精灵。我想将它们放在地图图像上。
解决方案
您只需创建更多纹理对象——sf::Texture
每个图像一个,并以与目前相同的方式加载文件:
sf::Texture texMap;
sf::Texture texTank;
texMap.loadFromFile("map.png");
texTank.loadFromFile("tank.png");
至于绘图,有多种方法。您可以为每种要绘制的事物类型仅创建一个精灵,或者您可以为每个实际游戏对象创建一个精灵(例如,2 个坦克使用相同的精灵或两个单独的精灵):
sf::Sprite sprMap;
sf::Sprite sprTank;
sprMap.setTexture(texMap);
sprTank.setTexture(texTank);
然后像往常一样绘制你的精灵:
window.draw(sprMap);
window.draw(sprTank);
当然,您可以使用sf::Sprite::setPosition()
等移动精灵。
推荐阅读
- c++ - 使用对 const 结构的 const 数组的引用进行构造
- python - 对列表进行操作并替换值
- javascript - react - building a tooltip with createPortal without adding an element sibling to 'root'
- kubernetes - 如何使用 ansible 连接到 Kubernetes?
- laravel - Laravel storing multiple folders of config, views, css and js in a root folder outside of the resources folder
- swift - How to bind data between views using @EnviromentObject?
- excel - Why does my =MATCH formula give #N/A or the correct answer in the exact same circumstance?
- azure - How to get the unit test results in variables in Azure DevOps Pipelines?
- powershell - Get a list of folders that contain vb files using powershell
- python - Why it is so slow to transfer data from GPU when use numba.cuda and CuPy at the same time?