欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

FXGL第一课学习心得:游戏应用执行流程详解

最编程 2024-07-23 21:50:14
...
package com.cah.api; import com.almasb.fxgl.app.GameApplication; import com.almasb.fxgl.app.GameSettings; import com.almasb.fxgl.dsl.FXGL; import com.almasb.fxgl.time.LocalTimer; import javafx.util.Duration; import java.util.Map; /** * <p> Api主类 </p> * * @author hongtool * @date 2023/8/13 */ public class ApiApp extends GameApplication { /** 计时器 */ private LocalTimer timer; public static void main(String[] args) { // 开始执行 launch(args); } /** 最先执行 */ public ApiApp() { System.out.println("构造器==》" + Thread.currentThread().getName()); } /** 第二步,执行游戏初始化设置 */ @Override protected void initSettings(GameSettings gameSettings) { // 可以设置 游戏的 标题、图标、版本、宽度、高度等,具体的内容稍后参考《GameSettings》学习资料 // 图标资源,参考 《FXGL 资源分类》学习资料 System.out.println("ApiApp.initSettings==》" + Thread.currentThread().getName()); // 注意:在此方法中,不要执行“FXGL.”的静态方法。会出错。因为这时候FXGL的相关属性引擎尚未加载 } /** 第三步,执行游戏的输入监听 */ @Override protected void initInput() { // 包括键盘输入,鼠标输入等 System.out.println("ApiApp.initInput==》" + Thread.currentThread().getName()); } /** 第四步,资源预加载初始化 */ @Override protected void onPreInit() { // 预加载游戏背景音乐,设置是否开启背景音乐和音效等。 System.out.println("ApiApp.onPreInit==》" + Thread.currentThread().getName()); } /** 第五步,初始化游戏参数 */ @Override protected void initGameVars(Map<String, Object> vars) { // 通过map的形式,保存游戏中的通用参数。 // 在其他地方使用 FXGL.getip(key)的方式进行获取,FXGL.set(key,value)的方式进行重新赋值 System.out.println("ApiApp.initGameVars==》" + Thread.currentThread().getName()); } /** 第六步,初始化游戏(重点) */ @Override protected void initGame() { // 初始化计时器(为什么要在这里初始化呢?因为) timer = FXGL.newLocalTimer(); System.out.println("ApiApp.initGame==》" + Thread.currentThread().getName()); } /** 第七步,初始化游戏物理引擎(重点) */ @Override protected void initPhysics() { // 物理碰撞事件等 System.out.println("ApiApp.initPhysics==》" + Thread.currentThread().getName()); } /** 第八步,初始化UI界面 */ @Override protected void initUI() { System.out.println("ApiApp.initUI==》" + Thread.currentThread().getName()); } /** 最后一步,游戏每一帧都会调用改方法。默认为60帧 */ @Override protected void onUpdate(double tpf) { // 如果计时器走过1秒,则打印 if(timer.elapsed(Duration.seconds(1))) { // 重置计时器 timer.capture(); System.out.println("ApiApp.onUpdate==》" + Thread.currentThread().getName()); } } }