| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Мышка |
| Автор: Kirgston 20.2.2009, 00:19 | ||||
| Ребята... вот собственно переношу проект с Делфи под С++ =) мне надо добится результата чтобы мышка ставала по центру, и плавно перемещалась в правый верхний угол... в Делфи код был такой: Центрую мышку и...
В результате мышка центруется и движется пока координаты не привысят допустимых... Это всё в таймере с интервалом 1 В С++ я это сделал так:
Тоисть я запускаю цыкл с проверкой и каждый раз на координаты... после чего их увеличиваю... но у меня мышка центрируется и попадает потом практически в самый конец... и скачет по углам... Пробовал менять цыкл... без него... пробовал с слипами... ничего... этот код также вписал в таймер... но оно чтото не правильно работает... помогите пожалуйста |
| Автор: Dmi3ev 20.2.2009, 00:40 | ||||
вот мышка перемещается по экрану плавно по таймеру:
то же самое, только с условием:
|
| Автор: Kirgston 20.2.2009, 10:21 |
| Спасибо большое уже справился =) итог могу сказать такой... по меньше играйтесь с GetCursorPos |
| Автор: Dem_max 20.2.2009, 10:33 | ||
что это значит |
| Автор: Kirgston 20.2.2009, 12:27 |
| Ееее не знаю... почему то у меня туда как бы числа рендомом... вообщем как вы видете сверху код. Вроде всё правильно. Но мышка прыгала по углам. Как только я это всё перевел в 2 переменные и работал с переменными всё стало "как надо" =). Не знаю изза чего это... но факт есть факт ))))) Ребята. Вот у меня появилась проблемка... захотелось чтобы мышка при определенном событии какбы направлялась в центр экрана. Да я понимаю... SetCursorPos(Screen->Width\2, Screen->Height\2) ; Но мне хочется больше импровизации =) хочется заставить мышку плавно перемещаться в центр. Да я например знаю как переместить с одного угла в центр или другой угол. Но тут как бы не так... а если мышка будет возле центра сверху... да я знаю что это очень геморойно, но интересно! =) Помогите пожалуйста хоть какимито мыслями |
| Автор: Anikmar 20.2.2009, 13:52 |
| И что особо сложного? Вычисляем разницу: Текущая координата минус координата центра. Эту разницу делим на желаемое кол-во шагов - получаем смещение Дальше в цикле по кол-ву шагов прибавляем к текущей координате смещение Ну естественно можно каждый шаг уточнять на момент того, что пользователь может мышкой и двигать в это время (гад какой). Забавно получится - дурак пользователь мышку двигает, а она упорно в центр сползает. Думаю очень обрадует такой наворот |
| Автор: Kirgston 20.2.2009, 15:12 |
| Неа что то тут не то... а если текущая координата меньше координаты центра? ... то что?... тогда курсор уплывает в минус... |
| Автор: Kirgston 20.2.2009, 16:25 |
| Вот формула координат центра SetCursorPos( ((Screen->Width/2)-x)+x, ((Screen->Height/2)-y)+y); Как мне сделать теперь чтобы курсор бежал плавно? |
| Автор: Anikmar 20.2.2009, 16:32 |
| Чем мой вариант не подходит не пойму?! |
| Автор: Dmi3ev 20.2.2009, 16:41 | ||
я же тебе в начале написал, только интервал таймера поменьше поставь и наслаждайся... будет плавно... |
| Автор: Kirgston 20.2.2009, 16:41 |
| Извините просто не увидел вашего варианта. Щас попробую! |
| Автор: Anikmar 20.2.2009, 16:42 | ||
Интересная формула. А можно узнать зачем -х+х? |
| Автор: Kirgston 20.2.2009, 16:52 |
| Еххххх ребята )))) не вьежаете вы )))) Anikmar, тоже что и я сделал ))))) в итоге будет перемещение буквой Г. Сначала по Х, а потом по У. Уже также думал... надо заставить перемещатся одновременно... и учитывать что экран 4:3 делать просто инкремент или декремент нельзя... Dmi3ev, также повторюсь =) нельзя. А если у меня курсор будет с правой стороны? Тогда надо отнимать. А если сверху? А если сбоку? А если рядом с центром? Простой инкремент тут не выход... я уже думал над этим всем ))))) уже 6ой час сижу и думаю )))) |
| Автор: Anikmar 20.2.2009, 17:24 | ||
Да мы тут просто, так... Это...
Не знаю, где там буква Г |
| Автор: Kirgston 20.2.2009, 17:24 | ||||
| Ну ребят выручайте пожалуйста... чтото я наверно очень туплю... просто такая елементарщина .... а не могу решить... вот что сейчас получилось (не работает как надо) int x,y,o_x,o_y; o_x=cur_pos.x; o_y=cur_pos.y; x=((Screen->Width/2)-o_x); y=((Screen->Height/2)-o_y); x=x/100; y=y/100; SetCursorPos( (Screen->Width/2)-x, (Screen->Height/2)-y); Заранее большое спасибо! Добавлено через 3 минуты и 6 секунд
ОМГ! Да вы батюшка шайтан!!! Добавлено через 10 минут и 7 секунд Кстати поделитесь пожалуйста что такое "-->" я его вообще впервые вижу .... чайник я одним словом |
| Автор: Dmi3ev 20.2.2009, 17:48 |
| i-- декремент >0 условие |
| Автор: Anikmar 20.2.2009, 17:52 | ||
Ага Ну... есть немного... Ну... Добавлено через 3 минуты и 43 секунды
Логика эта изучалась в 90-х годах прошлого века, когда проходили товарища по фамилии Брезенхем (надеюсь не попутал в написании фамилии)... Там было грустнее - так как вольности типа float не проходили, да и программили мы на МК-ххх (такие калькуляторы были)... А так - это обычная математика. |
| Автор: Kirgston 20.2.2009, 18:13 |
| Аааааа это декремент И и проверка на больше нуля ... хе хе а я уж подумал это "-->" как бы... отдельная функция... Да что тут говорить ... =) чайник я и всё )))) хоть и с детства увлекаюсь, но начал заниматься программированием только год назад... начал с Делфи, а щас как месяц назад (может чуток меньше перешел на С++ ) ... да и проблемки у меня с математикой. Не дружу я с ней =) вот вроде логику компютера понимаю отлично, а вот незнание математики иногда подбивает сильно... А мы щас программим на MCS-51 ^_^ это ... не знаю... вроде до калькулятора дотягивает =) |