如何访问主窗体的成员

本文关键字:窗体 成员 访问 何访问 | 更新日期: 2023-09-27 18:24:59

我只是在学习C#,我正在尝试制作一个2D游戏。我正处于为玩家设置Form1的"PictureBox"和玩家等级开始的阶段:

class Player
{
    private string _name;
    private int _health;
    internal Player(string name, int health = 100)
    {
        _name = name;
        _health = health;
    }
    int X = 0;
    internal void Draw()
    {
        updateInput();
        Draw();
    }
    internal void updateInput()
    {
        if(Keyboard.IsKeyDown(Key.Right))
            X = 1;
        else if (Keyboard.IsKeyDown(Key.Left))
            X = -1;
        else
            X = 0; 
    }
}

有一个PictureBox"pb_play",它在主窗体上包含角色的精灵。我尝试将其访问修饰符设置为public,但没有帮助。我想通过X值的变化来改变角色的位置。因此,我试图从本质上访问该类窗体的成员。

我试图在draw方法中这样做,所以它会更新输入,然后设置位置,然后重复draw方法,不断循环。

如果有更好的方法,请随时教育我。我该如何解决这个问题?

编辑:好的,我把方法移到了UI中,正如一条评论所提到的。这是我所拥有的,但精灵拒绝移动:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Draw();
    }
    int X = 0;
    internal void Draw()
    {
        updateInput();
        pb_play.Location = new Point((pb_play.Location.X + X), 0);
        Draw();
    }
    internal void updateInput()
    {
        if (Keyboard.IsKeyDown(Key.Right))
            X = 5;
        else if (Keyboard.IsKeyDown(Key.Left))
            X = -5;
        else
            X = 0;
    }
}

如何访问主窗体的成员

我用了一个计时器来解决这个问题:

internal void Draw()
    {
        pb_play.Location = new Point((pb_play.Location.X + X), (pb_play.Location.Y + Y));
    }
    internal void updateInput()
    {
        if (Keyboard.IsKeyDown(Key.Right))
            X = 1;
        else if (Keyboard.IsKeyDown(Key.Left))
            X = -1;
        else
            X = 0;
        if (Keyboard.IsKeyDown(Key.Up))
            Y = -1;
        else if (Keyboard.IsKeyDown(Key.Down))
            Y = 1;
        else
            Y = 0;
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        updateInput();
        Draw();
    }