一个或多个对象或概念的交集,例如通信包或函数名。有关碰撞检测的问题(在计算机图形学中),请使用[tag:collision-detection]。
在 Gamemaker Studio 2 中进行水平碰撞时的反向控制
就像我尝试进行水平碰撞而按键不断倒置一样 // 步骤事件 > **# ` > `如果按下左键` 如果 dleft = true >>#{ > x += 2; > `左侧碰撞...
pygame中有没有一种方法可以在pygame中寻找精灵的特定面与另一个精灵的特定面之间的碰撞?例如,如果精灵 A 的顶部与 b 碰撞...
当我的子弹接触到矩形时,我试图在碰撞列表中找到特定的矩形。 我有 92 个矩形,每个矩形都有一个类型:“不透明”、“透明”。 当我在 la...
我正在开发一款太空采矿游戏,并试图让玩家发射采矿激光束,并删除与光束重叠的瓦片地图中的瓦片。梁是来自平面的静态持续矩形...
我正在用Java制作一个2D射击游戏,我需要能够计算出一个圆可以向前移动的最大距离(仅在Y轴上)并获得浮点值的距离,我已经看过了
//我希望我的“玩家”(黑色矩形)能够推拉我在游戏中放入的块//按下按键(ENTER)后,我只是不知道从哪里开始这。 无效 keyPressed() {...
我想在pygame中制作一个脚本,其中两个球飞向彼此,当它们碰撞时,它们应该彼此弹开,但我不知道该怎么做,所以你能帮助我吗?
在此输入图像描述 嘿伙计们,所以我的玩家按 E 打开箱子并在完成后获得积分。 问题是他可以一次又一次地按下它。 我不想只是禁用 o...
我有一个问题,当我在穿过 NPC 或移动时单击对话时,角色将继续朝操纵杆的方向移动,然后再将其设置为活动为 false。 ...
我目前正在开发一款自上而下的射击游戏,其中玩家处于固定位置,敌人从随机坐标进入。然而,敌人与敌人的碰撞……
我正在制作一个功能,当绿色盒子与灰色盒子碰撞时发出声音(如第一张图片)。我使用 OnCollisionEnter2D 来播放声音,当它们碰撞时它会播放一次(在第二次......
我正在制作一款自上而下的 2D 游戏,为玩家提供圆圈。我一直在尝试编写一个函数来获取有关碰撞检测后(以及渲染之前)的详细信息以获取...
我正在重新创建一个基本的乒乓球游戏..并且我无法弄清楚如何使球更快。我尝试过修改速度,但没有成功。另外,当球击中球拍时,它就会移动
我正在使用 pygame 创建一个 Brick Breaker 游戏。除了碰撞之外,我已经让其他一切都正常工作了。我尝试使用 collide_rect 但它不起作用,但它没有给我错误消息。我
我知道这可能听起来很愚蠢,但他们网站上的 pygame 文档说它是: x = pygame.Rect(左,上,宽,高) 然而,在我的程序中,我无法弄清楚这是真的,还是......
我目前正在尝试找到一种方法来获取与我碰撞的特定图块的位置。我有一个带有瓦片地图碰撞器的大型瓦片地图,并且我有一个具有脚本的播放器(见下文)...
我正在尝试将我的地图的 png 转换为实际地图,但碰撞无法按照我的需要进行。 这是我用来测试碰撞然后改变玩家运动的代码。我不确定...
我已经绞尽脑汁几个小时了,但仍然不明白什么是碰撞? 是当两个不同的对象获得相同的哈希码时吗? 或者是当两个不同的对象...
我正在创建一个库,这样我可以更轻松地创建 HTML5 canvas 游戏。我目前正在研究碰撞检测。这是我为线/圆碰撞编写的代码如下。 object1 是...
#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 与该形状接触。希望这有帮助