大家好,欢迎来到IT知识分享网。
介绍
如果将SFML与Visual Studio IDE(Visual C ++编译器)一起使用,则本教程是您应该阅读的第一篇。它将说明如何配置SFML项目。
安装SFML
首先,您必须从下载页面下载SFML SDK 。
您必须下载与您的Visual C ++版本匹配的软件包。实际上,例如,使用VC ++ 10(Visual Studio 2010)编译的库与VC ++ 12(Visual Studio 2013)不兼容。如果没有针对您的Visual C ++版本编译的SFML软件包,则必须 自己构建SFML。
然后,您可以在任意位置解压缩SFML存档。不建议将头文件和库复制到Visual Studio的安装中,最好将库保留在它们自己的单独位置,尤其是在您打算使用同一库的多个版本或多个编译器的情况下。
创建和配置SFML项目
首先要做的是选择要创建哪种项目。建议选择“空项目”。对话框窗口提供了一些其他选项来自定义项目:仅当您知道如何使用预编译的头文件时,才选择“控制台应用程序”或“ Windows应用程序”。
就本教程而言,您应该创建一个main.cpp文件并将其添加到项目中,以便我们可以访问C ++设置(否则Visual Studio不知道您将在该项目中使用哪种语言。 )。稍后我们将说明要放入的内容。
现在我们需要告诉编译器在哪里可以找到SFML标头(.hpp文件),以及链接程序在哪里可以找到SFML库(.lib文件)。
在项目的属性中,添加:
SFML标头( / include)到C / C ++ 的路径 »常规»其他包含目录
SFML库( / lib)到链接器的路径 »常规»其他库目录
这些路径在Debug和Release配置中都是相同的,因此您可以为项目全局设置它们(“所有配置”)。
用于设置搜索路径的对话框的屏幕截图
下一步是将应用程序链接到代码将需要的SFML库(.lib文件)。SFML由5个模块(系统,窗口,图形,网络和音频)组成,每个模块都有一个库。
必须在链接器»输入»其他依赖项的项目属性中添加库。添加所需的所有SFML库,例如“ sfml-graphics.lib”,“ sfml-window.lib”和“ sfml-system.lib”。
设置项目库的对话框的屏幕截图
链接到与配置匹配的库很重要:“ sfml-xxx-d.lib”用于Debug,“ sfml-xxx.lib”用于Release。混合不良可能导致崩溃。
此处显示的设置将导致您的应用程序链接到SFML的动态版本,该版本需要DLL文件。如果要摆脱这些DLL并将SFML直接集成到可执行文件中,则必须链接到静态版本。静态SFML库带有“ -s”后缀:“ sfml-xxx-sd.lib”用于Debug,而“ sfml-xxx-s.lib”用于Release。
在这种情况下,您还需要在项目的预处理器选项中定义SFML_STATIC宏。
定义SFML_STATIC宏的对话框的屏幕截图
从SFML 2.2开始,进行静态链接时,您还必须将所有SFML的依赖项也链接到您的项目。这意味着,例如,如果要链接sfml-window-s.lib或sfml-window-sd.lib,则还必须链接opengl32.lib,winmm.lib和gdi32.lib。其中一些依赖库可能已经在“继承的值”下列出,但是自己重新添加它们不会造成任何问题。
这是每个模块的依赖项,如果要链接SFML调试库,请如上所述添加-d:
模组 依存关系
从表中您可能已经注意到SFML模块也可以相互依赖,例如sfml-graphics-s.lib都依赖于sfml-window-s.lib和sfml-system-s.lib。如果您静态链接到SFML库,请确保链接到有问题的库的依赖关系以及依赖关系的依此类推。如果依赖项链中缺少任何内容,则会出现链接器错误。
如果您有些困惑,请放心,对于初学者来说,所有与静态链接有关的信息都会使您不知所措。如果有些事情第一次对您不起作用,您可以继续尝试牢记上面所说的内容。如果仍然无法使用静态链接工作,则可以在FAQ和 论坛上查看有关静态链接的主题。
如果您不知道动态库(也称为共享库)和静态库之间的区别,并且不知道使用哪个库,则可以在Internet上搜索更多信息。关于它们有很多好的文章/博客/帖子。
您的项目已准备就绪,让我们现在编写一些代码以确保它可以正常工作。将以下代码放入main.cpp文件中:
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
如果选择创建“ Windows应用程序”项目,则必须将代码的入口点设置为“ WinMain”而不是“ main”。由于它是Windows专用的,因此您的代码无法在Linux或macOS上编译,因此SFML提供了一种在这种情况下保留标准“主”入口点的方法:将项目链接到sfml-main模块(“ sfml-main-d调试中的“ .lib”,发行版中的“ sfml-main.lib”),就像链接sfml-graphics,sfml-window和sfml-system一样。
现在编译项目,如果链接到SFML的动态版本,请不要忘记将SFML DLL(它们位于<sfml-install-path / bin>中)复制到已编译的可执行文件所在的目录中。运行它,如果一切正常,您应该看到以下内容:
Hello SFML应用程序的屏幕截图
如果使用sfml-audio模块(无论是静态还是动态),则还必须复制其所需的外部库的DLL,即OpenAL32.dll。
这些文件也可以在<sfml-install-path / bin>中找到。
文章链接:https://www.sfml-dev.org/tutorials/2.5/start-vc.php
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14618.html