java - 可点击的纹理

标签 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();
}

但是我不确定如何做到这一点,因为我也在创建带有纹理的背景,所以如果有人可以帮助我,我会非常高兴。

最佳答案

使用 Sprite 而不是 Texture,它保存用于绘制 2D sprite 的几何形状、颜色和纹理信息。

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

菜单屏幕

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

制作人员名单

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() { }
}

关于java - 可点击的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43881146/

相关文章:

android - Proguard 在 25.1.6 版本的 Android 工具中失败

java - 等待 2 个异步任务

java - Bootstrap 追加 div

java求助新手问题

Android Studio 问题 :Red Squiggly Lines Under Modules, 没有模拟器

Android Studio,如何设置共享库项目

android - 如何使用 3.x.x Gradle 插件在 Android Studio 中选择模块的风格

java - 媒体播放器错误

javascript - Cordova - 原生日历集成

android - Android Studio Bumblebee 中Git 或Github pull, push 报错的解决方法 | 2021.1.1