Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax

Ответ
 
Опции темы
Старый 08.11.2007, 20:48   #1
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Обработка клика

Проблема в том, что обработка клика (в часности выбор объекта) работает неправильно.
Вот этот код:
If KeyHit(1) and obj.x > x and obj.x < x + width and obj.y > y and obj.y < y + height then
...
...
endif
Если нажать сначало не на объекте, а потом навести на него курсор то условие выполняется.
Вобщем то я догадываюсь, что проблема в том что KeyHit возвращает кол-во кликов с предыдущего вызова этой ф-ии.
Ну и как можно правильно все это переписать чтоб работало...
(Offline)
 
Ответить с цитированием
Старый 08.11.2007, 21:05   #2
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Обработка клика

flushkeys() ?
__________________
(Offline)
 
Ответить с цитированием
Старый 08.11.2007, 21:38   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Обработка клика

Ура! Наконецто пример реального столкновения с проблеммой, о которой я так долго всем твердил:
Привязывайте инпут к переменным!
IKhEsc=KeyHit(1)
If IKhEsc and obj.x > x and obj.x < x + width and obj.y > y and obj.y < y + height then
...
...
endif
И да будет вам счастье, не встречать подобных проблем больше. В начале цикла достаточно разик так вот назначить и всё
(Offline)
 
Ответить с цитированием
Старый 08.11.2007, 21:56   #4
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Обработка клика

Блин не то написал извеняюсь, не KeyHit(), а MouseHit()! Те должно быть:
If MouseDown() and obj.x > x and obj.x < x + width and obj.y > y and obj.y < y + height then
...
...
endif
(Offline)
 
Ответить с цитированием
Старый 08.11.2007, 22:15   #5
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Обработка клика

Trilliput, дык так же назнач как и я показал.
(Offline)
 
Ответить с цитированием
Старый 08.11.2007, 22:17   #6
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Обработка клика

ок, попробую..
(Offline)
 
Ответить с цитированием
Старый 08.11.2007, 22:40   #7
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Обработка клика

Вбщем то же самое. В итоге MouseHit() возвращает ко-во нажатий кнопки мыши с предыдущего вызова. Как бы глюка тут нет, просто логика исполнения задуманого неверна.
Вобще конешно можно использовать MouseDown() и например переменную IsClick отвеающюю за то что бы код выполнялся всего один раз за нажатие или что то в этом роде.
Но ище одна переменная - это опять переписывать код, дополнять типы и тп. Хотелось бы увидеть пример кода где меняется только алгаритм проверки пересечения и нажатия клавиши.
(Offline)
 
Ответить с цитированием
Старый 08.11.2007, 23:34   #8
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Обработка клика

Соображалка досоображала:
Если изменить так:
If MouseHit(1)=1 And MouseDown(1) and RectOverlap (x1,x2,y1,y2) and ... then
<Свой Код>
endif
Те:
MouseHit() - возвращает кол-во нажатий (одинарный или даблклик и тд)
MouseDown() - возвращает true если в данный момент кнопка мыши зажата.
Витоге условие выполняется только при нажатии на объекте.
(Offline)
 
Ответить с цитированием
Старый 09.11.2007, 19:16   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Обработка клика

Trilliput, и куууча лишних выховов.
Я написал кусочек кода, и он рабочий.
В начале главного цикла привязываешь весь инпут к переменным и всё, дальше юзаешь переменные, и всё работает на ура.
(Offline)
 
Ответить с цитированием
Старый 10.11.2007, 10:45   #10
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Обработка клика

Все работает точно так же. Разницы в работе кода с привязкой и без нее нет.
(Offline)
 
Ответить с цитированием
Старый 13.11.2007, 16:02   #11
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Обработка клика

Trilliput, Значит сделал не так как я сказал, Всё ИДЕАЛЬНО работает у меня. Код давай, будем смотреть.
(Offline)
 
Ответить с цитированием
Старый 28.11.2007, 02:20   #12
oxid
Нуждающийся
 
Регистрация: 20.08.2006
Сообщений: 54
Написано 3 полезных сообщений
(для 4 пользователей)
Re: Обработка клика

Мока ты не понял в чем проблема. МоусХит возвращает тру если кликнули не на объекте, драгом перетащили на него курсор и отпустили.
Лечится просто:
Либо для объекта, либо для группы вводим переменную или поле маусдаун.
В цикле проверки проверяем переменную маусдаун, если она не тру, то тестим состояние реальной мыши по MouseDown (а не Hit или еще чего) и положение мыша. Если мы доволны проверкой, то маусдаун делаем тру.
Если маусдаун у нас тру - т.е. мыша была уже нажата на нужном объекте, тогда тестим положение кнопки мыши опять по MouseDown. Если MouseDown не тру (т.е. кнопку отпустили) проверяем положение мыши и если она над нашим объектом - то радуемся этому и делаем задуманное, а если нет - то просто переменную маусдаун сбрасываем в фалс. И все заработает (если правильно напишешь)
(Offline)
 
Ответить с цитированием
Старый 28.11.2007, 13:28   #13
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Обработка клика

oxid, у тебя тоже самое, только через мега уОпу
Если заранее инпут выносить в переменные, то не будет проблем, и для нажатия на кнопку, нужно вообще юзать MouseRelease только такой функции нету, и нужно вычислять исходя из MouseDown и MouseHit, совместно с MouseHit
(Offline)
 
Ответить с цитированием
Старый 28.11.2007, 14:35   #14
oxid
Нуждающийся
 
Регистрация: 20.08.2006
Сообщений: 54
Написано 3 полезных сообщений
(для 4 пользователей)
Re: Обработка клика

Мока это называется не через жопу а правильное решение поставленной задачи (а через что оно - это фигня), как и у Триллипута с его комбинацией с MouseHit + MouseDown, а ты говоришь только о границах объекта, а не о том, как правильно мышь обработать, что к этому вопросу имеет частичное отношение, поэтому твой код у Триллипута и не заработал.
Плюс отличие моего способа от способа Триллипута в том, что у меня надо нажать и отпустить кнопку на объекте, а у него только нажать.
А твой не через жопусделанный код будет работать только если тестить MouseDown а не MouseHit и срабатывать при нажатии как и у Триллипута, а не при нажатии-отпускании, как у меня. И при этом будет косячить (попробуй потаскать мышей и с MouseHit и с MouseDown и посмотри что будет)
А ты даже не вьехал паччиму твой код не работает у него, в чем отличие приведенного мной способа. Так что имхо размышлять что и у кого и чез что сделано тебе пока рановато.

зы: хотя нет, я прогнал - твой код и с MouseHit работать будет. А не работает у Триллипута он скорее из-за того что он не выносит тестирование MouseHit на начало цикла обработки ВСЕХ объектов (о чем ты не указал), а делает это на каждом объекте. А тут надо понимать особенность этой команды, которая возвращает количество нажатий с момента своего последнего вызова.
т.е. если мы напишем два раза MouseHit, MouseHit после одного нажания кнопки, то первый раз вернется тру, а второй - фалс. Поэтому тестирование MouseHit надо запоминать в переменной перед началом обработки объектов.
Или тестит MouseHit не в каждом цикле обработки

ззы: @Trilliput
MouseHit() - возвращает кол-во нажатий (одинарный или даблклик и тд)
Нет просто через MouseHit ты не отследишь даблклик - почему - см выше.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка клавиатуры. GRAY_WOLF BugTracker 1 11.10.2009 22:00
Обработка массива. Abiron Алгоритмика 5 20.06.2009 01:02
Преобразование экранных координат клика мыши в мировые Aceton 3D-программирование 6 01.04.2009 01:46
Обработка WM_CLOSE impersonalis Blitz3D 5 13.08.2007 19:54
Обработка введёных данных Антон Борисович Основной форум 4 08.11.2006 20:57


Часовой пояс GMT +4, время: 17:16.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com