![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Roum001 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 24.12.2010 Репутация: нет Всего: нет |
Доброго времени суток!
Есть проблема и срочно нужна помощ! Задача: создать окно,на окне шар нарисован(с помощью bitmap) вы кликаем на нем мышкой и перетаскиваем куда-нть,после отпускания мыши круг падает до края окна и отскакивает обратно (типа анимация),скачет и постепенно останавливается. Подскажите как данное организовать с помошью чистого winapi. p.s. регистрацию окна можно не подсказывать. ![]() |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
В общих словах - храним координаты шара в глобальной структуре.
Далее нам нужна функция, получающая отсчеты таймера. Она будет реализовывать изменение вертикальной координаты в соответствии со школьной формулой x = Xo + Vo*t + g*t*t, где переменные это соответственно начальное положение, начальная скорость, ускорение свободного падения и время в секундах. По завершению отработки этой функции нужно посылать окну сообщение WM_PAINT. Там все просто - рисуете ваш шарик в соответствии с координатами. Далее вам понадобится обработка сообщения нажатия левой кнопки мыши - в ней вы делаете следующее - 1. Проверяете, попадает ли нажатие мыши внутрь нарисованного круга. 2. Если попадает, то ставите флаг(еще одну переменную), говорящий, что пользователь начала перетаскивание шара. В еще одну специальную переменную заносите координаты мыши, соответствующие началу движения. 3. Отключаете таймер, который генерирует отсчеты для функции падения. В обработчике отпускания кнопки мыши вы сбрасываете переменную-флаг, говорящую о том, что идет процесс передвижения шара. Ну а в обработчике MOUSEMOVE вы проверяете, выставлен ли ваш флаг, говорящий о том, что идет передвижение. Если выставлен - вычисляете смещение координат мыши относительно координат, зафиксированных при запуске процесса перетаскивания, то есть нажатия на кнопку мыши. К координатам шара просто прибавляете это смещение и посылаете сообщение для перерисовки окна. В общем-то это то, что на начальном этапе требуется сделать. когда будет сделано это, ва нужно будет добавить еще одну функцию, которая будет проверять, долетел ли шар до стенки, и если долетел, менять знак начальной скорости, заставляя шар отскакивать. Почитав курс физики, можно будет в этот колебательный процесс ввести еще и некий декремент затухания. Сначала начните с того, что сделайте первую часть, чтобы у вас с самим WINAPI проблем не было, физику переделать можно будет после этого как угодно. Это сообщение отредактировал(а) Dreamer_0x01 - 24.12.2010, 11:18 -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |