簡體   English   中英

Libgdx:使用tilemap繪制紋理

[英]Libgdx: Draw a texture with tilemap

我有一個非常簡單的問題。 但我無法解決。 我只是想在tilemap上繪制一個紋理。 使用theese代碼我可以看到地圖並移動,但我看不到紋理。

這是屏幕:

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();

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM