Libgdx:使用tilemap绘制纹理

伊吉特·奥兹德米尔

我有一个非常简单的问题。但我无法解决。我只想在tilemap上绘制纹理。使用泰斯语代码,我可以看到地图并移动,但是我看不到纹理。

这是屏幕:

package com.adsiz.areyoualive.screen;

import com.adsiz.areyoualive.game.Player;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.maps.tiled.*;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;

public class PlayScreen implements Screen, InputProcessor{
    public ScreenManager screenManager;
    public static float speed = 32;

    //tilemap & camera
    TiledMap tiledMap;
    OrthographicCamera camera;
    TiledMapRenderer renderer;
    //player
    Player player;
    //spritebatch
    SpriteBatch spriteBatch;

    public PlayScreen(){
        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();

        camera = new OrthographicCamera();
        camera.setToOrtho(false, w, h);
        camera.update();

        tiledMap = new TmxMapLoader().load("map/untitled.tmx");
        renderer = new OrthogonalTiledMapRenderer(tiledMap);

        spriteBatch = new SpriteBatch();

        camera.position.set(0, 3200, 0);

        Gdx.input.setInputProcessor(this);
        player = new Player(0, 3200);
        spriteBatch.setTransformMatrix(camera.combined);
    }

    @Override
    public void render(float delta) {
        Gdx.graphics.getGL20().glClearColor( 1, 1, 1, 1 );
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        Gdx.graphics.getGL20().glClear( GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );

        camera.update();
        renderer.setView(camera);
        renderer.render();

        spriteBatch.setProjectionMatrix(camera.combined);

        spriteBatch.begin();
        player.draw(spriteBatch);
        spriteBatch.end();
    }

    @Override
    public void resize(int width, int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void show() {
        // TODO Auto-generated method stub

    }

    @Override
    public void hide() {
        // TODO Auto-generated method stub

    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub

    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub

    }

    @Override
    public void dispose() {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean keyDown(int keycode) {
        switch (keycode) {
        case Keys.DOWN:
            camera.translate(0, -1*speed);
            player.moveDown();
            break;
        case Keys.UP:
            camera.translate(0, speed);
            player.moveUp();
            break;
        case Keys.LEFT:
            camera.translate(-1*speed, 0);
            player.moveLeft();
            break;
        case Keys.RIGHT:
            camera.translate(speed, 0);
            player.moveRight();
            break;
        }
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {

        return false;
    }

    @Override
    public boolean keyTyped(char character) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean scrolled(int amount) {
        // TODO Auto-generated method stub
        return false;
    }

}

这是我的player.draw函数:

public void draw(SpriteBatch batch){
        batch.draw(playerTexture, getPosX(), getPosY(), playerTexture.getWidth(), playerTexture.getHeight());
    }

我只想显示一个简单的纹理并将其在屏幕上移动。那上面有什么问题?你能帮我吗?

问候大家!

伊吉特·奥兹德米尔

我解决了自己的问题,我只是将地图渲染器更改为OrthogonalTileMapRenderer,并使用Batch of OrthogonalTileMapRenderer更改了SpriteBatch。

package com.adsiz.areyoualive.screen;

import com.adsiz.areyoualive.game.Player;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.maps.tiled.*;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;

public class PlayScreen implements Screen, InputProcessor{
    public ScreenManager screenManager;
    public static float speed = 32;

    //tilemap & camera
    TiledMap tiledMap;
    OrthographicCamera camera;
    OrthogonalTiledMapRenderer renderer;
    //player
    Player player;

    public PlayScreen(){
        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();

        camera = new OrthographicCamera();
        camera.setToOrtho(false, w, h);
        camera.update();

        tiledMap = new TmxMapLoader().load("map/untitled.tmx");
        renderer = new OrthogonalTiledMapRenderer(tiledMap);

        camera.position.set(0, 3200, 0);

        Gdx.input.setInputProcessor(this);
        player = new Player(0, 3200);
    }

    @Override
    public void render(float delta) {
        Gdx.graphics.getGL20().glClearColor( 1, 1, 1, 1 );
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        Gdx.graphics.getGL20().glClear( GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );

        camera.update();
        renderer.setView(camera);
        renderer.render();

        renderer.getSpriteBatch().begin();
        player.draw(renderer.getSpriteBatch());
        renderer.getSpriteBatch().end();

    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

libgdx:使用spritebatch绘制纹理时旋转纹理

来自分类Dev

Libgdx 类不绘制纹理

来自分类Dev

libgdx spritebatch不基于纹理的原点绘制

来自分类Dev

在LibGDX中将形状绘制为纹理

来自分类Dev

如何从imputProcessor类绘制纹理?LibGDX

来自分类Dev

如何在 LibGDX 中绘制纹理?

来自分类Dev

如何绘制纹理并使用VBO?

来自分类Dev

libGDX-通过SpriteBatch结果翻转绘制纹理

来自分类Dev

需要帮助优化 LibGDX、SpriteBatch 上的纹理绘制

来自分类Dev

libGDX更改tilemap

来自分类Dev

使用lwjgl在现代OpenGL中绘制纹理

来自分类Dev

如何将像素图旋转90º以在libgdx中绘制纹理?

来自分类Dev

有效地在libgdx中使用多个纹理

来自分类Dev

libgdx粒子效果可以使用纹理区域吗?

来自分类Dev

在LibGdx中放置纹理

来自分类Dev

libgdx assetmanager纹理加载

来自分类Dev

Libgdx渲染纹理与精灵

来自分类Dev

LIBGDX-纹理故障

来自分类Dev

libgdx什么尺寸的纹理?

来自分类Dev

libgdx的模型纹理错误

来自分类Dev

圆形纹理libGdx

来自分类Dev

LibGDX拼接纹理文件

来自分类Dev

Libgdx纹理大小Android

来自分类Dev

libgdx什么尺寸的纹理?

来自分类Dev

LIBGDX-纹理故障

来自分类Dev

LibGDX 中的纹理图集

来自分类Dev

SDL2不使用纹理绘制图像

来自分类Dev

CUDA / OpenGL互操作,使用CUDA绘制到OpenGL纹理

来自分类Dev

Opengl-使用纹理图集绘制圆柱体