我试图在SFML上构建一个应用程序,并决定自己构建它,而不是使用apt包管理器。我也使用cmake,但我不认为这对我的问题有多大影响:
在我的文件UserInterface.h中,我有#include <SFML/Graphics.hpp>,当我从apt使用SFML-dev时,它工作得很好。编译器告诉我们,很多接受(int x,int y)的SFML方法不存在(同时找到接受sf::Vector 2f的版本)。这些重载方法以前工作得很好。
现在我查看了SFML的source code,实际上找不到重载函数?即使它们在文档中:
void sf::Transformable::setOrigin(float x, float y)
我不明白我哪里做错了。SFML的其余部分似乎都很好。如果没有声明这些重载方法,SFML如何支持它们呢?
这是我在构建时得到的输出:
error: no matching function for call to ‘sf::RectangleShape::setOrigin(int, int)’
103 | background.setOrigin(0, 0);
| ^
In file included from /usr/local/include/SFML/Graphics/Shape.hpp:33,
from /usr/local/include/SFML/Graphics/CircleShape.hpp:32,
from /usr/local/include/SFML/Graphics.hpp:34,
from /home/bonkt/dev/digitus/src/UserInterface/UserInterface.h:1,
from /home/bonkt/dev/digitus/src/UserInterface/UserInterface.cpp:1:
/usr/local/include/SFML/Graphics/Transformable.hpp:115:10: note: candidate: ‘void sf::Transformable::setOrigin(const Vector2f&)’
115 | void setOrigin(const Vector2f& origin);
edit:当将参数(int)转换为float时,它不会工作,所以这不是问题。它也适用于许多其他类似的方法:window.setPosition()window.setScale()
sf::FloatRect()
2条答案
按热度按时间bejyjqdl1#
找到我的答案:我之前使用的apt SFML包一定是SFML的旧版本。几周前,我在他们的github上发现了these合并的拉取请求。SFML决定不需要数字对,因为sf::Vector 2 T的使用与API的其余部分更一致。- 所以我将代码改为使用SF::Vector 2f
我只是有一个非常不幸的时间,因为新的pullrequests合并刚刚5天前。
wh6knrhe2#
SFML存储库的master分支是当前正在进行的SFML版本3,而latest official release(此时)是2.5.1。
The documentation是最新版本,仍然使用单独的(x,y)作为参数。2.6.x版本(虽然还没有发布)应该遵循几乎相同的文档,没有许多“破坏性”的更改。
SFML 3将引入突破性的变化(从SFML 2版本),并使用(将使用)
sf::Vector2<t>
作为其xy对,但由于它尚未正式发布(任何东西都可以改变),SFML网站上还没有官方文档。也就是说,如果您自己从源代码生成文档,它应该是最新的。