Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Реализация CarControl

Реализация CarControl

После этой подготовительной работы по созданию пользовательского интерфейса вы можете приступить к реализации членов типа. Сначала создайте новый общедоступный перечень AnimFrames, который будет иметь члены, представляющие каждый элемент из ImageList. Этот перечень будет использоваться для определения текущего фрейма, предназначенного для визуализации в PictureBox.

// Вспомогательный перечень для изображений.
public enum AnimFrames {
 Lemon1, Lemon2, Lemon3,
 AbоutТоBlow, EngineBlown
}

Тип CarControl поддерживает достаточно большой набор приватных данных, необходимых для представления программной логики анимации. Вот краткое описание каждого из членов.

public partial class CarControl: UserControl {
 // Данные состояния.
 private AnimFrames currFrame = AnimFrames.Lemon1;
 private AnimFrames currMaxFrame = AnimFrames.Lemon3;
 private bool IsAnim;
 private int currSp = 50;
 private int maxSp = 100;
 private string carPetName= "Lemon";
 private Rectangle bottomRect = new Rectangle();
 public CarControl() {
  InitializeComponent();
 }
}

Как видите, здесь есть данные, представляющие текущую и максимальную скорости, название автомобиля, а также два члена типа AnimFrames. Переменная currFrame используется для указания того, какой из членов ImageList следует отобразить. Переменная currMaxFrame используется для обозначения текущего верхнего предела в ImageList (напомним, что в цикле анимации CarControl используются от трех до пяти изображений, в зависимости от скорости автомобиля). Элемент данных IsAnim используется для определения того, что автомобиль в настоящий момент находится в режиме использования анимации. Наконец, член Rectangle(bottomRect) используется для представления нижней части области CarControl. Позже в этой части элемента управления будет отображаться название автомобиля.

Чтобы разделить CarControl на две прямоугольных области, создайте приватную вспомогательную функцию с именем StretchBox(). Задачей этого члена будет вычисление правильных размеров члена bottomRect и гарантия того, что элемент PictureBox будет растянут на верхние примерно две трети поверхности типа CarControl.

private void StretchBox() {
 // Конфигурация окна изображения.
 currentImage.Top = 0;
 currentImage.Left = 0;
 currentImage.Height = this.Height – 50;
 currentImage.Width = this.Width;
 currentImage.Image = carImages.Images[(int)AnimFrames.Lemon1];
 // Выяснение размеров нижнего прямоугольника.
 rect.bottomRect.X = 0;
 bottomRect.Y = this.Height – 50;
 bottomRect.Height = this.Height – currentImage.Height;
 bottomRect.Width = this.Width;
}

После установки размеров каждого прямоугольника в рамках конструктора, заданного по умолчанию, вызывается StretchBox().

public CarControl() {
 InitializeComponent();
 StretchBox();
}

Оглавление книги


Генерация: 1.248. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз