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