问题标签 [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 回答
637 浏览

silverlight - 多边形碰撞检测silverlight

这不是关于碰撞检测的通用问题,所以请阅读到最后。

在我的 wp7 游戏中,我将所有对象表示为矩形,并使用 Intersect() 方法检查 2 个矩形之间的碰撞,效果很好。

我正在考虑通过将对象绘制为多边形而不是矩形来提高准确性。

是否有适用于 Polygons 的内置 api,例如 Rect.Intersect() ?

更一般的问题:除了 Rect.Intersect() 之外,还有没有更好的方法,它利用 .net api 并且涉及实现碰撞检测算法?

0 投票
1 回答
561 浏览

java-me - 关于 大理石迷宫游戏

我正在做j2me中的大理石迷宫游戏项目。我面临与球的运动和控制相关的问题。

我正在使用的代码是

现在我面临的问题是如果我降低速度示例:-通过写ballx+=4;ballY+=4 OR ballx-=4;ballY-=4,然后我可以控制我的球

如果我将速度保持在 10,那么我将无法控制我的球。简而言之,我只能获得一件事的速度或控制。

但我想做速度和控制。

0 投票
2 回答
674 浏览

animation - 谁知道如何实现游戏中显示的 2D 骨骼动画?

我想知道他们如何在 Flash 游戏中实现骨骼动画http://www.foddy.net/athletics.swf 你知道我可以从哪些学习资料开始学习 2D 骨骼系统吗?我刚刚实现了一个头像系统,通过在每一帧中合成多个位图(类似于枫叶故事),但是有些人告诉我,骨骼系统可以节省更多的美术资源,所以我想学习一些关于它的东西。

0 投票
2 回答
5486 浏览

android - 计算与 2D 线段的倾斜或倾斜墙壁碰撞后移动球的角度

如果您在 2D 多边形内有一个“球”,由 4 个充当边界墙的线段组成,您如何计算球与不规则倾斜的墙碰撞后的角度?

如果墙壁是水平的、垂直的或呈 45 度角,我知道如何让球反弹。我还设置了代码来检测与墙壁的碰撞。

我读过点积和法线,但我不知道如何在 Java / Android 中实现这些。我完全被难住了,感觉我现在已经在 Google 中查找了 10 页深度的所有内容 10 次。我已经筋疲力尽地试图弄清楚这一点,我希望有人能提供帮助。

0 投票
3 回答
3504 浏览

graphics - 2D 平台游戏:为什么让物理依赖于帧率?

“Super Meat Boy”是最近推出的 PC 难度平台游戏,需要出色的控制和像素级完美跳跃。游戏中的物理代码依赖于帧率,锁定为60fps;这意味着如果您的计算机无法全速运行游戏,物理会变得疯狂,导致(除其他外)您的角色运行速度变慢并跌倒在地。此外,如果关闭垂直同步,游戏运行速度非常快。

那些有 2D 游戏编程经验的人能否帮助解释为什么游戏是这样编码的?以恒定速率运行的物理循环不是更好的解决方案吗?(实际上,我认为物理循环用于游戏的某些部分,因为某些实体会继续正常移动,而不管帧速率如何。另一方面,您的角色运行速度正好 [fps/60]。)

这个实现困扰我的是游戏引擎和图形渲染之间的抽象损失,这取决于特定于系统的东西,如显示器、显卡和 CPU。如果,无论出于何种原因,您的计算机无法处理垂直同步,或者无法以 60fps 的速度运行游戏,它就会严重崩溃。为什么渲染步骤会以任何方式影响物理计算?(现在的大多数游戏要么减慢游戏速度,要么跳帧。)另一方面,我知道 NES 和 SNES 上的老式平台游戏在大部分控制和物理方面都依赖于固定的帧速率。为什么会这样,是否有可能在不依赖帧率的情况下以这种方式创建一个patformer?如果将图形渲染与引擎的其余部分分开,是否必然会损失精度?

谢谢,如果问题令人困惑,对不起。

0 投票
3 回答
332 浏览

math - 3d房间中2条曲线的碰撞点

我正在编写一个小游戏很长一段时间。我们开始在学校的一个项目中编写一个小型 FPS-Shooter,以获得一些使用 directX 的经验。我不知道为什么,但我无法停止该项目并开始在家编程。目前我正在尝试创建一些小型 AI。当然,这绝对不容易,但那是我的个人目标。该主题可能会填满多本书,呵呵。到目前为止,我已经完成了我的机器人的行走部分。他们沿着一条刻划的小路行走。我不是在研究机器人的“瞄准”。在编程时,我遇到了一些我还无法解决的数学问题。我希望你的意见能帮助我走得更远。概念、想法和其他一切都受到高度赞赏。

问题:计算弹丸曲线(取决于重力、速度)的位置(D3DXVECTOR3),击中敌人行走路径的曲线(取决于速度)。我们假设敌人走在一条恒定的路线上。

已知变量:

变量定义

我的尝试:在维基百科上找到了一个计算“下落”(基于重力的弹丸下落)的公式:

弹丸的速度有水平部分和垂直部分。在维基百科上也找到了一个公式:

所以我认为这对于弹丸曲线是正确的:

目标以恒定的速度行走,因此我们可以通过以下方式确定他的曲线:

现在我不知道如何继续。我必须以某种方式解决它,以抓住时间以某种方式产生影响。作为一个基本公式,我可以使用:

但这不会是真正正确的,因为它会假设一个线性的“轨迹”。我们只是在使用火箭时才发现这种行为。

我希望我能够尽可能地解释这个问题。如果还有问题,请随时问我!

来自德国的问候,弗兰克


编辑:

主要问题是我无法计算碰撞时的敌人位置,因为直到碰撞发生之前我没有时间过去。另一方面,我无法在不知道碰撞时敌人位置的情况下计算时间。也许迭代方法可以解决这个问题。

曲线敌人:

曲线弹丸:pos(t).y = pos(0).y ​​+ sin(theta) * 速度 + 0.5 * 重力 * 时间 * 时间

pos(t).x 和 pos(t).z 不确定如何在 (x 和 z) 中计算基本上定义了前向.. 不仅仅是 x..

在不知道时间的情况下无法计算敌人..我无法在不知道角度(θ、俯仰/偏航)以及到“未来”撞击点的距离的情况下计算时间

0 投票
3 回答
1215 浏览

algorithm - 游戏的运动算法

我目前正在为 COD4 中的地图开发脚本。我认为该语言是如此简单,以至于我将其标记为与语言无关,因为问题在于这种情况的算法。

有一个960单位宽的房间。在它里面中间有一个物体,我们将其视为轴。每次击球时,球都应该移动到一个随机位置,但不应超过墙壁。这是一个图表:

图片

据我所知,游戏的 API 只允许相对于其位置移动对象,所以这是我想出的代码。问题是,在第二次调用 head_move() 之后,它开始产生意想不到的结果,这让我很头疼。有人可以帮帮我吗?

运动思考():

编辑: 只是为了澄清。当用户射球时,它的位置会改变到某个值。现在,如果他再次击球,随机整数生成器的最小值和最大值应该改变,以防止球移动到墙外。例子:

  1. 级别开始。球在房间中央。最小和最大范围分别为 -480 和 480
  2. 用户击球,球移动了 -200 个单位(向左 200 个单位)。
  3. 现在,最小和最大范围应该是 -280 和 680。

我希望这足够清楚。

编辑 2:按照 FlipScript 的建议编辑标志。这是 log2screen 函数的输出,实际发生了什么:

  1. 最小值:-480 和最大值 480。移动 67
  2. 最小值:-413 和最大值 547。移动 236
  3. 最小值:-244 和最大值 716。移动 461

只是一个示例案例。我相信有些事情是倒退的,这些不是正确的计算。

0 投票
1 回答
526 浏览

c++ - Box2d 碰撞。物体变形

我正在开发一个使用 Box2d 的应用程序。我有一个有几个块的世界和一个与它们发生碰撞的物体。在碰撞开始的那一刻,物体开始改变它们的形状,它们变得更大。是什么原因造成的。

我正在以固定位置和睡眠状态创建身体。还有 shapeDef->friction = 0.8f; shapeDef->密度= 1.0f;shapeDef->restitution = 0.2f;

也许我没有使用正确的物理参数,我不想要那种变形。只是运动和身体保持原来的形式。

0 投票
8 回答
141 浏览

c - 简单递归帮助

我有一个简单的递归函数,它使用 0.98 的高度 1:高度 2 的比率计算简单的钟摆摆动衰减。

该函数的基本情况为 0.0,但由于某种原因,它变成了无限的自调用!

谁能发现我错过了什么?

代码:

mIL3S www.milkdrinkingcow.com

0 投票
2 回答
10426 浏览

algorithm - KDTree拆分

我目前正在为物理引擎(爱好项目)编写 KDTree。

KDTree 不包含点。相反,它包含 Axis Aligned 边界框,用于绑定环境中的不同对象。

我的问题是决定如何在 KDTree 节点满时拆分它们。我正在尝试两种方法:

方法1:始终在最大轴上将节点精确地分成两半。

  • 这具有相当均匀间隔的树的优点。
  • 大缺点:如果对象集中在节点的小范围内,会产生多余的细分。这是因为所有卷都被精确地分成两半。

方法2:找到包含对象的节点区域。拆分平面上的节点,该平面在其最大轴上将该区域分成两半。示例 - 如果所有对象都集中在节点的底部,则它会纵向拆分,从而将底部一分为二。

  • 这解决了上面方法的问题
  • 当索引存在于同一平面(例如地形)上的东西时,它会创建又长又窄的节点。如果稍后我要添加一些不在同一平面上的其他对象,这些细长节点提供的索引非常差。

所以我在这里寻找的是一种更好的方法来分割我的 KD-Tree 节点。考虑到这将是一个物理引擎,决策需要足够简单以便实时做出。