
我有AABB碰撞解决方案的问题.
我通过首先解析X轴然后解析Y轴来解析AABB交叉点.这样做是为了防止这个错误:http://i.stack.imgur.com/NLg4j.png
当对象进入播放器并且必须水平推动播放器时,当前方法工作正常.正如你在.gif中看到的那样,水平尖峰正确地推动了玩家.
但是,当垂直尖峰移动到播放器中时,X轴仍然首先被解析.这使得"使用尖钉作为升力"是不可能的.
当玩家进入垂直尖峰(受重力影响,落入其中)时,他被推到Y轴上,因为X轴上没有重叠开始.
我试过的东西是这个链接的第一个答案中描述的方法.然而,尖峰和移动物体通过改变位置而不是速度来移动,并且在调用Update()方法之前我不计算它们的下一个预测位置.不用说这个解决方案也不起作用.:(
我需要以上述两种情况都按预期工作的方式解决AABB碰撞问题.
这是我目前的碰撞源代码:http://pastebin.com/MiCi3nA1
如果有人可以调查一下,我会非常感激,因为这个错误从一开始就一直存在于引擎中,我一直在努力找到一个好的解决方案,但没有任何成功.这让我花了很多时间看着碰撞代码并阻止我进入"有趣的部分"并编写游戏逻辑:(
我尝试实现与XNA AppHub平台演示中相同的碰撞系统(通过复制粘贴大部分内容).然而,"跳跃"错误发生在我的游戏中,而在AppHub演示中却没有.[跳跃的bug:http://i.stack.imgur.com/NLg4j.png ]
要跳转我检查播放器是否为"onGround",然后将-5添加到Velocity.Y.
由于玩家的Velocity.X高于Velocity.Y(参考图中的第四个面板),onGround在不应该的时候设置为true,因此让玩家在半空中跳跃.
我相信这不会发生在AppHub演示中,因为玩家的Velocity.X永远不会高于Velocity.Y,但我可能会弄错.
我先解决了这个问题,首先解析X轴,然后解决Y轴问题.但是,正如我上面所说的那样,它会加剧与尖钉的碰撞.
发表于游戏开发:用于平台游戏的2D物理引擎 - 骑在平台上
我有很多关于在平台游戏中使用2D物理引擎的问题,但是我正在努力解决的一个主要问题.我设法将Physics2D.Net引擎集成到Scrolling Game Development Kit 2项目中.我对物理学的表现和现实感到非常满意.但是,我失去了一些东西,我原来的SGDK2物理引擎(更专门针对平台游戏)变得更容易:
我希望获得Android手机的加速度矢量.问题是,加速度计坐标是相对于手机的旋转.我想要的是"绝对"加速度,即无论手机面对哪种方式,都应该返回相同的值.(我想检测一下滑雪的用户是否在不使用GPS的情况下滑下斜坡.我还需要能够区分滑行和上升的缆车.)
我可以通过将加速度计与陀螺仪相结合来获得这些值,但我不知道如何用陀螺仪来抵消加速度计的值.
这是可能的,如果是的话,怎么样?
是否有可能从RGB表示中获得颜色的光频率?我找到了相反的过程[1],但我不知道这是否可能.
我正在玩一个迷你高尔夫游戏,使用three.js和弹药物理库的ammo.js转换,但是我在让球实际移动方面遇到了一些麻烦.
(我在penguinspuzzle.appspot.com/minigolf.html上放了一个演示,如果你想看看它在实践中是如何工作的.)
什么是一个很好的算法,以提供迷你高尔夫球的更逼真的运动?
在ammo.js中,有摩擦,线性阻尼和旋转阻尼选项.
当球滚动时,摩擦设置似乎没有太大影响.
我正在使用
body.setRestitution(0.8);
body.setFriction(1);
body.setDamping(0.2,0.1); // linear damping, rotational damping
Run Code Online (Sandbox Code Playgroud)
由于线性阻尼值较高,球似乎减速得太快.
价值较低似乎需要很长时间才能最终停止.
当球在空中时,完全应用线性阻尼似乎是不合理的.
我认为问题可能是ammo.js中的线性阻尼导致指数减慢.
我试过了:
结果如下所示.在我看来,速度曲线更接近于线性而非指数.
有什么建议让算法让ammo.js更加真实吗?

我正在尝试使用一系列谐波振荡器对一维波进行简化模拟.根据教科书的说法x[i],第i个振荡器位置的微分方程(假设均衡x[i]=0)证明了这个:
m*x[i]''=-k(2*x[i]-x[i-1]-x[i+1])
(导数是时间)所以我试图用以下算法数值计算动力学.这osc[i]是第i个振荡器作为具有属性loc(绝对位置),vel(速度),acc(加速度)和bloc(平衡位置)的对象,dt是时间增量:
for every i:
osc[i].vel+=dt*osc[i].acc;
osc[i].loc+=dt*osc[i].vel;
osc[i].vel*=0.99;
osc[i].acc=-k*2*(osc[i].loc-osc[i].bloc);
if(i!=0){
osc[i].acc+=+k*(osc[i-1].loc-osc[i-1].bloc);
}
if(i!=N-1){
osc[i].acc+=+k*(osc[i+1].loc-osc[i+1].bloc);
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看算法,只需单击即可向第6个振荡器发出脉冲.你可以看到它不仅不会产生波浪,而且还会产生一个总能量增加的运动(即使我加了阻尼!).我究竟做错了什么?
我试图根据菲克第二定律模拟一个简单的扩散.
from pylab import *
import numpy as np
gridpoints = 128
def profile(x):
range = 2.
straggle = .1576
dose = 1
return dose/(sqrt(2*pi)*straggle)*exp(-(x-range)**2/2/straggle**2)
x = linspace(0,4,gridpoints)
nx = profile(x)
dx = x[1] - x[0] # use np.diff(x) if x is not uniform
dxdx = dx**2
figure(figsize=(12,8))
plot(x,nx)
timestep = 0.5
steps = 21
diffusion_coefficient = 0.002
for i in range(steps):
coefficients = [-1.785714e-3, 2.539683e-2, -0.2e0, 1.6e0,
-2.847222e0,
1.6e0, -0.2e0, 2.539683e-2, -1.785714e-3]
ccf = (np.convolve(nx, coefficients) / …Run Code Online (Sandbox Code Playgroud) python physics numpy scientific-computing differential-equations
我有一个Unity项目,其中有一个由静态对撞机组成的2D游戏世界,可以使几何体与居住它的角色保持一致.该玩家是一个动态对撞机(具有非运动刚体).还有一个敌人角色,也是一个动态对撞机.两个角色都走过地板,像我期望的那样碰到墙壁.
我想要达到的目标是玩家和敌人彼此之间并不牢固,所以他们可以互相移动.我通过将敌人和玩家放在不同的图层上并设置碰撞矩阵来实现这一点,这样这些图层就不会相互碰撞.然而,我现在遇到的问题是我确实想要检测敌人和玩家是否碰到了对方.我为敌人角色添加了一个触发器对撞机,它位于敌人层,这意味着它不会检测到与玩家的碰撞.
我想为敌人制作一个子游戏对象,把它放在玩家的层上,添加一个刚体并触发对撞机并使用它来检测玩家和敌人之间的碰撞,但感觉如此令人费解以至于让我感到疑惑如果没有更优雅的解决方案.
我已经研究了这个问题了几个小时,由于某种原因,我一直无法找到解决方案。
给定一个凸多边形,该多边形定义为围绕多边形质心按顺时针顺序排列的点数组,如何计算多边形的惯性矩?
我已经能够找到各种形状的方程,例如矩形或圆形,但是找不到任意的凸多边形。
例如,以质量m,高度h和宽度w绕其质心旋转的矩形的惯性矩计算如下:

我正在寻找类似的公式/算法,但要寻找凸多边形。
我正在尝试计算撞到撞球的角度并预测去向何方。我以为目标球应该在法线方向上移动。但是它的方向却完全不同。
RaycastHit2D hit = Physics2D.CircleCast(cue.position, _radius, dir, 100f, ~(ignoreLayer));
if (hit.collider != null)
{
Debug.DrawRay(hit.collider.transform.position, -1f * hit.normal,
Color.green, Time.fixedDeltaTime);
}
Run Code Online (Sandbox Code Playgroud)
结果如下:

设定速度
rb.velocity = dir * force;
Run Code Online (Sandbox Code Playgroud)
结果:

如何找到确切的移动方向,谢谢
编辑:
我已经尝试过双半径铸造仅在一半时有效..仅当射线在内圆内时
physics ×10
2d ×3
algorithm ×3
c# ×2
game-physics ×2
ammo.js ×1
android ×1
billiards ×1
colors ×1
frequency ×1
gyroscope ×1
javascript ×1
numpy ×1
python ×1
raycasting ×1
rgb ×1
trigonometry ×1