【发布时间】:2013-06-26 18:59:50
【问题描述】:
我试图在我的 XNA 游戏中投掷箭,但我很难实现一条好的抛物线。
我需要什么:
- 您按住 Enter 的次数越多,箭头越强。
- 箭头角度始终保持不变,45 度。
这是我已经拥有的:
private float velocityHeld = 1f;
protected override void Update(GameTime gameTime)
{
if (Keyboard.GetState().IsKeyDown(Keys.Enter) && !released)
{
timeHeld += velocityHeld;
holding = true;
}
else
{
if (holding)
{
released = true;
holding = false;
lastTimeHeld = timeHeld;
}
}
if (released && timeHeld > 0)
{
float alpha = MathHelper.ToRadians(45f);
double vy = timeHeld * Math.Sin(alpha);
double vx = timeHeld * Math.Cos(alpha);
ShadowPosition.Y -= (int)vy;
ShadowPosition.X += (int)vx;
timeHeld -= velocityHeld;
}
else
{
released = false;
}
}
我的问题是,我需要怎么做才能使箭头在失去速度 (timeHeld) 时落到底部以形成完美的抛物线?
【问题讨论】:
-
提示:在地球上,抛出的物体往往会形成抛物线,因为重力引起的加速度会不断改变物体的y速度。
-
我明白了,所以你是在告诉我,我需要实现重力方法对吧?
-
在尝试创建逼真的运动时使用重力通常是个好主意。
-
如果它们总是以 45 度启动,你最好计算一次 math.sin(45 度) 和 math.cos(45 度) 并作为最终结果,例如 final double angular_component = 1 /math.sqrt(2d)
标签: c# algorithm xna game-physics projectile