可点击的纹理

时间:2017-05-09 23:04:11

标签: java android android-studio libgdx textures

我是LibGdx和android studio的新手。 我试图创建可点击的纹理,一个用于游戏,另一个用于学分。 两者都应该打开一个新的空屏/事件。

public void create() {

    batch = new SpriteBatch();
    img = new Texture("Main_Screen.png");
    music = Gdx.audio.newMusic(Gdx.files.internal("bgmusic.wav"));
    music.play();
    music.setLooping(true);
    credits = new Texture("credits.png");
    play = new Texture("play.png");
}


@Override
public void render() {

    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    batch.draw(img, 0, 0);
    batch.draw(play, 340, 1400);
    batch.draw(credits, 340, 400);
    batch.end();
}

但是我不确定如何做到这一点,因为我也用纹理创建背景,所以如果有人能协助我帮助我,我会很高兴。

2 个答案:

答案 0 :(得分:0)

欢迎使用libGDX!

如果我正确理解您的问题,您正在尝试弄清楚如何更改游戏中的屏幕。从高层次来看,这是您需要做的事情:

  1. 在屏幕上绘制按钮纹理。
  2. 使用Gdx.input检测播放器何时抬起鼠标按钮(以及当它们按下时,它是否超过您的一个按钮)
  3. 发生这种情况时,切换到新屏幕(可能是新背景)。
  4. 我建议您先完成"A Simple Game""Extending the Simple Game"教程,以便熟悉libGDX以及GameScreen类的基础知识。

    接下来,尝试使用Scene2D.UI(第二个教程底部有链接)将StageTextButtons添加到主菜单。

    希望这有助于您入门 - 有关libGDX wiki的大量有用信息,我认为您会发现这些信息很有帮助。

答案 1 :(得分:0)

使用Sprite代替Texture,其中包含绘制2D精灵的几何,颜色和纹理信息。

MyGdxGame

public class MyGdxGame extends Game {

    public Screen menuScreen,creditsScreen,playScreen;

    @Override
    public void create () {

        menuScreen=new MenuScreen(this);
        creditsScreen=new CreditsScreen();
        playScreen=new PlayScreen();

        setScreen(menuScreen);
    }
}

MenuScreen

public class MenuScreen extends InputAdapter implements Screen  {

    SpriteBatch batch;
    Texture background,play,credits;

    Sprite backgoundSprite,playSprite,creditsSprite;
    private ExtendViewport extendViewport;

    OrthographicCamera cam;
    private float w=480;
    private float h=800;
    private Vector3 vector3;

    MyGdxGame game;
    Music music;

    public MenuScreen(MyGdxGame game){
        this.game=game;
    }

    @Override
    public void show() {

        batch = new SpriteBatch();
        cam = new OrthographicCamera();
        extendViewport=new ExtendViewport(w,h,cam);

        vector3=new Vector3();

        background = new Texture("Main_Screen.png");
        play=new Texture("play.png");
        credits=new Texture("credits.png");

        backgoundSprite=new Sprite(background);
        backgoundSprite.setSize(w,h);       // If resources are not in context of your viewport
        backgoundSprite.setPosition(0,0);  //Default Position

        playSprite=new Sprite(play);
        playSprite.setSize(100,100);
        playSprite.setPosition(w/2-playSprite.getWidth()/2,h/2+100);

        creditsSprite=new Sprite(credits);
        creditsSprite.setSize(100,100);
        creditsSprite.setPosition(w/2-creditsSprite.getWidth()/2,h/2-100);

        Gdx.input.setInputProcessor(this);

        music = Gdx.audio.newMusic(Gdx.files.internal("bgmusic.wav"));
        music.play();
        music.setLooping(true);   
    }

    @Override
    public void render(float delta) {

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(cam.combined);
        batch.begin();
        backgoundSprite.draw(batch);
        playSprite.draw(batch);
        creditsSprite.draw(batch);
        batch.end();
    }

    @Override
    public void resize(int width, int height) {

        extendViewport.update(width,height);
        cam.position.x = w /2;
        cam.position.y = h/2;
        cam.update();
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        vector3.set(screenX,screenY,0);
        Vector3 position=cam.unproject(vector3);
            if(playSprite.getBoundingRectangle().contains(position.x,position.y)) {
            game.setScreen(game.playScreen);
        }
        if(creditsSprite.getBoundingRectangle().contains(position.x,position.y)){
            game.setScreen(game.creditsScreen);
        }

        return super.touchDown(screenX, screenY, pointer, button);
    }

    @Override
    public void pause() { }

    @Override
    public void resume() { }

    @Override
    public void hide() { }

    @Override
    public void dispose() {
        batch.dispose();
        background.dispose();
        play.dispose();
        credits.dispose();
    }
}

CreditsScreen

public class CreditsScreen implements Screen {

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    }

    @Override
    public void resize(int width, int height) { }

    @Override
    public void pause() { }

    @Override
    public void resume() { }

    @Override
    public void hide() { }

    @Override
    public void dispose() { }
}

播放屏幕

public class PlayScreen implements Screen {

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    }

    @Override
    public void resize(int width, int height) { }

    @Override
    public void pause() { }

    @Override
    public void resume() { }

    @Override
    public void hide() { }

    @Override
    public void dispose() { }
}