Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Просмотр темы
 Распечатать тему
Обработка нажатий мыши
KulikowM
#1 Распечатать сообщение
Опубликовано 12.01.2013 19:52:37
Новичок


Сообщений: 5
Зарегистрирован: 12.01.13

Изучаю XNA, никак не могу разобраться с обработкой нажатий мыши.
Буду благодарен за подсказки)
 
Gamedaw
#2 Распечатать сообщение
Опубликовано 12.01.2013 20:03:59
Младший специалист


Сообщений: 23
Зарегистрирован: 05.01.13

Загрузить источник  GeSHi: C#
  1.  
  2. if (Mouse.GetState().LeftButton == ButtonState.Pressed) //проверка нажатия левой кнопки
  3. {
  4. //чё-то делать
  5. }
  6.  
Добавлено за 0.004 секунд, используя GeSHi 1.0.8.2

Это простейший пример. Можно сделать лучше
Изменил(а) Gamedaw, 12.01.2013 20:04:31
 
KulikowM
#3 Распечатать сообщение
Опубликовано 12.01.2013 20:08:12
Новичок


Сообщений: 5
Зарегистрирован: 12.01.13

Спасибо!
 
Gregory
#4 Распечатать сообщение
Опубликовано 13.01.2013 22:23:54
Специалист


Сообщений: 153
Зарегистрирован: 17.11.12

А можно и вот так-
Загрузить источник  GeSHi: C#
  1.  
  2. MouseState mouse = Mouse.GetState();
  3.  
  4. if(mouse.LeftButton == ButtonState.Pressed)
  5. {
  6. this.Exit(); //закрываем программу
  7. }
  8.  
  9.  
  10.  
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.2
 
Malli
#5 Распечатать сообщение
Опубликовано 14.01.2013 02:16:42
Аватар пользователя

Специалист


Сообщений: 89
Зарегистрирован: 16.02.12

Извиняюсь что немножко не в тему, но вот как делается такое событие:?
Значит есть объект, есть мышь. Я зажимаю кнопку мыши, и могу двигать объект. Отпускаю кнопку, объект останавливается на координатах мыши. И я снова зажимаю кнопку мыши, и объект должен перемещаться от своих старых координат. Как в стратегиях прокрутка карты средней или правой кнопкой мыши. Я думал что-то типа координаты мыши + расстояние до объекта, но это не то. Не подскажите алгоритм?
Заранее спасибо
Изменил(а) Malli, 14.01.2013 02:19:29
 
beaver
#6 Распечатать сообщение
Опубликовано 14.01.2013 08:01:56
Аватар пользователя

Администратор


Сообщений: 1772
Зарегистрирован: 22.02.09

Нужно сравнивать текущее состояние мыши с предыдущим. Вычисляется смещение (mouseCorrent.Position - mousePrev.Position), на эту разницу и двигается то что должно двигаться.
 
Malli
#7 Распечатать сообщение
Опубликовано 20.01.2013 18:09:17
Аватар пользователя

Специалист


Сообщений: 89
Зарегистрирован: 16.02.12

Чёта не то)
Загрузить источник  GeSHi: C#
  1.  
  2. position = new Vector2(currentMouse.X, currentMouse.Y) - new Vector2(oldMouse.X, oldMouse.Y);
  3.  
Добавлено за 0.004 секунд, используя GeSHi 1.0.8.2

Постоянно уходит вверх при каждом нажатии
 
PhilippOK
#8 Распечатать сообщение
Опубликовано 20.01.2013 19:37:48
Аватар пользователя

Старший специалист


Сообщений: 201
Зарегистрирован: 22.05.12

проверь последовательнсть в апдейте мыши
oldState = currentState;
currentState = Mouse.GetState();
 
Malli
#9 Распечатать сообщение
Опубликовано 20.01.2013 20:39:49
Аватар пользователя

Специалист


Сообщений: 89
Зарегистрирован: 16.02.12

Так у меня по событиям клавиш мыши организовано
Загрузить источник  GeSHi: C#
  1.  
  2. if (mouse.RightButton == ButtonState.Pressed)
  3. {
  4. position = new Vector2(currentMouse.X, currentMouse.Y) - new Vector2(newPosition.X, newPosition.Y);
  5. }
  6.  
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.2

Немного разобрался. Теперь перемещение происходит почему-то по двойному клику. На один клику координаты смещаются вверх и влево))
Изменил(а) Malli, 20.01.2013 22:13:30
 
PhilippOK
#10 Распечатать сообщение
Опубликовано 20.01.2013 22:07:41
Аватар пользователя

Старший специалист


Сообщений: 201
Зарегистрирован: 22.05.12

Загрузить источник  GeSHi: C#
  1. //Глобальные
  2. MouseState currentStaete;
  3. MouseState previousState;
  4.  
  5. public void Update(GameTime gameTime)
  6. {
  7. previousState = currentState;
  8. currentState = Mouse.GetState();
  9.  
  10. Vector2 pPos = new Vector2(previousState.X, previousState.Y);
  11. Vector2 cPos = new Vector2(currentState.X, currentState.Y);
  12. if (IsLeftMBtnJustPressed())
  13. {
  14. position += Vector2.UnitY * (float)gameTime.ElapsedGameTime.ElapsedSeconds * 0.1f;
  15. }
  16. if (IsRightMBtnJustPressed())
  17. {
  18.  
  19. position -= Vector2.UnitY * (float)gameTime.ElapsedGameTime.ElapsedSeconds * 0.1f;
  20. }
  21. if (Keyboard.GetState().IsKeyDown(Keys.LeftCtrl) && IsLeftMBtnJustPressed())
  22. position = cPos;
  23. }
  24.  
  25. private bool IsLeftMBtnJustPressed()
  26. {
  27. return (currentState .LeftButton == ButtonState.Pressed && previousState.LeftButton == ButtonState.Released);
  28. }
  29.  
  30. private bool IsRightMBtnJustPressed()
  31. {
  32. return (currentState .RightButton == ButtonState.Pressed && previousState.RightButton == ButtonState.Released);
  33. }
Добавлено за 0.009 секунд, используя GeSHi 1.0.8.2

И еще раз говорю то как я написал работать будет, но не правильно!!!!
Вся работа с клавиатурой, мышкой и прочими устройствами ввода должна быть реализована в отдельном классе!!!
ЗЫ
пишу код прямо на форуме - возможны мелкие огрехи в синтаксисе
 
Malli
#11 Распечатать сообщение
Опубликовано 20.01.2013 22:12:06
Аватар пользователя

Специалист


Сообщений: 89
Зарегистрирован: 16.02.12

Это ты смещаешь координаты по GameTime, а мне надо разницу между текущими координатами мыши и старым положением объекта. То что я написал немного подходит, но срабатывает по второму клику...
 
PhilippOK
#12 Распечатать сообщение
Опубликовано 20.01.2013 23:12:44
Аватар пользователя

Старший специалист


Сообщений: 201
Зарегистрирован: 22.05.12

для примера писал в чем проблема
if (Keyboard.GetState().IsKeyDown(Keys.LeftShift) && (currentState.LeftButton == ButtonState.Pressed))
position += cPos - pPos;
Изменил(а) PhilippOK, 20.01.2013 23:18:43
 
Перейти на форум:
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,28 секунд 8,709,593 уникальных посетителей