NotAComputerScienceStudent Ответов: 2

Я хочу сделать недействительным только 1 рисунок (эллипс) из графического поля


Дело в том, что в моем графическом поле есть 3 фигуры-круг(эллипс) и 2 прямоугольника, которые я хочу только сделать недействительными.

Круг идет вверх и вниз в то время как прямоугольники движутся влево когда прямоугольники исчезают появляются еще 2

Первый пункт-это я, создающий цвет и графику
Второй параграф-это создание птицы
третий пункт-это то, что я делаю 2 противоположные стены, между которыми всегда будет пространство

Однако когда я использую свою функцию UpdateScreen чтобы заставить птицу двигаться и создать видео влияет на движение птицы однако стены движутся и возрождаются делая его нервным беспорядком
Визуальное представление

Визуальное представление

https://youtu.be/zYg4GA5XeMw

Что я уже пробовал:

я пробовал помещать круг и прямоугольник в разные методы, когда они вызываются, но команда, которую я использую Canvas.Признать недействительными (холсты, являющиеся коробка изображения), следовательно, она освежает всю коробку картинке
SolidBrush Yellow = new SolidBrush(Color.Yellow);
            Graphics Canvas = e.Graphics;

//Make Bird
            Canvas.FillEllipse(Yellow, Bird.X, Bird.Y, Settings.WidthBird, Settings.HeightBird);

//Make Bird
            //Max Height
            int MAxHeight = PbCanvas.Size.Height;
            int MH = MAxHeight - 80;
            int HeightD = random.Next(0, MAxHeight - 80);
            int HeightU = MH - HeightD;
            int Bottom = PbCanvas.Bottom;
            new Settings();
            //Walls
            Canvas.FillRectangle(Black, X, 0, 50, HeightU);
            Canvas.FillRectangle(Black, X, Bottom - HeightD, 50, HeightD);
                                      //X        //Y         //W  //H

0x01AA

Как насчет С Shape.Invalidate​Visual() ?

NotAComputerScienceStudent

Как нам это сделать? Что мы должны написать вместо "форма"

0x01AA

Я предполагаю, что у вас есть что-то вроде
Ellipse myEllipse = new Ellipse();
в вашем коде. Так что вы можете сделать
myEllipse.Invalidate​Visual()
когда это необходимо

NotAComputerScienceStudent

что я должен использовать, например, систему рисования и т. д

0x01AA

Я не понимаю вашего вопроса. Разве вышесказанное не помогает? В противном случае вам следует расширить свой вопрос соответствующими фрагментами кода.

NotAComputerScienceStudent

Дело в том, что я не могу найти класс\функцию типа "эллипс"

0x01AA

Я вижу. Простите, я ошибся. Забудьте мои комментарии, я думал, что вы работаете с формой класса.

Вы должны опубликовать некоторые фрагменты кода в своем вопросе, чтобы сделать его более ясным, что вы делаете.

2 Ответов

Рейтинг:
1

RickZeeland

Смотрите совет здесь: Рисование на изображениях графической коробки[^]
Если это не сработает, рассмотрите возможность использования другого элемента управления, например Панель, так как PictureBox на самом деле не является хорошим выбором для пользовательского рисования.


Рейтинг:
0

Dave Kreskowiak

PictureBox не предназначен для рендеринга игр. Это действительно плохой выбор для этого.

Вы можете "аннулировать" фигуру, но это не приведет к тому, что PictureBox перерисует фигуру. Вы должны сделать недействительным PictureBox, что приведет к перерисовке PictureBox, но всего содержимого в элементе управления.

Поскольку вам все равно придется делать все чертежи самостоятельно, лучшим выбором будет индивидуальная панель. Вам все равно придется аннулировать панель, чтобы заставить ее рисовать саму себя, но вы будете обрабатывать событие рисования панели и выполнять весь рисунок.

Игры не делают недействительными и не рисуют отдельные объекты. Обычно перерисовывают все на экране на каждом кадре игры, который вы видите.