问题标签 [game-physics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1952 浏览

c# - 帮助 WPF 中的物理模拟

我正在研究 2d 游戏的简单物理学,我想要帮助我尝试做一个模拟。

我有一个酒吧会落在地上的一个固定球上,下面是 xaml:

在酒吧开始下降之前

我已经完成了所有的计算来模拟杆因重力而下落,但我真正需要帮助的是,一旦杆击中球,它的一侧会在地面上,另一侧会在球上,这可能很漂亮很多用 xaml 表示:

酒吧在地上

而且我不知道如何让杆的左侧触地,而左侧将在物理术语中超过球。

我知道有像 Farseen 这样很棒的物理引擎,但我只是想了解它在这种情况下是如何工作的。

我知道如何根据时间获得横杆的 Y,所以我一直检查它直到它与球相撞,但那之后呢?

谢谢!

0 投票
5 回答
912 浏览

c# - 使用 A* 并且仍然避免碰撞?

我正在设计一款塔防游戏,为此我使用 A* 寻路算法从我的出生区域到达我的目的地。

这里的问题是所有单元都堆叠在一起,这在视觉上看起来并不好。有没有办法让它们以某种方式分组,如果没有足够的空间,可以传播更多?

该算法的工作原理是所有单元一次移动一个图块。

0 投票
2 回答
3577 浏览

java - 游戏中的地形和碰撞

我正在尝试创建一个新游戏,其中车辆沿地面行驶,但也有能力使用推进器暂时悬空。

我对游戏编程比较陌生,但我很擅长用 Java、C、C++ 等进行编码,所以我认为这不是问题(认为游戏的第一次迭代是用 Java 编写的)。我的问题是我从头开始,想不出一种方法让地形成为障碍,这样车辆就不会直接穿过它。我怎样才能让他们受到坠落伤害?

过去人们把我引向复制岛源,因为它已经在里面了,我看到了整个碰撞系统,但到目前为止我还无法理解它,我希望有人愿意帮我一把。

谢谢

-罗芙拉

0 投票
1 回答
1770 浏览

pygame - Pygame,简单的物理引擎,如何保持平面之间的点?

我正在尝试用 Pygame(Python) 编写教程,但遇到了关于在平面之间保持点的问题。

我的代码是:fiz2.py

矢量类:vector.py

如果您在 Pygame 屏幕上移动鼠标,平面将旋转。当平面旋转时,点会穿过平面并向外移动。

我试图在每次迭代中固定点的位置,但它们仍然通过了平面。我不知道我应该在哪里固定他们的位置。

注意:我知道我的代码有点乱,这是我的第一个 2d 程序,我很难习惯 Pygame 的坐标平面和向量。当我解决这个问题时,我会重新写。

NOTE2:是的,我在教程中写了关于如何在平面之间保持点的评论,我理解他固定位置的方式,但不知道如何(以及在​​代码中的何处)实现它。

谢谢。

0 投票
1 回答
1995 浏览

game-physics - 非常基本的碰撞解决与 verlet 集成

我正在学习如何为自己的娱乐做一些非常基本的物理东西,但我遇到了一个奇怪的问题。

我正在使用http://www.lonesock.net/article/verlet.html上描述的时间校正的 verlet 集成方法,到目前为止,它工作得很好。动作和东西看起来都不错。

我的问题发生在碰撞解决方面。我可以解决(看起来相当好)地形,因为地形不会移动。我只是将玩家的当前位置设置到一个安全的位置,事情似乎还不错。然而,当我尝试解决另一个精灵(物理演员等)时,事情似乎到处都是。

我的分辨率代码如下所示:

可以看出,有三种情况,取决于碰撞的精灵是否是物理的。

这很可能是第一个有问题的案例;我在这里使用相同的功能来获得穿透深度,就像我在(看似有效的)地形碰撞中一样。

为什么碰撞的精灵会飞得满地都是?我对这个问题感到很困惑。任何帮助都会很棒。

0 投票
2 回答
1123 浏览

cuda - 物理引擎所需的建议

我最近开始了一个项目,构建一个物理引擎。我希望你能给我一些与一些文档和/或最好的技术相关的建议。

首先,我已经看到强烈建议将Game-Physics-Engine-Development用于手头的任务,我想知道您是否可以给我第二个意见。我应该接受吗?另外,在浏览亚马逊时,我偶然发现了 游戏引擎架构,因为我想为游戏构建我的物理引擎,所以我认为这也可能是一本好书。

其次,我知道模拟物理是高度计算密集型的,所以我想使用 CUDA 或 OpenCL。现在我倾向于 OpenCL,因为它适用于 NVIDIA 和 ATI 芯片组。你们有什么建议?

PS:我将在 Linux 上用 C++ 实现这个。

谢谢。

0 投票
1 回答
106 浏览

math - 等长函数

我计划在 GPU 中加入弯曲技术。就像弯曲一根棍子。它不必做真正的物理,但我确实希望弯曲函数(置换顶点)具有相等的长度。

我的功能将由 2 个组件构成:

  • 摇杆的 y 位置
  • 对棍子的力(一般,不是在特定的地方,如风)

我正在向 x 方向弯曲。我可以创建一些x = y * force公式,但问题是这会使对象的长度变形。

如何使对象变形,但保持其实际长度?如何限制我的功能?

或者以另一种方式:

如何调整多项式函数的幂,同时将长度保持在 y 区间内?例如。[0,1]

0 投票
2 回答
1324 浏览

c++ - 尝试使用模板双重调度物理碰撞

我想让编译器为物理碰撞系统建立函数连接。我有测试碰撞功能:

然后我使用一个对撞机对象来保存碰撞对象。

我为效果函数添加了一个间接级别

我最终想要的是一种在具有正确函数签名但不需要不会命中的类型的任何对象中调用函数的方法。

请注意,我不希望有一个墙撞墙的功能。我只想为应该发生的交互编写或提供函数。我知道这不起作用,因为 VictimEffect 没有“看到”派生函数。

我想分派而不必在使用它们的任何地方指定模板参数。我想在可碰撞之外构建我的可碰撞效果,并将其一般地赋予可碰撞对象。我不想为每个可以碰撞的事物集合使用不同的可碰撞对象。基本上我想要

我在这里需要更多的间接层,但我看不到它。我知道这是可以做到的,因为所有信息在编译时都可用。不需要动态多态解决方案。

任何帮助是极大的赞赏!

更新 我想做的是建立我自己的现代(如安德烈的书)游戏库。到目前为止,我已经解决了大部分关系,但这一个让我难过。这不是时间关键问题,而是结果关键问题。我从事游戏工作很多年了,我不喜欢我从事过的任何游戏引擎。这意味着易于使用且易于扩展。既然控制台编译器变得不那么糟糕,它就可以在任何平台上运行。

这是我想要写的一个简单的例子。

所有的物理都是在制品,不是我希望它结束​​的地方,但它正在到达那里。System object 初始化 Windows 和平台特定的渲染器。在这种情况下,它是 openGL。尽管它被编译为控制台应用程序,但它会创建所有 Windows 组件。我不想让人们处理 main() 与 winmain()。除了物理,没有继承。在我将场景导入系统后,三个渲染调用将被替换为一个。我计划使用我不久前写的东西,结合 Gary Powell 和 Martin Weiser 的 View 模板库。

我知道我只是看不对。访客可以帮助改变我的方法。

所以这就是我想要做的。

更新 2 好的。到目前为止,我已经从评论和答案中获得了一些灵感,这就是我去的地方,但我还没有完成。

然后使用它我这样做

无所不在是对的。通过传入基础,我丢失了类型信息。现在基地在那里只是为了捕捉我不关心的东西。

对于我的容器,我认为我可以使用类型列表来收集添加到容器中的每种类型,并使用它来声明类型特定的容器,然后处理信息。一个问题是我不能取出普通的迭代器,传递函数对象会更容易。

也许 C++ 0X 可以帮助解决这个新的未知类型变量。(我忘记它叫什么了)。

0 投票
1 回答
894 浏览

android - AndEngine物理联合

我在 Android 上使用 AndEngine,

当我创建一个场景时,我在那里放置了两个物理对象,我希望它们在移动时始终保持相同的距离。

我尝试使用DistanceJoint,但我不明白如何设置它的长度。这个长度不是以像素为单位的......我想设置:distancejoint.length = "distance between objects in scene initialization"

0 投票
2 回答
569 浏览

physics - 如何计算既在转动又在加速的物体的位置?

我正在尝试编写一个简单的游戏,但我坚持我认为是简单的物理。我有一个物体,它在点 0,0,0 并且以每秒 1 个单位的速度行进。如果我给出一个指令,物体必须每秒转动 15 度,持续 6 秒(所以它最终在它的起始位置右侧 90 度),并以每秒 1 个单位的速度加速 4 秒(所以它的最终速度是 5单位每秒),我如何计算它的终点?

我想我知道如何为一个没有加速的物体回答这个问题,因为它只是一个圆圈。在上面的例子中,我知道圆的周长是 4 * 距离(因为它遍历圆的 1/4),由此我可以计算出半径和角度,并使用简单的三角函数来解决答案。

但是,因为在任何给定时刻,物体的行进速度都比前一时刻稍快,所以我的最终结果不会是圆,而是某种弧线。我想我可以通过循环每一步(比如每秒 60 步)来估计终点,但这听起来容易出错且效率低下。

有人能指出我正确的方向吗?