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

2023-10-31 19:10

本文主要是介绍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;/*** @author lingkang* @date 2021/10/4 15:34* @description 创建一个游戏 作为起点*/
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;@Overridepublic void create() {//游戏创建的一些准备放这里...batch = new SpriteBatch();font = new BitmapFont();font.setColor(Color.RED);// 进入欢迎页面setScreen(new WelcomeScreen(this));}// 其他的一些方法@Overridepublic 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;/*** @author lingkang* @date 2021/10/4 15:35* @description 欢迎页面*/
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/HieroLabel.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);}@Overridepublic void show() {}@Overridepublic 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();}}// 其他实现方法
}

游戏战斗画面

/*** @author lingkang* @date 2021/10/4 17:20* @description*/
public class GameScreen implements Screen {// 将游戏对象传入 方便操作private MyGame game;public GameScreen(MyGame game) {this.game = game;// 不同页面的帧率不同,有利于性能优化,这是游戏战斗页面,帧率调高Gdx.graphics.setForegroundFPS(38);}@Overridepublic void show() {}@Overridepublic 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();}}// 其他实现方法
}

游戏结束画面

/*** @author lingkang* @date 2021/10/4 17:20* @description*/
public class GameOverScreen implements Screen {// 将游戏对象传入 方便操作private MyGame game;public GameOverScreen(MyGame game) {this.game = game;// 不同页面的帧率不同,有利于性能优化Gdx.graphics.setForegroundFPS(3);}@Overridepublic void show() {}@Overridepublic 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/

这篇关于libGDX游戏开发之画面场景和画面自适应(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/317491

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.