sfml 相关问题

SFML(简单快速多媒体库)是一种用C ++编写的便携且易于使用的多媒体API。您可以将其视为SDL的现代,面向对象的替代方案。 SFML由几个软件包组成,完全满足您的需求。您可以将SFML用作与OpenGL交互的最小窗口系统,或者作为用于构建游戏或交互式程序的全功能多媒体库。

两个圆圈之间的碰撞行为不正确

#include #包括 #包括 #包括 #包括 #包括 #包括 #include <SFML/Graphics.hpp> #include <SFML/Audio.hpp> #include <SFML/System.hpp> #include <Windows.h> #include <iostream> #include <math.h> #include <cmath> #include <thread> #include <random> double DISTANCE( sf::Vector2f l, sf::Vector2f k); bool Check_Collision(sf::CircleShape x, sf::CircleShape y); double angle_opp(sf::Vector2f l, sf::Vector2f k); double angle(sf::Vector2f l, sf::Vector2f k); double angle_adj(sf::Vector2f l, sf::Vector2f k); int main() { int i = 1; int x1 = 400; int y1 = 200; int x2 = 200; int y2 = 200; int rad = 20; sf::Clock clock; sf::RenderWindow window(sf::VideoMode(1000,1000),"Sheka Snake"); sf::CircleShape circle1; sf::CircleShape boost; circle1.setPosition(x1,y1); circle1.setRadius(rad); boost.setPosition(300, 500); boost.setRadius(10); boost.setFillColor(sf::Color::Red); window.clear(); window.draw(circle1); window.display(); window.setFramerateLimit(60); window.setVerticalSyncEnabled(false); sf::Vector2f f1; sf::Vector2f f2; bool collid = false; while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } float fps = clock.restart().asMilliseconds(); float speed = 0.3f * fps; if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { circle1.move(-speed, 0); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { circle1.move(0, -speed); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { circle1.move(0, speed); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { circle1.move(speed, 0); } if (Check_Collision(circle1, boost) == true) { std::random_device dev; std::mt19937 rng(dev()); std::uniform_int_distribution<std::mt19937::result_type> dist6(0, 1000);// distribution in range [1, 6] std::cout << dist6(rng)<<std::endl; boost.setPosition(dist6(rng), dist6(rng)); rad = rad + 30; circle1.setRadius(rad); } sf::Vector2f l; sf::Vector2f k; l = circle1.getPosition(); k = boost.getPosition(); window.clear(); window.draw(circle1); window.draw(boost); window.display(); } } double DISTANCE(sf::Vector2f l, sf::Vector2f k) { double dy = (l.y - k.y); double dx = (l.x - k.x); double d = sqrt(pow(dy, 2) + pow(dx, 2)); return d; } double angle_opp(sf::Vector2f l, sf::Vector2f k) { return (k.y - l.y); } double angle_adj(sf::Vector2f l, sf::Vector2f k) { return (k.x - l.x); } double angle(sf::Vector2f l, sf::Vector2f k) { return atan((k.y - l.y) / (k.x - l.x)); } bool Check_Collision(sf::CircleShape x,sf::CircleShape y) { using namespace sf; Vector2f v1; Vector2f v2; v1 = x.getPosition(); v2 = y.getPosition(); std::cout << "x:" << v2.x << "y:" << v2.y << std::endl; double dis =DISTANCE(v1,v2); double a; if (dis <= x.getRadius() + y.getRadius()) { return true; } } 你好,我是一名尝试学习 SFML 的初学者,我尝试让一个球在外部与另一个球碰撞,但碰撞无法正常工作,有时球在接触另一个球之前发生碰撞,有时在进入另一个球后发生碰撞。第一次碰撞后的距离似乎计算不正确 根据您提供的代码,我认为您试图解决的问题是由于您正在计算所有这些距离并比较它们和其他东西但不考虑起始(原点)偏移而造成的。当我们通常比较或计算这些物体的距离时,对我们来说物体的起点总是在中心。而在 sfml 中,原点总是在形状的左上角。对于任何非矩形形状,它是围绕形状边缘绘制的矩形(不可见)的左上角。 但是有一个更简单的解决方案。 SFML 已经有一个内置的基本碰撞: int main() { sf::CircleShape circ1; sf::CircleShape circ2; cout << circ1.getGlobalBounds().intersects(circ2) << endl; 上述函数获取 circ1 的面积并检查是否有任何其他 sf::Drawable 与该形状接触。希望这有帮助

回答 1 投票 0

Graphics.hpp 文件找不到 Window.hpp 文件

我的 Graphics.hpp 文件似乎找不到 Window.hpp 文件。我尝试使用更具体的路径移动它,但我仍然不断收到错误“SFML/Window.hpp”文件未找到,即使文件...

回答 1 投票 0

SFML c++ 程序在运行时抛出错误“找不到入口点”

我最近开始学习c++,现在对c++有些熟悉了。但这是我的第一个 SFML 程序,我没有任何使用第三方库的经验。我制作了我的第一个 SFML 程序......

回答 1 投票 0

我正在尝试在 VSCode 中使用 sfml,但我一直收到错误“对 winmain@16 的未识别引用”

我刚开始使用 sfml,我想在 visual studio code 中测试简单的代码, 按照他们网站上的教程和基本代码进行操作。 按照这些步骤,我需要一个命令...

回答 1 投票 0

我正在尝试在 viscode 中使用 sfml,但我不断收到错误“对 winmain@16 的未识别引用”

我刚开始使用 sfml,我想在 visual studio code 中测试简单的代码, 按照他们网站上的教程和基本代码进行操作。 按照这些步骤,我需要一个命令...

回答 1 投票 0

Sfml 运行时错误未解析的外部符号

我将 sfml 下载到 Visual Studio,这样我就可以构建游戏了。出于某种原因,即使我根据 sfml 网站完成了整个安装,但我还是收到一条错误消息,但我不知道该做什么...

回答 0 投票 0

光照问题 - Opengl

我正在尝试使用 SFML(而不是 GLFW)在 OpenGL 中渲染一些立方体。这两个对象都有不同的片段和顶点着色器。问题是当我使用 W、A、S、D 和

回答 0 投票 0

如何让它不会每次都刷新屏幕

如何让它在每次移动和悬停鼠标时都不会刷新屏幕,因此,屏幕会闪烁 // 事件处理程序“mouseMoved” 如果 (!loadlobbymousebutton...

回答 0 投票 0

为什么两个相同的字符串在字母之间有不同的空间大小?

我做了一个应该重现那个游戏的程序,“MonkeyType”,你必须在其中写一个特定的文本,如果你写错了,字母会变成红色,如果它是好的,le...

回答 0 投票 0

告诉 C++ 程序在哪里可以找到 DLL?

我一直在关注 sfml ecs 系列,想知道是否有任何方法可以设置我的项目目录,以便 dll 不在主文件夹中。我想放置我的 dll ...

回答 0 投票 0

SFML 音频问题 - 无法打开文件

每次我尝试使用 sfml 播放音乐时,我都会得到一个 无法打开声音文件“”(无法打开流) 播放音频流失败:声音参数未初始化(调用

回答 0 投票 0

""无法打开文档。它已被重命名、删除或移动。”在带有 C++ 项目的 Visual Studio 2019 中

我在 Visual Studio 2019 中的项目一直遇到问题。我正在使用 SFML 制作项目。当我尝试在解决方案资源管理器中打开 .cpp 文件时,出现以下错误:“文档

回答 0 投票 0

三角形没有正确着色

我正在使用 SFML(而不是 GLFW)在 OpenGL C++ 中渲染一个三角形,但三角形有时显示颜色,有时则完全是白色。我正在渲染两个连接到每个

回答 0 投票 0

立方体的底面未渲染 - 面剔除 OpenGL

我正在用 SFML 代替 GLFW 在 OpenGL C++ 中绘制立方体。立方体在没有面剔除的情况下被正确渲染,但在面剔除之后立方体的底面不可见。 我想要

回答 1 投票 0

sfml 无法链接着色器

当我测试 gl 着色器时,它不起作用。 我尝试只加载片段着色器,在着色器中使用其他代码,但我的经验不允许我这样做 C++代码 #包括 #def...

回答 1 投票 0

如何保存指向对象的链接必须在任何地方都可以访问? [关闭]

我想用“Java 风格”使用 C++ 和 SFML 编写我的下一个视频游戏。我有 5 年的 Java 经验。我创建了一些视频游戏,但我不知道 C++,并且由于游戏创建而想学习它。 .

回答 0 投票 0

与<list>库有关的未处理异常[关闭]

我有这个运行时错误: 我使用这段代码(这是最小的可重现示例代码;它在此之前说了一些其他内容。基本上,在此之前,该列表是一个名为

回答 0 投票 0

与<list>库有关的未处理表达式[关闭]

我有这个例外: 将无效参数传递给认为无效参数致命的函数。 我使用这段代码: std::list snakeSegments; head.setSize(sf::Vec...

回答 0 投票 0

Texture.loadFromFile 没有按预期工作

每当我尝试在不是主要类 (Main.cpp) 的类 (Map.cpp) 中加载纹理时,纹理图像不会出现 sf::Texture 纹理; texture.loadFromFile("Images/Image.png");...

回答 0 投票 0

SFML 库未定义引用

我一直在尝试使用 CMake 在 vscode 上运行 sfml。在让 cmake 构建一个工作的可执行文件之后。我写了一个简单的程序来制作一个窗口并画一个圆圈。当我构建公关时悬停...

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.