Skip to content

Scene

自 2.2.1

Scene 在 GUI 元素内部渲染一个可交互的 3D Minecraft 世界视图。它使用 WorldSceneRendererTrackedDummyWorld 中绘制一组方块。该视口支持:

  • 拖拽旋转 — 按住左键并拖拽以环绕相机。
  • 滚轮缩放 — 鼠标滚轮改变缩放级别。
  • 方块交互 — 点击时会报告击中方块的位置和面。
  • FBO 模式 — 以任意分辨率渲染到帧缓冲对象中。

INFO

UIElement 上记录的所有内容(布局、样式、事件、数据绑定等)同样适用于此处。


用法

java
var scene = new Scene();

// 根据关卡创建场景:
scene.createScene(level); // 或 createScene(level, useFBO, size)

// 填充要渲染的方块:
var blocks = List.of(BlockPos.ZERO, new BlockPos(1, 0, 0));
scene.setRenderedCore(blocks);

// 监听点击事件:
scene.setOnSelected((pos, face) ->
    System.out.println("Clicked " + pos + " face " + face)
);

parent.addChild(scene);

字段

名称类型访问权限描述
rendererWorldSceneRenderer (nullable)private (getter, client-only)底层场景渲染器。
dummyWorldTrackedDummyWorld (nullable)private (getter)保存渲染方块的虚拟世界。
draggablebooleangetter/setter相机是否可通过拖拽旋转。默认值:true
scalablebooleangetter/setter鼠标滚轮是否改变缩放。默认值:true
intractablebooleangetter/setter是否报告方块点击。默认值:true
renderFacingbooleangetter/setter是否绘制面高亮。默认值:true
renderSelectbooleangetter/setter是否绘制选中方块高亮。默认值:true
showHoverBlockTipsbooleangetter/setter是否为悬停方块显示悬停提示。默认值:false
tickWorldbooleangetter/setterdummyWorld 是否每帧 tick。默认值:true
useOrthobooleanprivate (getter)使用正交投影时为 true
useCachebooleanprivate (getter)使用缓存缓冲区时为 true
autoReleasedbooleanprivate (getter)移除时是否释放渲染器资源。默认值:true
centerVector3fprivate (getter)相机注视目标(世界空间)。
rotationPitchfloatprivate (getter)相机俯仰角,单位为度。默认值:25
rotationYawfloatprivate (getter)相机偏航角,单位为度。默认值:-135
zoomfloatprivate (getter)相机距离。默认值:5
onSelectedBiConsumer<BlockPos, Direction>getter/setter点击方块时调用的回调。
lastHoverPosFaceBlockPosFace (nullable)private (getter)当前鼠标下方的方块/面。
lastClickPosFaceBlockPosFace (nullable)private (getter)上次点击的方块/面。
lastSelectedPosFaceBlockPosFace (nullable)private (getter)上次选中的方块/面。

方法

方法返回描述
createScene(Level)Scene使用给定关卡初始化渲染器(立即模式)。
createScene(Level, boolean, Size)Scene以给定分辨率初始化,可选 FBO 渲染。
setRenderedCore(Collection<BlockPos>)Scene设置要渲染的方块;自动调整相机。
setRenderedCore(Collection<BlockPos>, ISceneBlockRenderHook)Scene使用自定义渲染钩子设置方块。
setRenderedCore(Collection<BlockPos>, ISceneBlockRenderHook, boolean)Scene设置方块;autoCamera 控制是否重新定位相机。
useCacheBuffer(boolean)Scene启用或禁用编译后的绘制调用缓存。
useOrtho(boolean)Scene在透视投影和正交投影之间切换。
setOrthoRange(float)Scene设置正交投影范围(仅在启用正交时有效)。
setCenter(Vector3f)Scene设置世界空间中的相机注视目标。
setZoom(float)Scene设置相机缩放距离。
setCameraYawAndPitch(float yaw, float pitch)Scene立即设置相机偏航角和俯仰角。
setCameraYawAndPitchAnima(float yaw, float pitch, int duration)Sceneduration tick 内将相机动画到给定的偏航角和俯仰角。
needCompileCache()void将缓存标记为脏,以便在下一帧重新编译。
releaseRendererResource()void释放渲染器持有的 GPU 资源。
setBeforeWorldRender(Consumer<Scene>)Scene设置每次世界渲染通道前调用的钩子(仅限客户端)。
setAfterWorldRender(Consumer<Scene>)Scene设置每次世界渲染通道后调用的钩子。

Released under the MIT License.