我目前正在创建一个视频游戏,并在楼上和楼下之间的房子里编码。我将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);}
下楼时叫它?
答案 0 :(得分:0)
首先,您最好使用游戏引擎设计Unity等游戏,这样更容易,更有趣。这对你来说可能是一个学习任务,尽管我不应该责怪你。)
您可以通过多种方式在Windows窗体中的表单之间发送信息,其中两种似乎可以满足您的需求:
为对象使用更高级别的修饰符
在构造函数中初始化值
首先,在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();
}
我希望这会有所帮助:)