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

相关文章

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java中接口和抽象类的异同以及具体的使用场景

《Java中接口和抽象类的异同以及具体的使用场景》文章主要介绍了Java中接口(Interface)和抽象类(AbstractClass)的区别和联系,包括相同点和不同点,以及它们在实际开发中的具体使... 目录一、接口和抽象类的 “相同点”二、接口和抽象类的 “核心区别”关键区别详解(避免踩坑)三、具体使

OFD格式文件及如何适应Python将PDF转换为OFD格式文件

《OFD格式文件及如何适应Python将PDF转换为OFD格式文件》OFD是中国自主研发的一种固定版式文档格式,主要用于电子公文、档案管理等领域,:本文主要介绍OFD格式文件及如何适应Python... 目录前言什么是OFD格式文档?使用python easyofd库将PDF转换为OFD第一步:安装 eas

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二