我正在尝试制作一个游戏,你有一个旋转到鼠标位置的炮塔,并且点击是向鼠标位置射击子弹。问题是使用我的方法(下面)不会使子弹直线,因为它们只能向上,向下和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);
}
}
答案 0 :(得分:0)
通过将子弹速度保持在数组中,您可以轻松解决方向问题:
int[] bulletVelocity = {vx, vy};
其中vx是x方向的速度,同样是vy的y。这些将决定您在每个计时器滴答时更改子弹x和y位置的数量。
为了让它们始终朝向子弹飞行,您需要注册点击位置并使用相关的子弹持有它。一种解决方案是使用子弹class
并使用Point
对象,您可以在其中设置鼠标单击位置。
您还可以使用此Point
来设置项目符号的初始速度,例如: x和y将与子弹的x和y分量以及点击的不同成比例。