如何将二维引力效应应用于精灵

问题描述 投票:0回答:1

在2D无限空间内,我有两个圆形精灵,代表了外太空中的巨大物体。

每个身体都有一对xy坐标,massspeeddirection(弧度)。

在每个动画帧上,我为每个主体运行以下代码(其中this是正在更新的主体,other是另一个主体):

x, y = other.x - this.x, other.y - this.y

angle = atan2(y, x)
distance = root(square(x) + square(y))
force = this.mass * other.mass / square(distance)

注意:我忽略了G,因为它只是一个乘数。

我知道如何根据它们的坐标,速度和方向移动物体,但不知道如何更新this.speedthis.direction来模拟重力。

math 2d game-physics
1个回答
1
投票

作用于给定物体的重力表示为矢量,并产生加速度的成分(axay),这些是基于你已经拥有的成分计算的:

squared_distance = square(x) + square(y)
distance = sqrt(squared_distance)

accel = other.mass / squared_distance    
ax = accel * x / distance 
ay = accel * y / distance

请注意,不需要angle(力/加速度方向)。

每个身体应该有一个相关的速度(而不是speed),它应该是一个双组分矢量(vxvy)。它是这样更新的(其中dt是更新之间的时间间隔):

this.vx += ax * dt
this.vy += ay * dt

一旦更新了给定物体的速度,就可以重新定位(更新其xy坐标),如下所示:

this.x += this.vx * dt
this.y += this.vy * dt

如果需要,您可以计算速度和方向,但这里不需要它们。

© www.soinside.com 2019 - 2024. All rights reserved.