winforms 如何在c# windows窗体中按空格键连续拍摄?

uqcuzwp8  于 2022-11-30  发布在  C#
关注(0)|答案(1)|浏览(160)
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窗体创建一个简单的射击游戏,但问题是,我的游戏在运行时只射击一次。每次我按空格键时,它都不产生子弹。你能帮我吗?谢谢。这是我的代码。

qij5mzcb

qij5mzcb1#

您在Tick事件行程常式中呼叫shoot,但从未呼叫TimerStart,因此永远不会引发Tick事件。
你应该在KeyDown上启动Timer,在KeyUp上停止它。我还刚刚意识到你有一个while循环,而不是一个if语句,这是没有意义的:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Space)
    {
        shoot();
        timer1.Start();
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    shoot();
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    timer1.Stop();
}

编辑:
除此之外,shoot方法实际上并没有做我所期望的事情。它实际上并没有发射,而只是将项目符号向右移动。在该代码中,您不会创建另一个项目符号或将现有的项目符号重置到左侧。在我看来,这是当您在不知道它应该做什么的情况下编写它时所得到的代码。如果你一次只想要一颗子弹,那么当它击中某物或离开屏幕时,你需要将它的Left复位到零。如果你想要多颗子弹,那么你需要某种方法来处理它。没有唯一的方法,我不能告诉你怎么做。

相关问题