如何访问主表单的成员

时间:2015-11-27 22:40:07

标签: c# class encapsulation

我只是学习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"其中包含主窗体上的角色精灵。我尝试将其访问修饰符设置为公共,但这没有帮助。我希望通过X值变为什么来改变角色的位置。所以我试图基本上访问该类形式的成员。

我试图在draw方法中执行此操作,因此它将更新输入,然后它将设置位置,然后重复Draw方法,不断循环。

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

编辑:好的,我将方法移动到用户界面,如评论所述。这是我的,但精灵拒绝移动:

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;
    }
}

1 个答案:

答案 0 :(得分: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();
    }