Read this manual in English

Zalecamy zapoznanie się z ogólnym sposobem działania wejścia w Defoldzie, jak przechwytuje się wejście, jak wiążę z akcjami oraz w jakiej kolejności skrypty odbierają dane wejściowe. Dowiedz się więcej na temat systemu wejść w ogólnej instrukcji na temat Wejść.

Obsługa myszki

Wyzwalacze myszy pozwalają na przypisanie akcji gry do klawiszy myszy i kółka przewijania.

Przyciski myszy MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT i MOUSE_BUTTON_MIDDLE są równoznaczne z MOUSE_BUTTON_1, MOUSE_BUTTON_2 i MOUSE_BUTTON_3.

Poniższe przykłady korzystają z akcji pokazanych na powyższym obrazku. Możesz dowolnie nazywać akcje wejściowe - użyj takich, jakie są dla Ciebie najlepsze.

Przyciski myszki

Klawisze myszy generują zdarzenia wciśnięcia, zwolnienia i powtarzania. Przykład pokazuje, jak wykrywać wejście z lewego klawisza myszy (czy wciśnięty lub zwolniony):

function on_input(self, action_id, action)
    if action_id == hash("mouse_button_left") then
        if action.pressed then
            -- wciśnięto lewy przycisk myszy
        elseif action.released then
            -- wciśnięto prawy przycisk myszy
        end
    end
end

Akcje wejścia MOUSE_BUTTON_LEFT (lub MOUSE_BUTTON_1) są również wysyłane dla pojedynczego dotyku na urządzeniach dotykowych.

Kółko myszki

Wejścia kółka myszy wykrywają akcje przewijania. Pole action.value wynosi 1, jeśli kółko zostało przewinięte, a w przeciwnym przypadku 0 (akcje przewijania traktowane są tak, jak gdyby były to naciśnięcia klawiszy). Aktualnie Defold nie obsługuje dokładnego przewijania palcem na urządzeniach dotykowych.

function on_input(self, action_id, action)
    if action_id == hash("mouse_wheel_up") then
        if action.value == 1 then
            -- przewinięcie kółka myszy w górę
        end
    end
end

Ruch myszki

Ruch myszy jest obsługiwany osobno. Zdarzenia ruchu myszy nie są normalnie odbierane, chyba że w twoich przypisaniach wejścia jest ustawiony przynajmniej jeden wyzwalacz myszy.

Ruch myszy nie jest opisywany w ustawieniach input bindings, dlatego action_id jest ustawiane na nil, a tabela action jest wypełniana pozycją i zmianą pozycji myszy, kiedy mysz jest poruszona.

function on_input(self, action_id, action)
    if action.x and action.y then
        -- pozwól obiektowi gry śledzić ruch myszy/dotyku
        local pos = vmath.vector3(action.x, action.y, 0)
        go.set_position(pos)
    end
end

Obsługa urządzeń dotykowych

Wyzwalacze dotyku (pojedynczego i wielodotykowego (ang. multitouch)) są dostępne na urządzeniach iOS i Android w aplikacjach natywnych oraz w grach przeglądarkowych HTML5.

Pojedyncze dotknięcie

Wyzwalacze pojedynczego dotyku nie są konfigurowane z poziomu sekcji Touch Triggers w przypisaniach wejścia (input bindings). Zamiast tego, wyzwalacze pojedynczego dotyku są automatycznie konfigurowane, gdy masz skonfigurowane wejście z klawiszem myszy MOUSE_BUTTON_LEFT lub MOUSE_BUTTON_1.

Multi-touch

Wyzwalacze dotyku wielokrotnego wypełniają tabelę w tabeli akcji o nazwie touch. Elementy w tabeli są indeksowane liczbami całkowitymi od 1 do N, gdzie N to liczba punktów dotyku. Każdy element tabeli zawiera pola z danymi wejściowymi:

function on_input(self, action_id, action)
    if action_id == hash("touch_multi") then
        -- Twórz w każdym punkcie dotyku
        for i, touchdata in ipairs(action.touch) do
            local pos = vmath.vector3(touchdata.x, touchdata.y, 0)
            factory.create("#factory", pos)
        end
    end
end

Multi-touch nie może być przypisany do tej samej akcji co wejście klawisza myszy MOUSE_BUTTON_LEFT lub MOUSE_BUTTON_1. Przypisanie tej samej akcji efektywnie nadpisze wyzwalacze pojedynczego dotyku i uniemożliwi otrzymanie jakichkolwiek zdarzeń pojedyncze dotknięcie.

Gotowe rozwiązania do używania elementów sterowania na ekranie dotykowym (on-screen controls) czy ogólnie do obsługi przycisków i gałek analgowych z obsługą przeciągania i kliknięcia można znaleźć w bibliotece Defold-Input.

Detekcja kliknięć i dotknięć na obiekcie

Wykrywanie kliknięć lub dotknięć na komponentach wizualnych to bardzo częsta operacja, którą można znaleźć w wielu grach. Może to być interakcja użytkownika z przyciskiem lub innym elementem interfejsu użytkownika, a także interakcja z obiektem gry, takim jak jednostka kontrolowana przez gracza w grze strategicznej, skarb na poziomie w grze typu dungeon crawler czy postać oferująca zadanie w grze RPG. Sposób użycia różni się w zależności od rodzaju komponentu wizualnego.

Wykrywanie interakcji z węzłami GUI

Dla elementów interfejsu użytkownika istnieje funkcja gui.pick_node(node, x, y), która zwraca wartość true lub false, w zależności od tego, czy określona współrzędna mieści się w granicach węzła GUI. Aby dowiedzieć się więcej, zajrzyj do dokumentacji API, przykładu nawigacji wskaźnikiem myszy lub [przykładu z przyciskiem](/examples/gui/button/.

Wykrywanie interakcji z obiektami gry

W przypadku obiektów gry (game objects) jest bardziej skomplikowane wykrywanie interakcji, ponieważ takie rzeczy jak przekształcenia kamery i projekcje renderowania mogą wpłynąć na wymagane obliczenia. Istnieją dwa ogólne podejścia do wykrywania interakcji z obiektami gry:

  1. Śledzenie pozycji i rozmiaru obiektów gry, z którymi użytkownik może współdziałać, i sprawdzanie, czy współrzędne myszy lub dotyku mieszczą się w granicach któregoś z tych obiektów.
  2. Dołączanie obiektów kolizji do obiektów gry, z którymi użytkownik może współdziałać, oraz jednego obiektu kolizji, który podąża za myszą lub palcem i sprawdzanie kolizji między nimi.

Gotowe rozwiązanie do używania obiektów kolizji do wykrywania wejścia użytkownika z obsługą przeciągania i kliknięcia można znaleźć w elemencie Defold-Input.

W obu przypadkach konieczne jest przeliczenie współrzędnych przestrzeni ekranu myszy lub dotyku na współrzędne przestrzeni gry. Można to zrobić na kilka różnych sposobów:

  • Ręczne śledzenie, który widok i projekcja są używane przez skrypt renderujący i wykorzystaj to do przeliczenia współrzędnych na współrzędne przestrzeni gry. Zobacz instrukcję kamery.
  • Użyj bibliotek dla kamery i skorzystaj z dostarczonych funkcji konwersji z ekranu na świat.