【问题标题】:using multiple textures in libgdx efficiently在 libgdx 中有效地使用多个纹理
【发布时间】:2014-08-08 16:59:18
【问题描述】:

我是 libgdx 的新手,我只使用了 2 周。我的问题是了解纹理加载的工作原理。

我设法使用 gdx.files.internal(player.png) 或类似的东西加载了我的第一个纹理(播放器)并且效果很好,我添加了一些功能让他使用 if 键并排移动按下命令的东西,这也有效。

我的问题是在加载另一个纹理时出现的,我想制作一个敌方玩家。我对如何做到这一点知之甚少。我想如果我做了“gdx.files.internal(enemy.png)”,它会加载到我的敌人纹理中,但它没有,而是加载到另一个 player.png 纹理中。

我的问题是如何加载我的敌人.png。我看过一些有用的教程,但它每次都会一次又一次地加载我的播放器。

请任何人帮助我理解,我已经坚持了 3 天

如果需要,我可以显示我的代码,以防我做错了什么。如果有人能解释如何有效地使用多种纹理,那将很有帮助,因为我觉得我这样做的方式正是最佳实践

    package com.mohamed.JungleFighter;

import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;

//i'm extending libgdx's built in game class which implements the activity listener
public class JungleFighterMain extends Game {

    private OrthographicCamera camera;
    private SpriteBatch sBatch;
    private Texture player;
    private Texture enemy;
    //private SpriteBatch enemyBatch;
    private Sprite sprite;
    //just setting my game heighty and width
    public static int gameWidth = 500, gameHeight = 500;



    @Override
    public void create () {
        //camera related
        camera = new OrthographicCamera(gameWidth, gameHeight);
        //end of camera related
        sBatch = new SpriteBatch();
        player = new Texture(Gdx.files.internal("plane.png"));
        sprite = new Sprite(player);
        enemy = new Texture(Gdx.files.internal("enemy.png"));
        sprite = new Sprite(enemy);


    }

    public  void dispose() {
        sBatch.dispose();
        player.dispose();
        enemy.dispose();

    }



    @Override
    public void render () {

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        // camera related
           sBatch.setProjectionMatrix(camera.combined);


        //keyboard functions

        if(Gdx.input.isKeyPressed(Input.Keys.LEFT)){
            if(Gdx.input.isKeyPressed(Input.Keys.CONTROL_LEFT))
                sprite.translateX(-1f);
            else
                sprite.translateX(-20.1f);
        }
        if(Gdx.input.isKeyPressed(Input.Keys.RIGHT)){
            if(Gdx.input.isKeyPressed(Input.Keys.CONTROL_LEFT))
                sprite.translateX(1f);
            else
                sprite.translateX(20.1f);

        }

        sBatch.begin();
        //sprite.setPosition(-200, -200);
        sprite.draw(sBatch);
        sBatch.end();


    }


        public  void resize(int width, int height){


        }


        public  void pause(){

        }

        public  void resume(){

        }


    }

【问题讨论】:

  • 请出示您的代码。如果您使用 Texture enemy = new Texture(Gdx.files.internal("enemy.png")) 并在 render 方法中使用 SpriteBatch.draw(enemy, ...) 它应该绘制 enemy
  • 我已经更新了问题,我的代码现在附上了

标签: libgdx textures sprite 2d-games sprite-sheet


【解决方案1】:

我想我找到了你的问题

 player = new Texture(Gdx.files.internal("plane.png"));
    sprite = new Sprite(player);
    enemy = new Texture(Gdx.files.internal("enemy.png"));
    sprite = new Sprite(enemy);

看,你只有一个精灵。如果你只想让一个敌人只加载他,如果你想要两个,制作2个Sprites..

player = new Texture(Gdx.files.internal("plane.png"));
        sprite1 = new Sprite(player);
        enemy = new Texture(Gdx.files.internal("enemy.png"));
        sprite2 = new Sprite(enemy);

请记住,如果您想绘制纹理,也可以使用

batch.draw(textureName,xPos,yPos);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2011-04-03
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多