如何用 C++、SFML 制作平滑运动
我在C ++ W/sfml中进行平稳运动遇到问题. 有人可以通过按下按钮来制作算法,以使形状/精灵乘以15 px(精灵/形状为15 px)?谢谢. 解决方案 因为许多其他程序员可能想知道,在这里,但是下次问一个更精确的问题 这是我的进行平稳运动的方法: 接受您的初步动作,可以说25, 15每秒 这样做一个循环: void GameEngine::GameLoop() { sf::Clock timer; sf::Time tickRate; sf::Vector2f movement(25.0,15.0); // Your movement vector while(/* wahtever */){ tickRate = timer.restart(); yourShape.move(movement * ((float)tickRate.asMilliseconds() / 1000)); //
32 2024-04-22
编程技术问答社区
如何创建图书馆?
如何制作自己的GUI库,例如sfml? 这个问题是为了了解GUI库的工作原理,而不是实际制作我自己的图书馆. 我问我需要做什么.我可以打开编辑器并编写一些C ++代码,导入一些库,仅此而已.还是更复杂? 解决方案 使用GNU编译器[GCC]创建共享和静态库: http://www.adp-gmbh.ch/cpp/gcc/create_lib.html 其他解决方案 库是"只是"一堆课程和功能,因此您像普通程序一样编写它.唯一不同的是,当您进行编译时:必须创建一个静态/动态库文件.
42 2024-04-22
编程技术问答社区
SFML 着色器不工作
我正在尝试在单击按钮时为按钮创建轮廓效果 #include int main(){ sf::RenderWindow window(sf::VideoMode(500, 500), "hello world", sf::Style::Close); sf::RectangleShape rect; rect.setSize(sf::Vector2f(100, 100)); rect.setFillColor(sf::Color::Red); sf::Shader blur; if (!blur.loadFromFile("blur.frag", sf::Shader::Fragment)){ return 1; } if (!blur.isAvailable()){ return 1; } blur.setUniform("tex
32 2024-04-22
编程技术问答社区
'sf::texture' 不是 'sf' 的成员;
嘿,我刚开始修补SFML.代码线 sf::Texture texture; 导致错误: game.cpp:12:2: error: ‘Texture’ is not a member of ‘sf’ sf::Texture texture; 我觉得目录/usr/includs/sfml/graphics/应该包含一个texture.hpp文件,而不是.可以吗? 解决方案 在这里您要去:SFML download page 如果从源构建对您来说是压倒性的,则该页面提供了一个Linux构建. 或您的目标是从源头构建,最好是从laurent Gomila的
138 2024-04-22
编程技术问答社区
使用已删除的函数 'sf::RenderWindow& sf::RenderWindow::operator=(const sf::RenderWindow&)'
我是C ++的新手,所以请对我轻松. 我正在尝试使用SFML创建renderwindow.然后,在创建播放器时,该播放器的关联的"窗口"对象将设置为先前创建的RenderWindow.我的目的是能够从玩家对象(即: )运行窗口方法,例如window.draw() player::drawSprite() { window.draw(sprite); } 但是,我遇到了错误: error: use of deleted function ‘sf::RenderWindow& sf::RenderWindow::operator=(const sf::RenderWindow&)’ window = win; ^ 在错误日志中进一步向下,我还看到: error: initializing argument 1 of ‘Player::Player(sf::RenderWindow)’ Pla
30 2024-04-22
编程技术问答社区
使用 SFML 获取点击位置
我目前正在自己​​学习SFML,并试图弄清楚在pollevent>部分中,在bposX和bposY的部分中打印出单击区域的位置.这是我的代码: sf::RectangleShape smallRectangle (float width = 1.0f, float height = 1.0f, sf::Vector2f position = sf::Vector2f(1.0f,1.0f), const sf::Color& myFillColor = sf::Color(0,51, 51) ) { sf::RectangleShape sboard; sf::Vector2f myRectangleSize(width, height); sboard.setSize(myRec
20 2024-04-22
编程技术问答社区
SFML 绘制居中文本
我正在尝试将一些文本集中在SFML中.尽管您可以在下面的图中看到,但它并没有真正的工作. 也许我的数学有问题? void TextRenderer::renderCentered(sf::RenderWindow& window, std::string string, sf::Vector2f position, int size, sf::Color color) { sf::Text text; text.setFont(TextRenderer::kavoon); text.setString(string); float width = text.getLocalBounds().width; text.setPosition(position.x - width / 2, position.y); text.setCharacterSize(size); text.setColor(color
22 2024-04-22
编程技术问答社区
SFML 2.5.1-不支持几何着色器,Ubuntu 22.04,NVIDIA GeForce RTX Mobile
更改操作系统后,我再也无法使用SFML几何着色器,并且总是会有以下错误: Failed to create a shader: your system doesn't support geometry shaders (you should test Shader::isGeometryAvailable() before trying to use geometry shader 奇怪的是,isAvailable()函数检查系统是否支持着色器,返回true,并让我认为我的系统确实不支持几何形状着色器. 尽管我知道我的系统支持这种着色器.为了证明这一点,可以键入命令glxinfo并搜索某种几何着色器.如果未识别命令,则可以安装它: $ sudo apt-get install mesa-utils 最后,当我抓住"几何"之类的信息时,我会得到以下输出. $ glxinfo | grep geometry GL_EXT_float_blend, GL_EX
24 2024-04-22
编程技术问答社区
未找到 Visual Studio Code-SFML 库
我正在尝试在VSCODE中尝试SFML,但库没有找到我的库. 我尝试更改c_cpp_properties.json文件以将库添加到includePath中,但仍未找到. 这是主要类: #include #include #include int main() { // create the window sf::RenderWindow window(sf::VideoMode(800, 600), "My window"); // run the program as long as the window is open while (window.isOpen()) { // check all the window's events that were triggered since the last iteration o
14 2024-04-22
编程技术问答社区
如何检查点是否属于 ConvexShape?
我写了平台游戏的地图编辑器.我正在使用SFML.地图由多边形组成 - 凸形.我需要通过单击它们来选择凸形的选择.我知道我可以使用cv.getLocalBounds()获得矩形,然后检查一下,但是我需要更精确的解决方案.如何检查单击点是否属于任何形状? 解决方案 基于问题注释 link ,这就是我得到的. 使用那里描述的算法,我们可以确定给定点是否在形状计数内部每一侧有多少个交叉点 如果它们的数量在每一侧都是奇数,则该点属于形状.那么容易: bool contains(sf::ConvexShape shape, sf::Vector2f point){ std::vector intersectPoints = getIntersectionPoints(shape, point); int nodesAtLeft = 0; int nodesAtRight = 0; for (sf::Vector2f
22 2024-04-22
编程技术问答社区
SFML 像素操作--更改窗口中单个字符的大小
是否有任何方法可以更改窗口中的单像素的大小,因为我宁愿使用8x8像素而不是1x1的单个控制台字符. 解决方案 如果要在窗口中扩展(或向下)所有内容,最简单的方法是通过调用sf::RenderWindow::setView()来更改窗口的sf::View: sf::RenderWindow myWindow(sf::VideoMode(640, 480), "Test"); // Define a view that's 320x240 units (i.e. pixels) in size and is centered at (160, 120) sf::View myView(sf::Vector2f(160, 120), sf::Vector2f(320, 240)); // Apply the view myWindow.setView(myView); 运行此代码后,渲染到窗口的所有内容都将被降低2倍(因为您在640x480中显示了320x240).以类似
10 2024-04-22
编程技术问答社区
Texture.loadFromFile 不工作
我正在使用SFML 2.2和Visual Studio Express2013. 我只想加载纹理并将其应用于精灵,就像在教程中在问题是texture.loadfromfile()对我根本不起作用.我试图将文件放在一千个不同的地方,并且总是得到相同的结果.最后,我决定使用完整的路径,同样的问题.我还尝试了不同的格式:PNG,GIF,JPG,BMP.我还试图用不同的软件来保存它们:Photoshop,gimp,油漆.没有任何帮助.显示的唯一错误消息是: 无法加载图像" 完全这样,最后只有一个双引号. 帮助! 这是我尝试过的最小代码. #include int main() { sf::Texture texture; if (!texture.loadFromFile("C:\\temp.png")) return 1; return 0; } 解决方案 我弄清楚了
10 2024-04-22
编程技术问答社区
在 SFML 中使用 Vulkan?
IM当前使用GLFW进行窗口创建和用户输入. GLFW简单地允许我们说: glfwwindowhint(glfw_client_api,glfw_no_api); 告诉GLFW不与OpenGL合作.它甚至提供 的功能 glfwCreateWindowSurface(...) 自动化不同平台的窗口表面创建. 有什么办法可以与SFML做类似的事情?我在他们的网站上找不到有关它的任何信息,所以我认为答案是否定的.但是也许有某种骇客,还是不建议? 解决方案 vulkan在下一个次要版本中得到了支持; 新的 请参阅完整的讨论,以获取信息. 默认情况下,新的sf::WindowBase不会创建OpenGL上下文.相反A>具有以下定义. //////////////////////////////////////////////////////////// /// \brief Create a Vulkan rendering surface /// /
6 2024-04-22
编程技术问答社区
使用 SFML 绘制自定义类型
我最近使用sfml捡起了,我决定作为一种学习经验,我将使用它做一个乒乓球.我已经定义了一个名为Ball的类,该类别使用SFML绘制RectangleShape.但是,当我尝试使用window.draw()函数将此自定义类型绘制到屏幕上时,我会发现错误,因为Ball不是sf::Drawable.我很感谢SFML新手的帮助. 解决方案 要使用window.draw(object)对象的类必须继承接口并实现抽象SF :: Drawable :: Draw函数. 听起来像是SF :: Rectangleshape是Ball的成员. SFML知道如何呈现形状,但不知道球本身.鲍尔的课程声明应该看起来像这样: class Ball : public sf::Drawable //,... { //... private: virtual void draw(sf::RenderTarget& target, sf::RenderStates states)
12 2024-04-22
编程技术问答社区
SFML 2.0 - 使用精灵矢量绘图
我正在尝试创建一个循环以在屏幕上绘制10个块,但没有显示任何内容.我没有错误,所以我认为矢量没有存储精灵.我是SFML的新手,所以我真的不知道我在做什么错. sf::Texture bTexture; sf::Texture bloqueTexture; sf::Sprite bloqueSprite; //create vector of blocks std::vector bricks(10, sf::Sprite(bloqueTexture)); fondo.setTexture(img_mgr.getImage("fondo.jpg")); personaje.setTexture(img_mgr.getImage("jumper.png")); personaje.setPosition(100,POSICION_TERRENO_Y); bloqueSprite.setTexture(img_mgr.getImage("bloque.png"
24 2024-04-22
编程技术问答社区
SFML 2.1 和代码锁定错误:您的计算机中缺少 sfml-graphics-2.dll
我刚刚开始使用C ++和SFML,一切终于运行良好.在我遇到未定义的参考错误之前,我意识到我已经下载了错误的SFML类型,而是获得SJLJ而不是DW2.问题是解决的,但被另一个被取代.现在,每当我运行SFML程序时,它都会打开一个小窗口: 它说: 该程序无法启动,因为sfml-graphics-2.dll缺少 你的电脑.尝试重新安装程序以解决此问题. 然后,当您按"确定"或关闭窗口时,程序将停止工作.不要感到困惑:该程序从未在控制台上打开. 这是直接复制并从CodeBlocks教程网站复制和粘贴的代码: #include int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); sf::CircleShape shape(100.f); shape.setFillColor(sf::C
26 2024-04-22
编程技术问答社区
在 SFML 中重复纹理以适应特定尺寸
我有一个包含纹理的文件.我将其加载到sf::Texture上,然后用setTextureRect分成精灵. 现在可以说,一个精灵包含20像素宽的纹理的一部分.我该如何渲染以适合例如213像素.我能想到的唯一方法是将其渲染为sf::RenderTexture并用另一个精灵裁剪. 有更好的方法吗? 解决方案 您可以使用但是,您需要将较大图像的那一部分复制到独立纹理中. 这是一个示例: #include int main(int, char const**) { sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window"); sf::Image img; img.create(20, 20); for (auto i = 0; i
20 2024-04-22
编程技术问答社区
无法获取源代码的真实路径--Xcode、SFML、C++
我是SFML的新手,并遵循SFML&Xcode教程的SFML 2.5尝试获得基本的程序构建和运行. 将框架的内容复制到/Library/Frameworks和extlibs的内容为/Library/Frameworks以及Xcode模板之后,我能够使用SFML应用程序模板通过Xcode创建示例应用程序. 当我尝试构建它时,它失败了以下错误: 知道我做错了什么? 帮助您非常感谢! 解决方案 似乎是一个邮政构建脚本指向不正确的路径.这是解决此问题的方法. 在xcode中,单击项目导航器的根部(在其中看到源文件)中的项目名称,以便您可以看到其配置. 应该有一个称为"构建阶段"的标题.单击该. 展开称为"运行脚本"的项目. 如果您遵循从SFML设置环境的教程,请在脚本顶部的注释"设置"下编辑该区域以看起来像这样. #These 3 are probably pointing to a directory under #/Users/
14 2024-04-22
编程技术问答社区
GCC 不同优化级别的不同输出
我正在研究上学期我为大学开发的射线跟踪器的重写,我遇到了以下问题: 当我在调试中编译并运行代码时,输​​出为预期 但是,当我启用更高的优化水平时,例如" -o2"是完全不同的结果: 我不确定为什么会发生这种情况.我将其跟踪到Sphere交点代码 //#pragma GCC push_options //#pragma GCC optimize("O0") Intersection Sphere::intersect(const Ray& ray, const float previous) const { const auto oc = ray.origin - center_; const auto lhv = -dot(ray.direction, oc); const auto discriminant = lhv * lhv - (oc.lensqr() - radius_ * radius_); if (discrimina
30 2024-04-22
编程技术问答社区
MSVCP110D.dll 未找到
我正在尝试使用SFML制作游戏.我在Visual Studio 2012和Windows 7上做了其中的一部分.我试图在使用Windows XP的另一台PC上运行游戏,但是我发现了一个错误"未找到MSVCP110D.DLL".我在这个论坛上看到了另一个主题,该主题说要在发布模式下编译代码,但是当我在编译之前选择"释放"选项时,Visual Studio强调了与SFML相关的所有内容.它找不到我包括" sfml/graphics.hpp"的库.在"调试"模式下,一切都可以.您是否知道如何在不同的PC上运行游戏(Windows XP或Windows 7)? 我更改了项目的属性,以编译Windows XP.当我尝试在XP上运行游戏时,没有此选项,错误会发生"不是有效的32位应用程序". 现在一切都在起作用.我更改了发布模式的所有设置.在我的Win XP PC上,我安装了C ++重新分布2012.但是,如果我将游戏发送给没有C ++重新分配的人,该怎么办? ? 解决方案 如
14 2024-04-22
编程技术问答社区