Обработка клика
Проблема в том, что обработка клика (в часности выбор объекта) работает неправильно.
Вот этот код: Код:
If KeyHit(1) and obj.x > x and obj.x < x + width and obj.y > y and obj.y < y + height then Вобщем то я догадываюсь, что проблема в том что KeyHit возвращает кол-во кликов с предыдущего вызова этой ф-ии. Ну и как можно правильно все это переписать чтоб работало... |
Re: Обработка клика
flushkeys() ?
|
Re: Обработка клика
Ура! Наконецто пример реального столкновения с проблеммой, о которой я так долго всем твердил:
Привязывайте инпут к переменным! Код:
IKhEsc=KeyHit(1) |
Re: Обработка клика
Блин не то написал :) извеняюсь, не KeyHit(), а MouseHit()! Те должно быть:
Код:
If MouseDown() and obj.x > x and obj.x < x + width and obj.y > y and obj.y < y + height then |
Re: Обработка клика
Trilliput, дык так же назнач как и я показал.
|
Re: Обработка клика
ок, попробую..
|
Re: Обработка клика
Вбщем то же самое. В итоге MouseHit() возвращает ко-во нажатий кнопки мыши с предыдущего вызова. Как бы глюка тут нет, просто логика исполнения задуманого неверна.
Вобще конешно можно использовать MouseDown() и например переменную IsClick отвеающюю за то что бы код выполнялся всего один раз за нажатие или что то в этом роде. Но ище одна переменная - это опять переписывать код, дополнять типы и тп. Хотелось бы увидеть пример кода где меняется только алгаритм проверки пересечения и нажатия клавиши. |
Re: Обработка клика
Соображалка досоображала:
Если изменить так: Код:
If MouseHit(1)=1 And MouseDown(1) and RectOverlap (x1,x2,y1,y2) and ... then MouseHit() - возвращает кол-во нажатий (одинарный или даблклик и тд) MouseDown() - возвращает true если в данный момент кнопка мыши зажата. Витоге условие выполняется только при нажатии на объекте. |
Re: Обработка клика
Trilliput, и куууча лишних выховов.
Я написал кусочек кода, и он рабочий. В начале главного цикла привязываешь весь инпут к переменным и всё, дальше юзаешь переменные, и всё работает на ура. |
Re: Обработка клика
Все работает точно так же. Разницы в работе кода с привязкой и без нее нет.
|
Re: Обработка клика
Trilliput, Значит сделал не так как я сказал, Всё ИДЕАЛЬНО работает у меня. Код давай, будем смотреть.
|
Re: Обработка клика
Мока ты не понял в чем проблема. МоусХит возвращает тру если кликнули не на объекте, драгом перетащили на него курсор и отпустили.
Лечится просто: Либо для объекта, либо для группы вводим переменную или поле маусдаун. В цикле проверки проверяем переменную маусдаун, если она не тру, то тестим состояние реальной мыши по MouseDown (а не Hit или еще чего) и положение мыша. Если мы доволны проверкой, то маусдаун делаем тру. Если маусдаун у нас тру - т.е. мыша была уже нажата на нужном объекте, тогда тестим положение кнопки мыши опять по MouseDown. Если MouseDown не тру (т.е. кнопку отпустили) проверяем положение мыши и если она над нашим объектом - то радуемся этому и делаем задуманное, а если нет - то просто переменную маусдаун сбрасываем в фалс. И все заработает (если правильно напишешь) |
Re: Обработка клика
oxid, у тебя тоже самое, только через мега уОпу ;)
Если заранее инпут выносить в переменные, то не будет проблем, и для нажатия на кнопку, нужно вообще юзать MouseRelease только такой функции нету, и нужно вычислять исходя из MouseDown и MouseHit, совместно с MouseHit |
Re: Обработка клика
Мока это называется не через жопу а правильное решение поставленной задачи (а через что оно - это фигня), как и у Триллипута с его комбинацией с MouseHit + MouseDown, а ты говоришь только о границах объекта, а не о том, как правильно мышь обработать, что к этому вопросу имеет частичное отношение, поэтому твой код у Триллипута и не заработал.
Плюс отличие моего способа от способа Триллипута в том, что у меня надо нажать и отпустить кнопку на объекте, а у него только нажать. А твой не через жопусделанный код будет работать только если тестить MouseDown а не MouseHit и срабатывать при нажатии как и у Триллипута, а не при нажатии-отпускании, как у меня. И при этом будет косячить (попробуй потаскать мышей и с MouseHit и с MouseDown и посмотри что будет) А ты даже не вьехал паччиму твой код не работает у него, в чем отличие приведенного мной способа. Так что имхо размышлять что и у кого и чез что сделано тебе пока рановато. зы: хотя нет, я прогнал - твой код и с MouseHit работать будет. А не работает у Триллипута он скорее из-за того что он не выносит тестирование MouseHit на начало цикла обработки ВСЕХ объектов (о чем ты не указал), а делает это на каждом объекте. А тут надо понимать особенность этой команды, которая возвращает количество нажатий с момента своего последнего вызова. т.е. если мы напишем два раза MouseHit, MouseHit после одного нажания кнопки, то первый раз вернется тру, а второй - фалс. Поэтому тестирование MouseHit надо запоминать в переменной перед началом обработки объектов. Или тестит MouseHit не в каждом цикле обработки :dontknow: ззы: @Trilliput Цитата:
|
Часовой пояс GMT +4, время: 16:43. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot