在一种形式之间移动 - C#

时间:2017-04-14 05:39:25

标签: c# methods load transition

我目前正在创建一个视频游戏,并在楼上和楼下之间的房子里编码。我将PictureBoxes与IntersectWith事件结合使用以在表单之间进行转换。

过渡代码上楼:

if(picPlayer.Bounds.IntersectsWith(picUpstairsTransition.Bounds))
            {
                MapFrmHouseUpstairs upstairs = new MapFrmHouseUpstairs();
                this.Hide();
                upstairs.ShowDialog();
            }

过渡代码回到楼下:

if(picPlayer.Bounds.IntersectsWith(picGoDownstairs.Bounds))
        {
            MapFrmHouse goDownstairs = new MapFrmHouse();
            this.Hide();
            goDownstairs.ShowDialog();
            picPlayer.Location = new Point(497, 103);
        }

我遇到的问题是当玩家进入房子时,他从前面开始。当他试图从楼上回来时,角色会移回到前面而不是楼梯的底部。无论如何我可以在MapFrmHouse中创建一个方法,例如:

public void fromDownstairs{picPlayer.Location = new Point(x,y);}

下楼时叫它?

1 个答案:

答案 0 :(得分:0)

首先,您最好使用游戏引擎设计Unity等游戏,这样更容易,更有趣。这对你来说可能是一个学习任务,尽管我不应该责怪你。)

您可以通过多种方式在Windows窗体中的表单之间发送信息,其中两种似乎可以满足您的需求:

  1. 为对象使用更高级别的修饰符

  2. 在构造函数中初始化值

  3. 首先,在picPlayer课程中将MapFrmHouse的图片框中的private的修饰符属性设置为public,然后你可以完全按照提到的那样做:

    if(picPlayer.Bounds.IntersectsWith(picGoDownstairs.Bounds))
    {
        MapFrmHouse goDownstairs = new MapFrmHouse()
        {
            picPlayer.Location = new Point(x,y);
        };
        this.Hide();
        goDownstairs.ShowDialog();
    }
    

    对于第二种方法,您应该在MapFrmHouse中创建一个重载构造函数,并在其中接受Point值,然后将其设置为您的值:

    public MapFrmHouse(Point p)
    {
        InitializeComponent();
        picPlayer.Location = p;
    }
    

    然后在你的代码中使用它:

    if(picPlayer.Bounds.IntersectsWith(picGoDownstairs.Bounds))
    {
        MapFrmHouse goDownstairs = new MapFrmHouse(new Point(x,y));
        this.Hide();
        goDownstairs.ShowDialog();
    }
    

    我希望这会有所帮助:)