c#中的子弹方向

时间:2014-04-14 09:15:01

标签: c# game-physics mousemove

我正在尝试制作一个游戏,你有一个旋转到鼠标位置的炮塔,并且点击是向鼠标位置射击子弹。问题是使用我的方法(下面)不会使子弹直线,因为它们只能向上,向下和45度对角方向。此外,我无法想办法让子弹在到达鼠标位置后继续前进。我怀疑我对问题的整体解决方法可能是错误的...(因为我对c#相当新)。任何帮助将不胜感激,谢谢。

private void timer1_Tick(object sender, EventArgs e)
{
 int x = pictureBox1.Location.X;
 int y = pictureBox1.Location.Y;
 if (pictureBox1.Location.X < Cursor.Position.X - pictureBox1.Width / 2)
 {
     x = x + 3;
     pictureBox1.Location = new Point(x, y);
 }

 if (pictureBox1.Location.X > Cursor.Position.X - pictureBox1.Width / 2)
 {
     x = x - 3;
     pictureBox1.Location = new Point(x, y);
 }

if (pictureBox1.Location.Y > Cursor.Position.Y - pictureBox1.Height / 2)
 {
     y = y - 3;
     pictureBox1.Location = new Point(x, y);
 }

if (pictureBox1.Location.Y < Cursor.Position.Y - pictureBox1.Height / 2)
 {
     y = y + 3;
     pictureBox1.Location = new Point(x, y);
 }
}

1 个答案:

答案 0 :(得分:0)

通过将子弹速度保持在数组中,您可以轻松解决方向问题:

int[] bulletVelocity = {vx, vy};

其中vx是x方向的速度,同样是vy的y。这些将决定您在每个计时器滴答时更改子弹x和y位置的数量。

为了让它们始终朝向子弹飞行,您需要注册点击位置并使用相关的子弹持有它。一种解决方案是使用子弹class并使用Point对象,您可以在其中设置鼠标单击位置。

您还可以使用此Point来设置项目符号的初始速度,例如: x和y将与子弹的x和y分量以及点击的不同成比例。