Hytale之我见 专注hytale服务器技术

我的世界红石电路研究

2019-10-27
hytaleme

我的世界创造了红石电路这一玩法,这让人十分感兴趣,因此,这里研究一下红石电路的在游戏中发挥的作用,以及相关的利与弊.

在文章的最后面,将会尝试自己实现一个简单的红石电路.

我的世界里红石电路的玩法

  1. 电源提供能量来源,如红石火把
  2. 传输线传递电能,如红石线
  3. 电动机械接受电能产生反应,如活塞

实现原理

这里以红石火把,红石线,活塞为例.

首先红石火把将红石线充能,然后红石线就有了充能等级(初始为15),然后下次红石更新时,毗邻红石线的充能等级就会被更新.

红石更新每红石刻(0.1秒)发生一次,因此表面上看起来,红石信号的传播是很快的,1秒可以传播10格.

作用

红石电路基本上是基于现实生活中的数字电路,可以实现自动工作的目的.

简单的说,红石电路就是可以帮你做事,甚至批量地做事,或循环地做事,自动地做事. 这有点类似于程序或函数,都是有输入,然后产生输出.

这里的输入可以是多种形式的,包括玩家交互方块,比如点击按钮;也可以由非玩家来触发,比如生物移动,日夜更替; 同时这里的输出也可以是多种形式的,比如常见的推动方块,让发射器发射物品等.

此外还可以循环,并非一次输入对应一次输出,比如弄个循环电路,每隔一定时间就推动方块收割甘蔗一次.

对于我的世界为什么要引入红石电路,按我的理解,我的世界里最基本的组成就是方块,而红石电路可以让方块产生关联,以增加更多的可能性与玩法. 比如按个按钮,就收割一大片甘蔗地,如果没有红石电路,玩家只能一个方块一个方块地打过去.

另一方面,它就类似于现实中电路的模拟,因此现实中电路可以做的事,它也能做. 当然因为效率的原因,游戏中模拟的红石电路只能做一些简单的事,而不能真做出游戏中的计算机来.

弊端

但是这种功能很容易构造出一个死循环,让方块无限更新,增加计算机的资源消耗,对此,我的世界本身并没有提供什么机制来解决或限制.

  • 单机情况下,这种资源消耗顶多让游戏卡死,最终被强制关闭,受影响的也只是玩家本身一个人而已.
  • 服务器情况下,资源消耗也是一样的,可能造成程序占用大量资源,从而影响服务器的正常运行与其它玩家的正常游玩,相对于单机这时的情况更加让人难以接受.

因此这种机制也是有利有弊的,在多人服务器内,需要采取一定的机制来防止玩家恶意制造红石电路来消耗服务器资源,尤其是大型,大量,密集,循环的红石电路.

红石电路能让方块产生什么关联?是否可以有更多关联?

只能向周围的方块传输指定强度的红石信号. 这里传输的有两个东西:

  1. 信号
  2. 强度

理论上来说,电路能够传输两种不同的信号就能构造出无限的可能性了(0与1 -> 字符 -> 程序),类似于电脑, 但由于游戏中的效率问题,实现复杂的功能是不现实的(比如实现一个编程语言).

因此,或许可以考虑传输更复杂的数据而不仅仅是一个信号来扩展更多的玩法. 但关键在于,必须所有传输的数据都存储在方块内部,数据随方块销毁,这样子除了存取快速,还能保证一致性.

自己实现一个简单的电路

>JS实现的简单电路<

符号说明:

  • s: 电源(永久为红色,初始电能为10级)
  • e/数字: 电线(e代表未充能的电线,数字代表指定电能等级)
  • i: 电灯(有电能就会亮,不会传导电能)

更新

为了更清晰地观察,更新周期为0.5秒,每次会更新周围4格的方块.

使用说明

点击格子可以切换格子内容(在’空’,’电源’,’电线’,’电灯’间切换)

PS

这个js脚本是直接用原生的es5来写的,所有变量方法都写在一起,再搞复杂点就要hold不住了.

本来是打算实现电能不会递减的模式,但过程中发现会递减更容易判断电源是否断开.

此外,考虑是否抽个时间思考下如何传输上面说的更复杂的数据来扩展更多的玩法…


上一篇 maven简易教程

下一篇 Tomcat研究

目录