【问题标题】:Java LibGDX how to check if sprite stands on specific tile e.g. door?Java LibGDX如何检查精灵是否站在特定的瓷砖上,例如门?
【发布时间】:2021-01-23 21:33:36
【问题描述】:

当精灵站在特定地图的特定图块上时,我想更改地图(方法 changeMapToWinter())。我在地图上没有图层。

目前我做类似的事情 if(sprite.getX() > 100 && sprite.getX() 100 && sprite.getY()

    Texture img;
    TiledMap tiledMap;
    OrthographicCamera camera;
    TiledMapRenderer tiledMapRenderer;
    SpriteBatch sb;
    Texture texture;
    Sprite sprite;
    private ShapeRenderer shapeRenderer;
    private TiledMapTileLayer tileLayer;
    private TiledMap winterMap;


    @Override
    public void create() {
        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();
        camera = new OrthographicCamera();
        camera.setToOrtho(false, w, h);
        camera.update();
        tiledMap = new TmxMapLoader().load("untitled.tmx");
        winterMap = new TmxMapLoader().load("untitled2.tmx");
        tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);
        Gdx.input.setInputProcessor(this);
        sb = new SpriteBatch();
        texture = new Texture(Gdx.files.internal("bold_brown_blue-1.png"));
        sprite = new Sprite(texture);
    }

    void changeMapToWinter() {
        tiledMap.dispose();
        winterMap = new TmxMapLoader().load("untitled2.tmx");
        tiledMapRenderer = new OrthogonalTiledMapRenderer(winterMap);
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        camera.update();
        tiledMapRenderer.setView(camera);
        tiledMapRenderer.render();
        sb.begin();
        sb.draw(sprite, (int) (Gdx.app.getGraphics().getWidth() / 2) - (sprite.getWidth()), (int) (Gdx.app.getGraphics().getHeight() / 2) - (sprite.getHeight() / 2));
        sb.end();

        Vector3 click = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
        TiledMapTileLayer layer = (TiledMapTileLayer)tiledMap.getLayers().get(0);

        // WANT TO CHANGE IT
        if(sprite.getX() > 100 && sprite.getX() < 200 && sprite.getY() > 100 && sprite.getY() < 200)
            changeMapToWinter();
    }

【问题讨论】:

  • 更改此代码以便能够将其用于多个地图的一种方法是 add an object in your map 并使用此对象的位置作为坐标,而不仅仅是硬编码门。 This answer 解释了如何从 LibGDX 中的地图中获取对象。

标签: java android libgdx


【解决方案1】:

您可能使用的解决方案可能是这样的:

Rectangle changePosition = new Rectangle(100,100,100,100);
if(sprite.getBoundingRectangle().overlaps(changePosition)) ...

矩形的构造函数具有这种格式Rectangle(float x, float y, float width, float height)

此外,由于您没有考虑精灵的大小,因此这与您的代码的行为会有些不同,但这段代码会。

顺便说一句,如果您无法在 Rectangle 类或您正在使用的任何形状中找到合适的函数,那么 LibGDX 有有用的类来解决此类问题。它被称为Intersector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多