当前位置: 首页 > 知识库问答 >
问题:

C++冲突问题

方俊
2023-03-14
    for (auto pair : collisionPairs)
    {
        auto& square1 = static_cast<Square&>(*(pair.first));
        auto& square2 = static_cast<Square&>(*(pair.second));

        square1.setVelocity(-square1.getVelocity());

        square2.setVelocity(-square2.getVelocity());

    }

现在这种情况仍然发生,但很少发生,就像100次碰撞中有1次发生,而在100次碰撞中有20次发生之前

共有1个答案

韩博厚
2023-03-14

除了纯粹的碰撞检测之外,我还会检查方块的中心是否相互移动,并且只在第一种情况下恢复它们的速度。为了提供一个示例,您必须提供有关square类实现的信息。

编辑:本质上,逻辑看起来如下所示:

if (collision detected) {
    if ( (square2.posx-square1.posx)* (square2.vx-square1.vx) < 0) {            
        // EDIT: exchange velocities of square1 and square2 in x direction
    }
    if ( (square2.posy-square1.posy)* (square2.vy-square1.vy) < 0) {             
        // EDIT: exchange velocities of square1 and square2 in y direction
    }
}

这当然远不是一个现实的碰撞模拟,但如果您只是想看看您的碰撞检测是否正确工作,这就足够了。顺便说一句。我假设,矩形的边都是沿着x轴和y轴定向的。

 类似资料:
  • 尝试使用AWS C++SDK创建SQS队列。 运行在Windows上,64位,VC++。 更改调用以使用AWS::SQS::SQSClient*,将所有NuGet包更新到latets版本(以X.60结束)。这是堆栈跟踪: Testdb.exe!AmazonSQSqueue::AmazonSQSqueue(std::Basic_String,std::Allocator>queueIdentifie

  • 我正在尝试为我的大学工作制作一个基于2D平台的游戏(在SFML)。我不是要求任何人为我编写一些代码,但如果有人能提供一些指示,我将非常感激:) 目前我有大约13门课,包括: BaseEntity(大多数游戏对象都是由此派生的) 玩家(继承自BE) 魔法宝石(玩家需要这些来通过关卡晋级) 平台 SolidBlock(从平台继承) 可以说,我已经构建了大部分的游戏“积木”--每个类都有自己的更新函数,

  • 我正在用C++的SFML制作一个2D游戏,我有一个冲突的问题。我有一个玩家和一张用瓷砖做的地图。不起作用的是我的碰撞检测不准确。当我将玩家向上移动然后向下移动到瓷砖上时,结果会有所不同。 我知道这个问题的根源可能是在计算球员移动时使用帧间的delta时间--所以它不是恒定的。但它平滑了运动,所以我不知道如何做它的其他方式。我试着用定速阀来使碰撞完全准确--速度必须非常低,我对此不满意。 在玩家位置

  • 小雪再 pull 的时候遇到了冲突。 → git pull --rebase remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 Unpacking objects

  • C STLunordered_map如何解决冲突? 看着http://www.cplusplus.com/reference/unordered_map/unordered_map/,它说“唯一的键容器中的两个元素不能有相同的键。” 这意味着容器确实在解决碰撞。然而,那一页并没有告诉我它是如何做到的。我知道一些解决冲突的方法,比如使用链表和/或探测。我想知道的是c STL无序_映射是如何解决它的。

  • 本文向大家介绍C#关联别名以解决冲突,包括了C#关联别名以解决冲突的使用技巧和注意事项,需要的朋友参考一下 示例 如果您正在使用可能具有相同名称类的多个名称空间(例如System.Random和UnityEngine.Random),则可以使用别名来指定Random来自一个或另一个名称空间的别名,而不必在调用中使用整个名称空间。 例如: 这将导致编译器不确定Random将新变量视为哪个。相反,您可