我制作的游戏中物体需要以某种方式加速和减速。
我有5个变量:
基本上,我想要一个方程式,当期望值为10,0和-10时,可以将valX加速到desiredValX,此时每秒调用128次。和基于Y的变量的相同方程式。
我真的不知道如何为这些问题生成方程式,所以对此的一些见解也会受到赞赏。
这是我目前的代码:
public class Player {
private double x;
private double y;
private double velX;
private double velY;
private double desiredVelX;
private double desiredVelY;
private double accelTime = 128 / 2; //Half second to accelerate fully
public Player(double x, double y, Game g)
{
this.x = x;
this.y = y;
}
public void tick()
{
if(velX!=desiredVelX){
*Equation*
}
if(velY!=desiredVelY){
*Equation*
}
x+=velX;
y+=velY;
}
public void accel(boolean d, double speed){
if(d){desiredVelX = speed;}
else{desiredVelY = speed;}
}
}
答案 0 :(得分:1)
我看到你已经回答了这个问题,但我只想提出一个小改动。尝试使用一个名为acceleration的变量并在每一帧中添加它。
所以当你第一次开始加速时,
acceleration = (desiredVelX - velX)/accelTime
然后在循环中
velX = max(min(velX + acceleration, desiredVelX), 0)
这将为您提供恒定的加速度,然后在达到最大值后停止加速。最小和最大通话确保您不会超出限制。之后如果您决定增加最大速度,它将很容易处理,而不需要为每个最大速度提出新的加速度常数。
基于力和重量的逼真物理
在现实世界中,加速度受力和重量的限制。在汽车中,发动机输出F力并称重W.此车的加速度则为F / W.
根据您的游戏,您可能还有其他需要更改速度的物体。有些人可能比其他人更重或更大,或者拥有比其他人更多的力量。
force = 5 # Your force here
acceleration = force / weight
然后将其插入另一个等式中,现在根据您加速的物体的重量有不同的加速度。
基于真实物理学的速度和加速度将有助于实现爆炸,重力炸弹,浮动平台,子弹反弹等等。现实的物理学并不总是令人满意,所以你可能不会想要这个,但我想我会无论如何都要建议。