using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Don_tgetthatcincp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
void shoot() //shoot funtion
{
bullet.Left += 50;
if (bullet.Left > 50)
{
bullet.Image = Properties.Resources.bullet;
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
while (e.KeyCode == Keys.Space)
{
shoot();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
shoot();
}
}
}
我正在用C#的windows窗体创建一个简单的射击游戏,但问题是,我的游戏在运行时只射击一次。每次我按空格键时,它都不产生子弹。你能帮我吗?谢谢。这是我的代码。
1条答案
按热度按时间qij5mzcb1#
您在
Tick
事件行程常式中呼叫shoot
,但从未呼叫Timer
Start
,因此永远不会引发Tick
事件。你应该在
KeyDown
上启动Timer
,在KeyUp
上停止它。我还刚刚意识到你有一个while
循环,而不是一个if
语句,这是没有意义的:编辑:
除此之外,
shoot
方法实际上并没有做我所期望的事情。它实际上并没有发射,而只是将项目符号向右移动。在该代码中,您不会创建另一个项目符号或将现有的项目符号重置到左侧。在我看来,这是当您在不知道它应该做什么的情况下编写它时所得到的代码。如果你一次只想要一颗子弹,那么当它击中某物或离开屏幕时,你需要将它的Left
复位到零。如果你想要多颗子弹,那么你需要某种方法来处理它。没有唯一的方法,我不能告诉你怎么做。