如何添加/使用KeyEventHandler到一个空的C#项目

问题描述 投票:-2回答:1

我在做一个C#WFA游戏引擎,从空VS项目/上爬起来构建它的过程。我已经打,我需要增加投入,但不知道该怎样添加在keyDown / keyUp事件,也没有如何添加或使用KeyEventHandler想法的地步。对不起,我的英语水平。

我已经使用部分类指的是从类尝试,但它并不能帮助。我基本上卡住了,我已经研究并有奔无法找到任何东西。

class Window
{
    // privates needed to intialize the game screen
    private Form screen;
    private Size size;
    private Bitmap bitmap;
    private Graphics LoadGraphics;
    private Graphics FinalGraphics;

    // constructor for the window / game screen
    public Window(GameContainer gc)
    {
        // initializes the game screen
        bitmap = new Bitmap(gc.GetWidth(), gc.GetHeight());
        size = new Size((int)(gc.GetWidth() * gc.GetScale()), (int) 
                         (gc.GetHeight() * gc.GetScale()));
        screen = new Form();

        // makes the Game screen not resizeable 
        screen.GetPreferredSize(size);
        screen.MinimumSize = size;
        screen.MaximumSize = size;
        screen.Size = size;
        screen.FormBorderStyle = FormBorderStyle.FixedToolWindow;

        screen.Text = gc.GetTitle();

        // intializes the graphics
        LoadGraphics = screen.CreateGraphics();
        FinalGraphics = screen.CreateGraphics();
        screen.BackColor = Color.Black;
    }

    // updater for the game screen
    public void Update()
    { 
        Application.DoEvents();
        LoadGraphics = Graphics.FromImage(bitmap);
        FinalGraphics.DrawImage(bitmap, 0, 0, screen.Width, screen.Height);
        screen.Show();

    }

    // getter for the screen
    public Form GetScreen()
    {
        return screen;
    }

    // getter for the bitmap
    public Bitmap GetBitmap()
    {
        return bitmap;
    }

    public Color GetBackcolor()
    {
        return screen.BackColor;
    }
}

class Input
{
    public Input(Window screen)
    {
        screen.GetScreen().KeyPreview = true;
    }

    void Screen_KeyPress( object sender, KeyPressEventArgs e )
    {
        if (e.KeyChar == 65)
        {
            Console.WriteLine("you pressed A");
        }
    }

}
c# keyevent
1个回答
0
投票

如果是游戏引擎可能要真正挂钩键盘,反正关键处理你基本上创建一个委托,所以+的OnKeyPress =(双击标签自动在VS创建委托)

试错后,我得到它的工作

public Input(Window screen)
{
    screen.GetScreen().KeyPreview = true;
    screen.GetScreen().KeyDown += Input_KeyDown;
}

private void Input_KeyDown( object sender, KeyEventArgs e )
{
    if(e.KeyCode == Keys.A)
    {
        Console.WriteLine("you pressed 'A' !");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.