Java-突破物理?
我正在创建一个突破游戏,我以前在这里问过一个问题,但没有提出解决方案。我有一个简单的物理模型来反转球与桨碰撞时的Java-突破物理?,java,physics,slick2d,breakout,Java,Physics,Slick2d,Breakout,我正在创建一个突破游戏,我以前在这里问过一个问题,但没有提出解决方案。我有一个简单的物理模型来反转球与桨碰撞时的Y速度。 但我需要实现一个更先进的物理系统,例如,当球击中球拍的左侧和右侧时,等等。。。但我如何计算碰撞后球的方向?突破的标准是在与球拍左侧碰撞时将球指向左侧,如果碰撞是在右侧,则指向右侧,等等 我如何计算在哪里击球? 我有很多变量可以使用,比如桨叶的各个方面(宽度、高度、X位置)、球(半径、高度、宽度、X和Y速度、X位置、Y位置等等)我通过使用鼠标监听器,从旧的X位置减去新的X鼠标位
Y
速度。
但我需要实现一个更先进的物理系统,例如,当球击中球拍的左侧和右侧时,等等。。。但我如何计算碰撞后球的方向?突破的标准是在与球拍左侧碰撞时将球指向左侧,如果碰撞是在右侧,则指向右侧,等等
我如何计算在哪里击球?
我有很多变量可以使用,比如桨叶的各个方面(宽度、高度、X
位置)、球(半径、高度、宽度、X
和Y
速度、X
位置、Y
位置等等)我通过使用鼠标监听器,从旧的X
位置减去新的X
鼠标位置,得到了拨片的运动,这样我就可以看到拨片移动的速度和方向
这里有谁熟悉基本物理知识,能帮我计算出碰撞后球的轨迹、路径、速度或方向吗
提前谢谢。我们一直在为学校准备突破赛。我们就是这样做的。请注意,这是一个Ball类中的内容,所以每次看到这个think Ball时 以下反弹方法计算并应用 速度和旋转因球的反弹而改变。
“系数”表示如何转换速度 x和y方向进入平行于曲面的速度。如果我们 调整视图方向,使球向下移动到表面, 如果移动方向为垂直,则平行于曲面的速度为正 对 这些方程式是根据下列物理分析得出的: Richard L.Garwin,“超弹性粗糙球的运动学”, 《美国物理学杂志》,3788-921969年1月。这就决定了 具有自旋的完全弹性球(弹性碰撞)的行为 弹跳时不会滑动。真实世界的模拟是 Wham-O的超级球产品 我们进行了两项修改/专门化: 1) 因为我们在二维空间中工作,所以我们的“球”是一个圆盘。这 产生转动惯量 1/2*M*R^2 。在 加温的论文,这意味着α=1/2。 Garwin不考虑与移动表面碰撞。然而, 通过考虑相对于物体的运动来调整物体是很容易的 移动曲面的框架。我们只需减去速度 曲面从球的平行运动开始计算之前是什么 在碰撞中发生,然后将速度添加回 按照Garwin的表示法,我们最终得出:
Ca = -1/3 Cb - 4/3 Vb + 4/3 Vs
Va = -2/3 Cb + 1/3 Vb + 2/3 Vs
这里Va和Vb是平行于表面的球的速度
分别在碰撞后和碰撞前。Vs是速度
表面。Ca和Cb是球的R*旋转,前后
分别是碰撞。(用加温的表示法,C=R*omega,
其中ω是自旋。)
如果您不喜欢这样的高级物理,并且满足于类似台球的行为,那么可以使用您最喜欢的方法计算碰撞点处的曲面法线(nx,ny)(按照nx²+ny²=1或nx=cos(a),ny=sin(a)进行赋范),并按照中的方式更改方向
dot = nx*vx+ny*vy
vx = vx - 2*dot*nx
vy = vy - 2*dot*ny
这是一个几乎静止的桨。对于移动的桨叶,按照建议操作,首先从vx中减去桨叶速度pvx,计算点积和产生的变化,然后将桨叶速度相加。或者只在点积中进行减法,而不改变vx:
dot = nx*(vx-pvx)+ny*vy
vx = vx - 2*dot*nx
vy = vy - 2*dot*ny
球拍是矩形的吗?是的,我有它的位置坐标,还有我提到的,它的所有属性。所以如果球碰到矩形的垂直边,你只需要反转它速度的X分量;如果它碰到水平面,则反转Y分量。这就是你要问的吗?或者你是想处理桨在动的情况吗?还有。。。你想考虑球和桨的相对质量吗?换句话说,球到底撞到了桨叶还是桨叶足够重(球足够轻),以至于桨叶本身不受碰撞的影响?仅供参考,您拥有的每一条内联注释实际上都应该是单独方法上的javadoc注释。您在
bounce
函数中做的事情太多了,需要将其拆分为多个函数。@Ajmansfield哇。仅供参考,这是一个很小的方法。没有必要再打破它,因为它只做一件事。这是一个单一算法的实现。我们将不需要在程序中的任何其他地方重复使用该程序的任何部分。谢谢你的意见。
dot = nx*(vx-pvx)+ny*vy
vx = vx - 2*dot*nx
vy = vy - 2*dot*ny