Визуальное проектирование диалогового окна
Внешний вид главного окна приложения приведен на рисунке 2.7.
Рис. 2.7. Главное окно приложения
Для графической панели pictureBox1 устанавливаются свойства:
Настройки компонента trackBar1 будут рассматриваться далее. Проектирование программного кода Начальное рисование фигуры Т.к. в данном приложении будет создаваться кисть со штриховой заливкой, прежде всего, необходимо в файл главной формы подключить пространство имен System.Drawing.Drawing2D. Для рисования круга необходимо иметь координаты его центра и радиус. Для этого нужно объявить соответствующие переменные в классе формы: int x0, y0; int radius; Начальные значения этим переменным можно установить в конструкторе формы или в обработчике события Load. Здесь начальное положение круга – левый нижний угол области рисования, радиус – 30 пикселей. x0 = 30; y0 = pictureBox1.Height - 35; radius = 30; Рисование круга будет производиться в обработчике события Paint области рисования pictureBox1. Процесс рисования состоит из создания объекта Graphics, очистки области рисования, создания кисти и непосредственного рисования круга. Кисть создается как объект класса HatchBrush (штриховая кисть). При этом первым параметром задается стиль заливки (здесь – HatchStyle.SolidDiamond – «шахматка»), вторым параметром – основной цвет заливки (желтый). Можно указать и третий параметр – «неосновной» цвет или цвет фона (по умолчанию – черный). При рисовании круга (метод FillEllipse()) необходимо задать кисть для заливки, координаты левого верхнего угла прямоугольника, ограничивающего окружность, а также его стороны. Код обработчика приведен ниже:
Private void pictureBox1_Paint(object sender, PaintEventArgs e) { //создаем графический объект Graphics g = e.Graphics; //очищаем область рисования g.Clear(Color.White); //создаем штриховую кисть желтого цвета HatchBrush brush = new HatchBrush(HatchStyle.SolidDiamond, Color.Yellow); //рисуем круг g.FillEllipse(brush, x0 - radius, y0 - radius, 2 * radius, 2 * radius); }
Реализация движения фигуры Реализация движения основана на использовании компонента-таймера (Timer). После помещения на форму его свойству Interval (интервал в миллисекундах, через который поступает сигнал от таймера) устанавливается значение 10. По нажатию кнопки «Start» необходимо активизировать («включить») таймер, а кнопки «Stop» – остановить его.
//кнопка "Start" Private void button1_Click(object sender, EventArgs e) { timer1.Start(); } //кнопка "Stop" Private void button2_Click(object sender, EventArgs e) { timer1.Stop(); }
Чтобы заставить фигуру «двигаться», достаточно изменять ее координаты по сигналу таймера, после чего перерисовать фигуру:
Private void timer1_Tick(object sender, EventArgs e) { //изменяем координаты круга x0++; y0--; //обновляем область рисования (перерисовываем круг) pictureBox1.Invalidate(); }
В данном случае после нажатия кнопки «Start» круг будет двигаться по диагонали вправо вверх (координата x увеличивается, y – уменьшается), пока не исчезнет за пределами области рисования или пока не будет нажата кнопка «Stop».
Программная реализация «отскакивания от стенок» Для создания подобного эффекта нужно отслеживать координаты круга с учетом его радиуса. В этом случае удобно создать в классе формы две дополнительные переменные, задающие направление движения по каждой из осей координат: int xDir, yDir; Переменная xDir принимает значение 1, если круг двигается вправо, и –1, если влево. Переменная yDir равна 1, если идет движение вниз, и –1, если вверх. Поскольку изначально напрвление вижения задается вправо вверх, этим переменным нужно задать соответствующие исходные значения (в конструкторе или в обработчике события Load):
xDir = 1; yDir = -1; «Отскакивание от стенок» реализуется за счет изменения значений этих переменных. Если круг «подлетел» к левой стенке, то после этого он должен начать двигаться вправо, т.е. переменной xDir нужно присвоить значение 1, и т.д. Приближение к стенкам отслеживается по значениям переменных x0 и y0 с учетом радиуса круга. При этом при «касании» кругом правой и нижней стенок необходимо вносить корректировку в 5 пикселей из-за наличия трехмерной рамки у области рисования. Таким образом, обработчик события Tick для таймера модифицируется следующим образом:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|