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

相关文章

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java中Runnable和Callable的区别和联系及使用场景

《Java中Runnable和Callable的区别和联系及使用场景》Java多线程有两个重要的接口,Runnable和Callable,分别提供一个run方法和call方法,二者是有较大差异的,本文... 目录一、Runnable使用场景二、Callable的使用场景三、关于Future和FutureTa

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图