Alexeee
@Alexeee
Разработчик игр

Как реализовать двойной клик (Double Click)?

Мне нужна простая реализация дабл клика в юнити на C#.

При двойном нажатии по объекту - он поворачивается на определенный угол.
Не могу придумать алгоритм... Искал в Интернете - ничего толкового не нашел. На форумах что-то было, но они на английском... и код там был мне не понятен.
  • Вопрос задан
  • 5297 просмотров
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
простая реализация?) и на объекты кликать.
тогда если умеете кодить (судя по описанию вопроса маловероятно) вот вам план так сказать

1) отследить первое нажатие и запустить таймер
2) отследить второе нажатие
3) проверить что таймер не больше значения (что достаточно быстро совершен двойной клик, потом этот параметр можно и поднастроить для приятного экспириенса)
4) проверить что первый и второй клик произошли рядом (координаты не далеко, какие-нибудь меньше 1 процента экранного места друг от друга)

если и таймер маленький и клики рядом - считает что был дабл клик.

а там хоть лучом, хоть по интерфеису, принцип останется таким же.

и все это не оч сложно( но с телефона писать сюда для вас код увы) да и полезно будет самому сделать
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@narntop
Такой код понятен? Хороший пример!)
UINT TimerId;
int clicks;

    VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
    {
        KillTimer(NULL, TimerId);
        if (clicks < 2 && !double_click){
            MessageBox(hWnd, L"Show Widget", L"Widget", MB_OK);
        }

        clicks = 0;
    }



  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {

        int wmId, wmEvent;
        PAINTSTRUCT ps;
        HDC hdc;
        TCHAR szHello[MAX_LOADSTRING];
        LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
        UINT uID;
        UINT uMouseMsg;

        uID = (UINT)wParam;
        uMouseMsg = (UINT)lParam;

        if (uMouseMsg == WM_LBUTTONDBLCLK){
            double_click = true;
            MessageBox(hWnd, L"Double click", L"CAPT", MB_OK);
            return 0;
        }
        if (uMouseMsg == WM_LBUTTONDOWN){
            double_click = false;
            clicks++;

            //single click opens context menu
            if (clicks == 1){
                TimerId = SetTimer(NULL, 0, 500, &TimerProc);
            }
            return 0;
        }
    ,...
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы