Мы с Вами создадим почти анимацию. Почти потому, что объект будет передвигаться с помощью стрелок курсора. Но стоит заменить нажатия на события таймера, как получится анимация. Мы немного поменяем класс DirectDraw, чтобы вся необходимая инициализация проводилась в конструкторе класса. В этом шаге мы напишем код формы, в следующем сам класс. Пока функции класса нужно создавать как пустышки. Итак, приступим.
Visual Basic Создаем обычное приложение. И пустой пока класс DirectDraw. Импортируем две картинки. Фон и объект.
Разбираемся, что нужно от формы. Так как у нас есть класс нужно описать переменную класса. Так как мы будем накладывать изображение нам нужно знать координаты его местонахождения. И еще понадобится одна переменная. Мы будем производить переключение поверхностей. Рисовать нужно на поверхности, которая не видна на экране. Поэтому нужно знать какая поверхность на экране. Заводим переменные:
При запуске формы задаем начальные значения и создаем объект формы.
При закрытии формы удаляем класс:
Теперь самое интересное, когда будет нажата клавиша, мы будем перемещать объект. Значит, нам нужно реагировать на нажатие стрелок и изменять положения рисунка на фоне.
Вы видите неизвестную Moves, это процедура. Смотрим ее.
Visual C++
Visual Basic
Dim a As Boolean
Dim x, y As Integer
Dim dr As DirectDraw
Private Sub Form_Load()
Set dr = New DirectDraw
x = 0
y = 0
a = True
End Sub
Private Sub Form_Terminate()
Set dr = Nothing
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then End
If KeyCode = vbKeyDown Then
If y < 480 Then
y = y + 1
Moves
End If
End If
If KeyCode = vbKeyUp Then
If y > 0 Then
y = y - 1
Moves
End If
End If
If KeyCode = vbKeyRight Then
If x < 640 Then
x = x + 1
Moves
End If
End If
If KeyCode = vbKeyLeft Then
If x > 0 Then
x = x - 1
Moves
End If
End If
End Sub
Private Sub Moves()
If a = False Then
dr.FonToPrimary
dr.ChipToPrimary x, y
dr.Flip
a = False
Else
dr.FonToSecond
dr.ChipToSecond x, y
dr.Flip
a = True
End If
End Sub