C#在自定义表单上显示图片框

时间:2017-07-31 17:55:26

标签: c# forms picturebox

我在制作彩盒显示器时遇到了一些问题。

我正在制作一个简单的RPG游戏(原型),玩家可以制作一个角色。角色类附有一个图片框,当他们创建角色时,会为此图片框选择一个图像。

游戏开始后,角色会在某个位置产生。但是,图片框并没有显示出来。在某个位置,角色可以四处移动。在随机数量的步骤之后,开始战斗,并且加载战斗屏幕。尽管图片框没有加载,但角色似乎四处移动,并且战斗确实开始了。

当我离开战斗并返回到表格时,会出现角色的图片框。我在位置表单上有其他图片框,然后加载。

某个位置的构造函数调用了一个名为initialise的方法。以下是此方法的一些相关代码:

 public void Initialise()
    {                    
        c = StateManager.C;
        StepCount = 0;
        SetStepsTillCombat();
        EntranceLocation = "";
        SetStartPosition();
        c.Pic.Location = NewLocation ;//c.Pic is the picturebox            
        this.Controls.Add(c.Pic);

设置开始位置方法旨在确定玩家应该在哪里产生。代码如下:

public void SetStartPosition()
    {
        switch (EntranceLocation)
        {
            case "North":
                StartLocation.X = this.Width/2;
                StartLocation.Y=10;
                NewLocation = StartLocation;
                break;
            case "South":
                StartLocation.X = this.Width/2;
                StartLocation.Y=this.Height - c.Pic.Height;
                NewLocation = StartLocation;
                break;
            case "West":
                StartLocation.X = 10;
                StartLocation.Y=this.Height/2;
                NewLocation = StartLocation;
                break;
            case "East":
                StartLocation.X = this.Width-c.Pic.Height;
                StartLocation.Y=this.Height/2;
                NewLocation = StartLocation;
                break;
            case "":
                StartLocation.X = this.Width / 2;
                StartLocation.Y = this.Height / 2;
                NewLocation = StartLocation;
                break;

        }

    }

我无法记住为什么我甚至使用startlocation,而不是直接设置newlocation,有一个原因,然后我删除了该功能。无论如何,根据玩家进入该位置的位置,他们的生成点会有所不同,或者如果玩家在开始游戏时进入第一个位置,他们就会从一个设定点开始。在分配播放器图片框的位置之前,我先调用此方法。

首次进入某个位置时,没有图片。当我离开战斗时,我有以下代码:

        public void EndClick(object sender, EventArgs e)
    {
        this.Hide();
        c.NumberOfBattles++;
        returnLocation.Spawn(c.Location);//Coordinates for where to spawn the player
        returnLocation.SetStepsTillCombat();
        returnLocation.StepCount = 0;
        returnLocation.Show();//Load the location I entered combat from
    }

spawn方法如下:

public void Spawn(Point p)
    {
        c.Location = p;
        c.Pic.Location = c.Location;
        this.Controls.Add(c.Pic);
    }

执行此操作时,c.Pic会显示。

我无法看到我在这里做错了什么,任何输入都会受到赞赏。我想我已经包含了所有相关的代码。

编辑:

我找到了一个解决方法,每次移动角色时,我都会调用spawn方法,尽管这似乎是一种效率低下的方法。

0 个答案:

没有答案