栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

libGDX游戏开发之画面场景和画面自适应(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

libGDX游戏开发之画面场景和画面自适应(二)

libGDX游戏开发之画面场景切换(二)

libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm…国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式,仅限学习。

游戏开发需要切换各种场景,例如开始画面、游戏画面、gameover画面。
libGDX的字体样式默认不支持中文,需要自己创建。
Hiero工具下载地址:https://hub.fastgit.org/libgdx/libgdx/wiki/Hiero

创建游戏
import com.badlogic.gdx.Game;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;


public class MyGame extends Game {
    // 用于屏幕自适应的长宽
    public static final int VIEW_WIDTH = 624;
    public static final int VIEW_HEIGHT = 624;

    // 用于此game特有,方便game回收管理
    public SpriteBatch batch;
    public BitmapFont font;

    @Override
    public void create() {
        //游戏创建的一些准备放这里...
        batch = new SpriteBatch();
        font = new BitmapFont();
        font.setColor(Color.RED);

        // 进入欢迎页面
        setScreen(new WelcomeScreen(this));
    }
    // 其他的一些方法

    @Override
    public void dispose() {
        super.dispose();
        // 防止内存泄露
        batch.dispose();
        font.dispose();
    }
}
创建欢迎画面
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;


public class WelcomeScreen implements Screen {
    // 将游戏对象传入
    private MyGame game;
    // 画面自适应
    private Viewport viewport;
    // 类似 javafx 的 Stage 我们绘制的画面在它上面
    private Stage stage;

    public WelcomeScreen(MyGame game) {
        this.game = game;

        viewport = new FitViewport(MyGame.VIEW_WIDTH, MyGame.VIEW_HEIGHT, new OrthographicCamera());
        // 下面我们用 Stage 固定方式绘制画面
        stage = new Stage(viewport, game.batch);

        // 字体样式 默认不支持中文,下面我就用英文了 https://hub.fastgit.org/libgdx/libgdx/wiki/Hiero
        Label.LabelStyle font = new Label.LabelStyle(new BitmapFont(), Color.WHITE);

        // 创建一个表格
        Table table = new Table();
        table.center();
        table.setFillParent(true);

        table.add(new Label("welcome", font)).expandX();
        table.row();
        table.add(new Label("Any click join game", font)).expandX().padTop(10f);

        stage.addActor(table);
        // 不同页面的帧率不同,有利于性能优化
        Gdx.graphics.setForegroundFPS(3);
    }

    @Override
    public void show() {

    }

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

        // 使用类似 javafx 的绘制方式
        stage.draw();
        if (Gdx.input.isTouched()) {
            game.setScreen(new GameScreen(game));
            dispose();
        }
    }

	// 其他实现方法
}
游戏战斗画面
public class GameScreen implements Screen {
    // 将游戏对象传入 方便操作
    private MyGame game;

    public GameScreen(MyGame game) {
        this.game = game;
        // 不同页面的帧率不同,有利于性能优化,这是游戏战斗页面,帧率调高
        Gdx.graphics.setForegroundFPS(38);
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        ScreenUtils.clear(225, 225, 225, 1);

        game.batch.begin();
        game.font.draw(game.batch, "Welcome to Game Screen!!! ", 100, 150);
        game.font.draw(game.batch, "Any click to game over", 100, 100);
        game.batch.end();
        if (Gdx.input.isTouched()) {
            game.setScreen(new GameOverScreen(game));
            dispose();
        }
    }

// 其他实现方法
}
游戏结束画面
public class GameOverScreen implements Screen {
    // 将游戏对象传入 方便操作
    private MyGame game;

    public GameOverScreen(MyGame game) {
        this.game = game;
        // 不同页面的帧率不同,有利于性能优化
        Gdx.graphics.setForegroundFPS(3);
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        ScreenUtils.clear(225, 225, 225, 1);

        game.batch.begin();
        game.font.draw(game.batch, "Welcome to Game Over Screen!!! ", 100, 150);
        game.font.draw(game.batch, "Any click to Welcome Screen", 100, 100);
        game.batch.end();
        if (Gdx.input.isTouched()) {
            game.setScreen(new WelcomeScreen(game));
            dispose();
        }
    }
}

效果如下:

层级区分官网也有例子:
https://libgdx.com/dev/simple-game-extended/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293117.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号