Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Java libGDX] Jak poprawnie przetwarzać eventy dotyku?

Ostatnio zmodyfikowano dzisiaj: 2h » 22 min
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[Java libGDX] Jak poprawnie przetwarzać eventy dotyku?
» 2025-12-18 12:25:57
Cześć. Problem z kodem mam taki, że podczas gry nie program wykrywa wszystkich kliknięć (TouchDown). Może problemem jest to, że brak kolejki eventów? Jak sądzicie? Poniżej zamieszczam kod jaki mam. (ChatGPT mi nie pomógł) :-/ Co dziwne - w Emulatorze Android Studio problem nie występuje (pewnie chodzi o multitouch). Pomożecie? Może być też jak wyłączyć multitouch w apce - też chyba pomoże.



package com.tbane.mysticgems.MyInput;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import com.tbane.mysticgems.Renderer;

public class MyInputProcessor extends InputAdapter {
    private OrthographicCamera camera;

    private boolean touchBegan = false;
    private boolean touchEnded = false;
    private boolean touchMoved = false;
    private Vector3 lastTouchPos = new Vector3();
    private boolean backPressed = false;

    public MyInputProcessor(OrthographicCamera camera) {
        this.camera = camera;
    }

    @Override
    public boolean keyDown(int keycode) {

        if (keycode == Input.Keys.BACK || keycode == Input.Keys.ESCAPE) {
            backPressed = true;
            return true;
        }

        return false;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {

        camera.unproject(lastTouchPos.set(screenX, screenY, 0));
        touchBegan = true;
        touchMoved = false;
        touchEnded = false;
        return true;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {

        camera.unproject(lastTouchPos.set(screenX, screenY, 0));
        touchEnded = true;
        touchBegan = false;
        touchMoved = false;
        return true;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {

        camera.unproject(lastTouchPos.set(screenX, screenY, 0));
        touchMoved = true;
        touchBegan = false;
        touchEnded = false;
        return true;
    }
    public void setBackPressed() { backPressed = true; }

    public boolean isTouchBegan() { return touchBegan; }
    public boolean isTouchEnded() { return touchEnded; }
    public boolean isTouchMoved() { return touchMoved; }
    public boolean isBackPressed() { return backPressed; }

    public Vector3 getTouchPosition() { return lastTouchPos.cpy(); }
    public float getTouchX() {
        float normalizedX = (lastTouchPos.x + 1f) * 0.5f; // 0..1
        float scale = Math.min(
            (float)Gdx.graphics.getWidth() / Renderer.VIRTUAL_WIDTH,
            (float)Gdx.graphics.getHeight() / Renderer.VIRTUAL_HEIGHT
        );
        float offsetX = (Gdx.graphics.getWidth() - Renderer.VIRTUAL_WIDTH * scale) * 0.5f;
        return (normalizedX * Gdx.graphics.getWidth() - offsetX) / scale;
    }

    public float getTouchY() {
        float normalizedY = (lastTouchPos.y + 1f) * 0.5f; // 0..1
        float scale = Math.min(
            (float)Gdx.graphics.getWidth() / Renderer.VIRTUAL_WIDTH,
            (float)Gdx.graphics.getHeight() / Renderer.VIRTUAL_HEIGHT
        );
        float offsetY = (Gdx.graphics.getHeight() - Renderer.VIRTUAL_HEIGHT * scale) * 0.5f;
        return (normalizedY * Gdx.graphics.getHeight() - offsetY) / scale;
    }

    public void reset() {
        touchBegan = false;
        touchEnded = false;
        touchMoved = false;
        backPressed = false;
    }
}
P-183680
DejaVu
» 2025-12-18 13:31:03
Ty masz jakiegoś ułomnego chata czy co, że nie rozwiązuje Ci problemów? :)
P-183681
skovv
» 2025-12-18 14:28:09
Tu chyba nie chodzi o ułomnego chata tylko o to, że nie wiem.. nie chce Ci się stary pogłówkować dobrze czy coś? Z programowaniem jest tak, że niestety to sport typowo do główkowania i chyba o to w tym chodzi a jak patrzę na forum to wygląda ono jak twój dziennik haha :D Ogółem jak coś nie działa to napisz sobie osobno prostą apke która robi tylko to co chcesz by działało. Jak zadziała to porównaj z tym co masz w głównej apce, przenieś/popraw i z głowy :) Jak nie działa dalej to główkuj dalej, cenna nauka!
P-183682
tBane
Temat założony przez niniejszego użytkownika
» 2025-12-19 00:05:04
Zrezygnowałem z subskrypcji więc jakość odpowiedzi spadła :-/ dotyk działa dobrze w menu głównym a nie działa w grze. Nie wiem co może być tego powodem. Dlatego piszę. Pierwszy raz pracuję z telefonem i wolę spytać się ekspertów jak coś zrobić, niż zrobić źle.

Jutro jeszcze do tego przysiądę, ale wątpię bym sam rozwiązał ten problem :-/
P-183684
tBane
Temat założony przez niniejszego użytkownika
» 2025-12-19 00:22:08
Zauważyłem też że touchEnded działa a touchBegan już nie
P-183685
« 1 »
  Strona 1 z 1