Изменение видимости графика - PullRequest
0 голосов
/ 08 марта 2019

Я делаю игру палача, и мне нужно, чтобы каждая часть тела рисунка становилась невидимой, а затем возвращалась, когда игрок угадывал неправильную букву.Я попытался использовать графические блоки, но они обрезали части других изображений, которые попадают внутрь коробки, поэтому вместо этого я использовал графику.Вот код, который делает персонажа в зависимости от того, кого он выбирает ...

 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_type

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

1 Ответ

1 голос
/ 08 марта 2019

Вы можете «обмануть» форму для рисования изображений ТОЛЬКО вместо целого PictureBox.

Конечно, есть более «элегантный» способ сделать это, например:переопределите событие PictureBox OnPaint или создайте свой собственный элемент управления.

Но я сам не являюсь его хозяином, поэтому я не буду отвечать вам этим.

Все, что у вас естьДля того, чтобы сделать сначала, установите для всех PictureBoxs' видимости значение false.

Затем добавьте «false» для каждого PictureBox Tag.Мы будем использовать это как «фиктивную видимость», чтобы указать форме рисовать изображение или нет.

В событии Paint формы добавьте:

(Предполагая pbsэто массив, который содержит все PictureBoxs.)

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

И в методе, который проверяет, вводит ли игрок неправильное слово, выполните:

(Предположим, curуказатель тока PictureBox.)

pbs[cur].Tag = true;
this.Refresh();

И ВОЙЛА!У вас есть PictureBox, который не будет блокировать изображение позади него!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...