-
Java:
快速启动可采用基于CRIU的Open Liberty InstantOn,原理是构建镜像时将内存中的Java程序直接快照化。
镜像 FROM open-liberty:beta-java17 认为JDK17,而 FROM icr.io/appcafe/open-liberty:beta 则默认为JDK21。
优化内存占用可采用基于GraalVM的Quarkus,原理是编译时会转译为本地原生程序。
-
Java相关:
解决 - Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling
// implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.2")
ObjectMapper om = JsonMapper.builder().addModule(new JavaTimeModule()).build();
-
Java Vs. C#:
类型转换 - 均支持(NewObj)OldObj;候选转换(仅单层括号):Java用NewObj.class.cast(OldObj).x(); C#用(OldObj as NewObj).x();
方法覆盖和隐藏 - Java子类存在父类同名方法即覆盖;执行实际对象的方法;而C#同名(或new修饰的方法)则是隐藏方法,即根据声明类型而决定执行谁的方法,且覆盖方法必须存在关键词 父virtual+子override 。
-
Gradle:
为了方便统一构建,可用上gradle默认任务(./gradle时无需任务名,可写至build.gradle首行) - defaultTasks("clean","run");
-
Godot:
必须在【编辑器设置→导出→Android】中指定 Java17 版本(版本不能高也不能低) java_sdk_path = E:/java/jdk-17_windows-x64_bin/jdk-17.0.12 和 android_sdk_path = C:\Users\person\AppData\Local\Android\Sdk
shader_cache超长路径报 Safe save failed,临时解决:编辑器设置->文件系统->保存时->勾掉 Safe Save...。
定位玩家应首选Godot场景唯一节点: GetNode<Node3D>("%Player") // Player节点右键点"% Access as Unique Name"
工作流:
资源导入导出 - 总体原则是实现直接导入,但不进行额外设置,且也不能破坏在用属性值,解决办法是通过动画树隔离下:
AnimationTree.TreeRoot(AnimationNodeBlendTree等).AddNode("动画名", AnimationNodeAnimation(必须UseCustomTimeline=true时属性LoopMode方生效)) 。