Ceiling Hover/zh: Difference between revisions

From Minecraft Parkour Wiki
Content added Content deleted
(Created page with "天花板悬停是一个小故障,它使玩家在天花板和有弹性的方块(史莱姆,或自 1.12 起的床)之间“悬停”。 它可以通过跳到天花板下...")
No edit summary
 
(23 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>
[[File:Slime Hover Setup.png|thumb|在 1.8 中,这是唯一可用于执行天悬停的设置 (1.8125bc 下有史莱姆)]]
[[File:Slime Hover Setup.png|thumb|在 1.8 中,这是唯一能触发花板悬停的摆放(1.8125bc 下有史莱姆]]


<youtube>bijMuKlme7k</youtube>
<youtube>bijMuKlme7k</youtube>


天花板悬停是一个小故障,它使玩家在天花板和有弹性的方块(史莱姆,或 1.12 的床)之间“悬停”。 它可以通过跳到天花板下来执行,使得天花板下方块 2.001b 具有弹跳特性
天花板悬停是一个使玩家在天花板和有弹性的方块(史莱姆,或 1.12 及以上的床)之间“悬停”的故障
当跳跃,且天花板下方 2.001 格处的方块有弹性特性时会触发。




Line 11: Line 12:




<span id="Explanation"></span>
== 解释 ==
== 解释 ==


每当玩家与一个方块(地或天花板)垂直碰撞时,游戏将应用碰撞物理。
每当玩家在垂直方向上与一个方块(地或天花板)垂直碰撞时,游戏将应用碰撞物理。


对于几乎每个方块,这只是意味着将玩家的垂直速度设为 0。
对于几乎所有的方块来说,这代表将玩家的垂直速度设为 0。


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
/* in class Block */
/* Block 类中 */
public void onVerticalCollision(Entity entityIn)
public void onVerticalCollision(Entity entityIn)
{
{
Line 30: Line 32:


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
/* in class BlockSlime */
/* BlockSlime 类中 */
public void onVerticalCollision(Entity entityIn)
public void onVerticalCollision(Entity entityIn)
{
{
Line 41: Line 43:




* 如果玩家在潜行,它将被视为常规碰撞(垂直移动0)
* 玩家在潜行,则会被视为常规碰撞垂直速度被设为 0)
* 否则,它将检查玩家的速度是否为负,然后将其反转。
* 否则程序会检查玩家的速度是否为负,然后将其反转。






注意,如果玩家以某种方式以正速度移动(而不是潜行),则不会发生任何事情
需要注意,如果玩家以某种方式以正速度移动(且没有潜行),则什么都不会发生。


事实上,这个故障发生情况
导致此错误原因






当游戏检测到垂直碰撞时,它会考虑在玩家位置下0.2米的方块应用碰撞物理(就算是天花板碰撞……)
当游戏检测到垂直碰撞时,它会考虑在玩家位置下 0.2 米的方块应用碰撞物理(甚至碰到天花板也会如此……)




让我们回顾一下1.8125bc天花板悬停设置的步骤:
让我们回顾一下 1.8125bc 天花板悬停摆放的步骤


#在1.8125bc下跳跃会玩家下方0.2米的方块发生垂直碰撞(在地面)
#在 1.8125bc 下跳跃会将垂直碰撞应用于玩家下方 0.2 米的方块地面)。
#如果方块是黏液块,那么垂直速度不会设置为0,玩家仍然悬在天花板下。
#如果下方方块是黏液块,那么垂直速度不会设置为 0,玩家仍然悬在天花板下。
#重复步骤(2),直到玩家的垂直速度由于重力而变为负值。
#重复步骤(2),直到玩家的垂直速度由于重力而变为负值。




'''注意:'''这个小故障只会发生几Ticks,但通过跳跃提升持续时间会更长。天花板悬停可以随时通过潜行中断。
'''注意'''这个小故障只会发生几 Ticks,但可以通过跳跃提升延长持续时间。天花板悬停可以随时通过潜行中断。








<span id="Consequences"></span>
== 结 ==
== 结 ==


这个故障非常微不足道:它不会以任何方式破坏游戏,并且需要使用非常具体设置
这个故障影响极小:它不会以任何方式破坏游戏,并且需要非常精准摆放才能利用。

Latest revision as of 04:58, 16 August 2023

Other languages:
在 1.8 中,這是唯一能觸發天花板懸停的擺放(1.8125bc 下方有史萊姆)

天花板懸停是一個能使玩家在天花板和有彈性的方塊(史萊姆,或者 1.12 及以上的床)之間「懸停」的故障。 當跳躍,且天花板下方 2.001 格處的方塊有彈性特性時會觸發。




解釋

每當玩家在垂直方向上與一個方塊(地面或天花板)垂直碰撞時,遊戲將應用碰撞物理。

對於幾乎所有的方塊來說,這代表將玩家的垂直速度設為 0。

/* 在 Block 类中 */
public void onVerticalCollision(Entity entityIn)
{
    entityIn.motionY = 0.0D;
}


但有一個例外:粘液塊(和 1.12+ 中的床)。

/* 在 BlockSlime 类中 */
public void onVerticalCollision(Entity entityIn)
{
    if (entityIn.isSneaking())
        super.onVerticalCollision(entityIn);
    else if (entityIn.motionY < 0.0D)
        entityIn.motionY = -entityIn.motionY;
}


  • 若玩家在潛行,則會被視為常規碰撞(垂直速度被設為 0)
  • 否則程序會檢查玩家的速度是否為負,然後將其反轉。


需要注意,如果玩家以某種方式以正速度移動(且沒有潛行),則什麼都不會發生。

這就是導致此錯誤的原因。


當遊戲檢測到垂直碰撞時,它會考慮在玩家位置下 0.2 米的方塊上應用碰撞物理(甚至碰到天花板也會如此……)


讓我們回顧一下 1.8125bc 天花板懸停擺放的步驟:

  1. 在 1.8125bc 下跳躍會將垂直碰撞應用於玩家下方 0.2 米的方塊(地面)。
  2. 如果下方方塊是黏液塊,那麼垂直速度不會設置為 0,玩家仍然懸停在天花板下。
  3. 重複步驟(2),直到玩家的垂直速度由於重力而變為負值。


注意:這個小故障只會發生幾 Ticks,但可以通過跳躍提升延長持續時間。天花板懸停可以隨時通過潛行來中斷。



結論

這個故障影響極小:它不會以任何方式破壞遊戲,並且需要非常精準的擺放才能利用。