Автор работы: Пользователь скрыл имя, 07 Декабря 2012 в 18:50, доклад
Вы почти наверняка используется для размещения элементов управления на форме, однако, вы, вероятно, ожидая, что они будут оставаться на месте, как только вы поместите сюда. Это не обязательно должны быть случай, однако. Управление есть X и Y позиции, и вы можете изменять их в любое время выполнения. Мы можем использовать это, чтобы создать простую анимацию в окнах приложений - скажем, например, животное ходить
(1) Когда мышью вниз, рассчитать смещение между верхнем левом углу песчанки и курсор.
(2) При перетаскивании, переместить песчанки с курсором, за вычетом ранее рассчитанные смещения.
(3) При освобождении песчанки, выяснить, где она будет падать на (остановка роста) и что он будет делать, когда он попадает туда ("Новое государство"), кэш, что информация, затем переключитесь на "падающие" государства.
(4) После завершения падения (то есть, когда кэшированное точки упора), переходим на кэшированные "новые" государства, и возобновить игру.
Я выделю код для случая, когда песчанка стоят слева. (Перед правом код будет идентичен, за исключением контроля gerbil1 будет использоваться). Итак, начнем:
Пункт 1 получает и кэш смещения использованием MouseEventArgs передается в обработчик, предполагая, что вы находитесь в состоянии, в котором вы можете взять песчанки (например, не тогда, когда песчанка падает, так как песчанки бы испугаться и укусить вас):
Private Sub gerbil_MouseDown (ByVal отправителя As Object, _
ByVal электронной Как System.Windows.Forms.
Ручки gerbil0.MouseDown, gerbil1.MouseDown
"Выясните, где смещение в песчанка является
Если состояние = gerbilState.
состояние = gerbilState.
offx = еХ
offy = EY
состояние = gerbilState.
»(И т.д.)
Точка 2 просто перемещает песчанка вместе с курсором, модифицирующий его смещения:
Private Sub gerbil_MouseMove (ByVal отправителя As Object, _
ByVal электронной Как System.Windows.Forms.
Ручки gerbil0.MouseMove, gerbil1.MouseMove
'Move песчанки в текущую позицию курсора
"Уважение к кэшированным смещение
Если состояние = gerbilState.
gerbil0.Left = gerbil0.Left + EX - offx
gerbil0.Top = gerbil0.Top + гу - offy
»(И т.д.)
Очки 3 имеет наиболее сложную логику (если можно так назвать), как показано в этом отрывке, так как мы должны выяснить, где она упадет до, и что он будет делать, когда он попадает туда:
Private Sub gerbil_MouseUp (ByVal отправителя As Object, _
ByVal электронной Как System.Windows.Forms.
Ручки gerbil0.MouseUp, gerbil1.MouseUp
"Пользователь отпустил песчанки. Выясните, где
"Песчанка, и как далеко она упадет до.
Если состояние = gerbilState.
"Если мы выше днища резервуара, а затем снизится до
'Днища резервуара, так что песчанки в конечном итоге ходьбе
»На кедр чипов внутри
Если gerbil0.Left> Tank.Left И _
gerbil0.Left + gerbil0.Width <Tank.Left + Tank.Width И _
gerbil0.Top + gerbil0.Height <= TankLevel Тогда
stopheight = TankLevel
"Когда мы закончим падать, новое государство должно
'Быть в клетке
NewState = gerbilState.
Еще
"Если мы над полкой, то падают на шельфе
Если gerbil0.Top <shelfLevel Тогда
stopheight = shelfLevel
"Когда мы закончим падать, новое государство должно быть
»На шельфе за пределами клетки
NewState = gerbilState.
Еще
«Мы должны быть ниже полке, поэтому упасть форме ...
stopheight = Me. Высота gerbil0.Height + + 1
"Когда мы закончим падать, новое государство должно быть
"К сожалению, вы goofed".
NewState = gerbilState.
End If
End If
состояние = gerbilState.
»(И т.д.)
End Sub
А потом обратно в обработчик тика таймера, мы обрабатываем часть 4, gerbilFacingLeftFalling государства, а также (не показано) соответствующего государства, если он сталкивается право:
Дело gerbilState.
"Сохранить падения пока не дойдем до остановки высоты
Перемещение температура = gerbil0.Top + fallRate "песчанка вниз
Если температура> stopheight Then 'Не попадитесь прошлом остановить высоте!
температура = stopheight
End If
gerbil0.Top = температура
Если gerbil0.Top = stopheight Then 'Есть ли у нас упали достаточно?
состояние = NewState «Да, падение будет завершен;
'Переключиться на кэшированные новое государство
End If
Наконец, мы можем контролировать "действия" (если можно облагородить его с такой термин) путем обработки быстро / медленно кликов кнопки отключения соответствующую кнопку, когда она на медленный или быстрый:
Private Sub Slow_Click (ByVal отправителя Как System.Object, _
ByVal электронной Как System.EventArgs) Ручки Slow.Click
"Сделать песчанки идти медленнее и с большей вероятностью сидеть
freezeRate = freezeRate + 5
скорость = (100 - freezeRate) / 6
Если freezeRate = 100 Затем
Slow.Enabled = False
End If
Fast.Enabled = True
End Sub
Private Sub Fast_Click (ByVal отправителя Как System.Object, _
ByVal электронной Как System.EventArgs) Ручки Fast.Click
"Сделать песчанки идти быстрее и менее вероятно, сидеть на месте
freezeRate = freezeRate - 5
скорость = (100 - freezeRate) / 6
Если freezeRate = 0 Then
Fast.Enabled = False
End If
Slow.Enabled = True
End Sub
И наши песчанки игра завершена. Хорошо, таким образом, может быть, это не Ворота Балдура или Halo, но это показывает, контроль у вас есть более объектов в формах. Наслаждайтесь!
И овцы и песчанки примеры приведены ниже в прикрепленном файле ZIP. В следующий раз, я буду продолжать игру тема в новых коротких серий, речь идет о создании объектов на лету, как мы ходим виртуальный дом в поисках ключей. Поговорите с вами тогда!
- Мэтт - *