zh_cn:tutorial:blockentityrenderers
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Next revisionBoth sides next revision | ||
zh_cn:tutorial:blockentityrenderers [2021/05/18 05:07] – [渲染动态使用方块实体渲染器方块和物品] solidblock | zh_cn:tutorial:blockentityrenderers [2021/05/18 05:18] – [例子] solidblock | ||
---|---|---|---|
Line 10: | Line 10: | ||
在不同的位置和大小,甚至更多。 | 在不同的位置和大小,甚至更多。 | ||
===== 例子 ===== | ===== 例子 ===== | ||
- | 在本教程中,我们将通过向其添加'' | + | 在本教程中,我们将通过向其添加'' |
- | 渲染器将显示一个自动点唱机,该自动点唱机漂浮在方块上方,上下,旋转。 | + | |
| | ||
- | 我们需要做的第一件事是创建我们的“ BlockEntityRenderer”类: | + | 我们需要做的第一件事是创建我们的'' |
<code java> | <code java> | ||
public class MyBlockEntityRenderer extends BlockEntityRenderer< | public class MyBlockEntityRenderer extends BlockEntityRenderer< | ||
- | // A jukebox itemstack | + | // 唱片机物品栏位 |
private static ItemStack stack = new ItemStack(Items.JUKEBOX, | private static ItemStack stack = new ItemStack(Items.JUKEBOX, | ||
| | ||
Line 28: | Line 27: | ||
} | } | ||
</ | </ | ||
- | 我们将需要注册我们的'' | + | |
- | 在单人游戏设置中这无关紧要,因为服务器与客户端在同一进程中运行。 | + | 我们将需要注册我们的'' |
- | 但是,在多人游戏设置中,服务器在与客户端不同的进程中运行,服务器代码 | + | |
- | 没有'' | + | |
- | 要仅为客户端运行初始化代码,我们需要设置一个'' | + | |
在实现'' | 在实现'' | ||
Line 39: | Line 35: | ||
@Override | @Override | ||
public void onInitializeClient() { | public void onInitializeClient() { | ||
- | // Here we will put client-only registration code | + | // 这里我们放置只在客户端注册的代码 |
} | } | ||
} | } | ||
</ | </ | ||
- | 将此类设置为'' | + | 将此类设置为'' |
<code javascript " | <code javascript " | ||
" | " | ||
Line 49: | Line 45: | ||
" | " | ||
{ | { | ||
- | " | + | " |
} | } | ||
] | ] | ||
Line 55: | Line 51: | ||
</ | </ | ||
- | 并在我们的ClientModInitializer中注册'' | + | 在我们的ClientModInitializer中注册'' |
<code java> | <code java> | ||
@Override | @Override | ||
Line 62: | Line 59: | ||
} | } | ||
</ | </ | ||
- | 我们重写了'' | + | 我们重写在每一帧都会被调用的'' |
- | -对于初学者,请调用'' | + | |
<code java> | <code java> | ||
public void render(DemoBlockEntity blockEntity, | public void render(DemoBlockEntity blockEntity, | ||
Line 69: | Line 65: | ||
} | } | ||
</ | </ | ||
- | 然后,我们执行自动点唱机的移动(matrices.translate)和旋转(matrices.multiply)。 | + | 然后,我们对唱片机进行平移(matrices.translate)和旋转(matrices.multiply)。 |
转换分为两部分:将其转换为高于方块中心的0.5、1.25和0.5。 | 转换分为两部分:将其转换为高于方块中心的0.5、1.25和0.5。 | ||
第二部分是更改的部分:y值的偏移量。 偏移量是任何给定框架的项目高度。 | 第二部分是更改的部分:y值的偏移量。 偏移量是任何给定框架的项目高度。 | ||
Line 76: | Line 72: | ||
| | ||
| | ||
- | | + | |
* 将其除以4可垂直压缩正弦波,因此该项目不会上下移动太多。 | * 将其除以4可垂直压缩正弦波,因此该项目不会上下移动太多。 | ||
<code java> | <code java> | ||
Line 90: | Line 86: | ||
} | } | ||
</ | </ | ||
- | 最后,我们将获得Minecraft的'' | + | 最后,我们将获得Minecraft的'' |
- | 我们还将'' | + | |
- | 躺在地上的物品。 尝试尝试使用此值,看看会发生什么(这是一个枚举)。 | + | |
在这些GL调用之后,我们还需要调用'' | 在这些GL调用之后,我们还需要调用'' | ||
<code java> | <code java> | ||
Line 104: | Line 99: | ||
</ | </ | ||
- | 您可以立即尝试新创建的方块实体渲染器。 | + | 您现在就可以尝试新创建的方块实体渲染器。但是,如果您没有使方块透明,您会发现有些不对劲——浮动的方块,唱片机是黑色的!这是因为默认情况下,//无论您在方块实体中渲染什么,都将接收该方块实体所在位置的光照度// |
- | 但是,如果您没有使方块透明,您会发现有些不对劲-浮动方块,点唱机是黑色的! | + | |
- | 这是因为默认情况下,无论您在方块实体中进行渲染的任何内容,都将接收光线,就好像它与方块实体处于同一位置一样。 | + | |
- | 因此,浮动方块从不透明的方块中接收inside的光,这意味着它没有接收到光! | + | |
- | 为了解决这个问题,我们将告诉Minecraft从上方的一个方块方块实体的位置接收光。 | + | |
- | 要获取灯光,我们在方块实体上方的位置调用'' | + | 要获取光照,我们在方块实体上方的位置调用'' |
- | 并使用灯光,我们在'' | + | |
<code java> | <code java> | ||
@Override | @Override | ||
Line 124: | Line 114: | ||
</ | </ | ||
- | 点唱机现在应具有适当的照明。 | + | 唱片机现在应该得到了适当的光照。 |
zh_cn/tutorial/blockentityrenderers.txt · Last modified: 2023/08/29 10:31 by wjz_p