Актер выбирается только в положении на 1 ячейку выше или на 1 ячейку ниже, чем он расположен - PullRequest
0 голосов
/ 03 марта 2020

Есть игровое поле с размерами 800х600. Поле представляет собой изображение с ячейками 4x4.

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Texture;

public class TriAngle extends Figure implements InputProcessor {

    private float w = 800;
    private float h = 600;

    public TriAngle() {

        setTextureRegion(new Texture(Gdx.files.internal("TriAngle.png")));
        setBounds(200, 400, w / 4, h / 4);
        Gdx.input.setInputProcessor(this);

    }
    @Override
    public boolean keyDown(int i) {
        return false;
    }

    @Override
    public boolean keyUp(int i) {
        return false;
    }

    @Override
    public boolean keyTyped(char c) {
        return false;
    }

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

        return true;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        return false;
    }

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

        if((screenX > getX() && screenX < getX() + getWidth())&&(screenY > getY() && screenY < getY() + getHeight())){
            this.setPosition(screenX, screenY, 0);
        }
        return true;
    }

    @Override
    public boolean mouseMoved(int x, int y) {
      /* if (x >= 0) {
            this.setPosition(x,y);
        }*/

        return true;
    }

    @Override
    public boolean scrolled(int i) {
        return false;
    }
}

Круглая помеченная клетка, при которой происходит переключение треугольника. введите описание изображения здесь

введите описание изображения здесь

Как сделать выбор рабочей ячейки строго под треугольником? И почему рабочая ячейка меняется в зависимости от положения треугольника (1 ячейка над треугольником или 1 ячейка под ним)?

1 Ответ

0 голосов
/ 04 марта 2020

Я вижу, что у вас проблемы с выборами и позициями, попробуйте использовать OrthographicCamera:

public class TriAngle extends Figure implements InputProcessor {

    private OrthographicCamera camera;
    private Vector3 unprojected;

    private float w = 800;
    private float h = 600;

    public TriAngle() {
        camera = new OrthographicCamera();
        camera.setToOrtho(false, w, h);
        unprojected = new Vector3();

        setTextureRegion(new Texture(Gdx.files.internal("TriAngle.png")));
        setBounds(200, 400, w / 4, h / 4);
        Gdx.input.setInputProcessor(this);
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        unprojected.set(camera.unproject(new Vector3(screenX, screenY, 0f)));
        if(unprojected.x > getX() && unprojected.x < getX() + getWidth() && unprojected.y > getY() && unprojected.y < getY() + getHeight()){
            this.setPosition(unprojected.x, unprojected.y, 0);
        }
        return true;
    }
}
...