Реализация 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();
}