Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改图形的可见性_C#_Visibility - Fatal编程技术网

C# 更改图形的可见性

C# 更改图形的可见性,c#,visibility,C#,Visibility,我正在做一个刽子手游戏,我需要一幅画的每个身体部分都变得不可见,然后当玩家猜错字母时再回来。我尝试过使用图片框,但它们会切断掉落在框内的其他图像的一部分,所以我使用了图形。下面的代码使角色根据角色选择的人而定 Graphics test = e.Graphics; Graphics t2 = e.Graphics; //test.DrawImage(Cowboy.head, 180f, 180f, 250f, 250f); //test.Draw

我正在做一个刽子手游戏,我需要一幅画的每个身体部分都变得不可见,然后当玩家猜错字母时再回来。我尝试过使用图片框,但它们会切断掉落在框内的其他图像的一部分,所以我使用了图形。下面的代码使角色根据角色选择的人而定

 Graphics test = e.Graphics;
        Graphics t2 = e.Graphics;
        //test.DrawImage(Cowboy.head, 180f, 180f, 250f, 250f);
        //test.DrawImage(Cowgirl.head, 35f, 90f, 650f, 550f);
        //test.DrawImage(Criminal.head, 35f, 80f, 650f, 550f);
        //test.DrawImage(Cyborg.head, 180f, 180f, 200f, 350f);
        //test.DrawImage(Princess.head, 180f, 180f, 200f, 350f);
        if (Variables.p1_type=="Cowboy")
        {

            test.DrawImage(Cowboy.head, 180f, 180f, 250f, 250f);
            test.DrawImage(Cowboy.body, 180f, 180f, 250f, 250f);
            test.DrawImage(Cowboy.leftArm, 180f, 180f, 250f, 250f);
            test.DrawImage(Cowboy.rightArm, 180f, 180f, 250f, 250f);
            test.DrawImage(Cowboy.leftLeg, 180f, 180f, 250f, 250f);
            test.DrawImage(Cowboy.rightLeg, 180f, 180f, 250f, 250f);


        }

        if (Variables.p1_type == "Cowgirl")
        {
            test.DrawImage(Cowgirl.head, 35f, 90f, 650f, 550f);
            test.DrawImage(Cowgirl.body, 35f, 90f, 650f, 550f);
            test.DrawImage(Cowgirl.leftArm, 35f, 90f, 650f, 550f);
            test.DrawImage(Cowgirl.rightArm, 35f, 90f, 650f, 550f);
            test.DrawImage(Cowgirl.leftLeg, 35f, 90f, 650f, 550f);
            test.DrawImage(Cowgirl.rightLeg, 35f, 90f, 650f, 550f);
        }

        if (Variables.p1_type == "Criminal")
        {
            test.DrawImage(Criminal.head, 35f, 80f, 650f, 550f);
            test.DrawImage(Criminal.body, 35f, 80f, 650f, 550f);
            test.DrawImage(Criminal.leftArm, 35f, 80f, 650f, 550f);
            test.DrawImage(Criminal.rightArm, 35f, 80f, 650f, 550f);
            test.DrawImage(Criminal.leftLeg, 35f, 80f, 650f, 550f);
            test.DrawImage(Criminal.rightLeg, 35f, 80f, 650f, 550f);
        }

        if (Variables.p1_type == "Cyborg")
        {
            test.DrawImage(Cyborg.head, 180f, 180f, 200f, 350f);
            test.DrawImage(Cyborg.body, 180f, 180f, 200f, 350f);
            test.DrawImage(Cyborg.leftArm, 180f, 180f, 200f, 350f);
            test.DrawImage(Cyborg.rightArm, 180f, 180f, 200f, 350f);
            test.DrawImage(Cyborg.leftLeg, 180f, 180f, 200f, 350f);
            test.DrawImage(Cyborg.rightLeg, 180f, 180f, 200f, 350f);
        }

        if (Variables.p1_type == "Princess")
        {
            test.DrawImage(Princess.head, 180f, 180f, 200f, 350f);
            test.DrawImage(Princess.body, 180f, 180f, 200f, 350f);
            test.DrawImage(Princess.leftArm, 180f, 180f, 200f, 350f);
            test.DrawImage(Princess.rightArm, 180f, 180f, 200f, 350f);
            test.DrawImage(Princess.leftLeg, 180f, 180f, 200f, 350f);
            test.DrawImage(Princess.rightLeg, 180f, 180f, 200f, 350f);
        }
我需要这些身体的每一部分都从不可见开始,然后在拾取错误的角色时变得可见。我怎样才能做到这一点?如果不可能,还有什么其他方法可以做到

如果玩家猜错了

   if (Variables.word4player1.ToUpper().Contains(e.KeyCode.ToString())!=true)
                {


                    p1Turn = false;
                    label2.Font = new Font(label1.Font, FontStyle.Underline | FontStyle.Bold);//change underlined player
                    label1.Font = new Font(label1.Font, FontStyle.Regular);
                    p1_wrong.Text = p1_wrong.Text + " " + e.KeyCode.ToString();

                }
设置变量p1_类型

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Variables.p1_type= listBox_P1.SelectedItem.ToString();
        label_player1Type.Text = Variables.p1_type;
    }

您可以欺骗窗体,使其仅绘制图像,而不是绘制整个PictureBox

当然,还有更优雅的方法,比如重写PictureBox OnPaint事件或创建自己的控件

但我自己并不是这方面的大师,所以我不会用这个来回答你

首先要做的就是将所有PictureBox的可见性设置为false

然后将false添加到每个PictureBox的标记中。我们将使用它作为虚拟可见性来告诉窗体是否绘制图像

在窗体的绘制事件中,添加:

假设pbs是包含所有PictureBox的数组


瞧!你有一个图片盒,它不会阻挡后面的图像

我们可能需要看看用户如何输入错误字符的代码……好吧,我在文章底部添加了它。这没有显示设置变量的内容。p1_typeI也添加了它。我真的只需要知道如何使所有的图形都不可见,我想我可以解决其余的问题。更优雅的方法是覆盖PictureBox on Paint,这就是他在获取图形对象graphics test=e.graphics;时使用的方法;。我猜他所缺少的只是虚拟的可视性。谢谢你的投票^o^
Graphics g = e.Graphics;

for(int i=0;i<pbs.Count();i++)
{
    if(pbs[i].Tag.ToString()=="true") 
        g.DrawImage(pbs[i].Image, pbs[i].Location);
}
pbs[cur].Tag = true;
this.Refresh();