本帖最后由 乙烯_中国 于 2016-3-20 17:49 编辑
复制代码

复制代码
复制代码

复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
大家好,我是乙烯。
今天呢,来教大家怎样制作一个单刻输出的GPS,相信认识我的人多多少少会知道我在几个月前水过一个GPS原型机。在那时syl跟我说的GPS能够单刻输出结果。这点让我很是在意,并一直琢磨着如何做到。之前的一次意外让我无意中摸索到了诀窍。
等我做出来兴高采烈的和syl说的时候他告诉我外国人做过了。唉syl我和你说不带你这么玩的(╯‵□′)╯︵┻━┻。总之分享是美德,别计较这个了,先把这个技术推广吧。
首先来介绍一下GPS是指的什么吧。玩命令的同学应该都知道mc是没有提供给命令系统读取坐标的接口,那么不能获取坐标在某些方面其实还是很不方便的。所以之前那个原型机做到了输出整数的坐标。现在的这个系统也能做到,并且是每时每刻瞬间输出的类型。
那么这里的话我也大概说一下具体原理。整个事情是这样的,前段时间呢,是要去研究边界之地,结果呢,手贱,传送的边界之地里面去了,然后我就显示了掉线。单人游戏也会掉线这一点我觉得非常的有趣,但是那个存档之后也就打不开了,由于是随机生成的地图,所以其实也并不重要。但是,我们需要透过现象看本质,如果玩家在边界之地会被处理为掉线,那么其他实体会怎样呢,随后我就进行了一下实验。
实验的内容很简单,tp一个实体进边界之地就明朗了。
- summon Zombie ~ ~1 ~ {CustomName:hi}
召唤一个叫hi的僵尸。

由于我实验的地方的z坐标为负数,所以我们选择z轴负方向的边界之地。
- tp @e[name=hi] ~ ~ ~-30000000
tp进边界之地,这个没啥好说的,接下来就是重头戏了。
测量好执行次序之后,让以下指令控制在上一条之后激活。
首先我们来实验一下
- tp @e[name=hi] ~ ~ ~30000000
当然这条指令的目的就是将僵尸tp回来,而激活之后的结果是,僵尸显示在原地,其实已经去了一趟边界了。

那么如果我们把第二条指令修改为复制代码
会怎样呢?
- execute @e[name=hi] ~ ~ ~ tp @e[name=hi] ~ ~ ~30000000
会怎样呢?
答案是,僵尸不见了。
这样的对照实验我们可以很鲜明的看出区别,在于边界之地的实体并不能用exe指令来执行指令。
[07:01:48] 你输入的数字 (-3.000093340725673E7)太小了,它至少需要为-30000000
通过这样的反馈信息我们也可以注意到一些有趣的冷知识。就是命令内部的一些数据其实也是有取值范围的,比如这里的坐标。
那么进行其他的一些实验以确保确实exe是不能执行的。
确认完成。
那么这个不能用的发现能用在哪里呢?自然gps应该是可以用上的,因为这个可以判断实体是否在边界之地里。那么我们来进行系统的架构。
首先,还是万年二分法。
这里讲解一下,这里我们需要先创建x和z两个计分板变量。
- /scoreboard objectives add x dummy
- /scoreboard objectives add z dummy
这里以x变量为例子。注意,每个变量一个实体。
然后召唤一个实体进行判断。
- execute @a ~ 0 ~ summon ArmorStand ~ ~ ~
- {CustomName:"mark"}
然后执行以下一组指令让系统初始化
- /scoreboard players reset @a x
- tp @e[name=mark] ~-16777216 ~ ~
- tp @e[name=mark] ~-16777216 ~ ~
- /scoreboard players remove @a x 30000000
- execute @e[name=mark] ~ ~ ~ tp
- @e[name=mark] ~16777216 ~ ~
- execute @e[name=mark] ~ ~ ~ tp
- @e[name=mark] ~16777216 ~ ~
接下来运行以下规律的指令
- tp @e[name=mark] ~16777216 ~ ~
- execute @e[name=mark] ~ ~ ~ scoreboard
- players add @a x 16777216
- execute @e[name=mark] ~ ~ ~ tp @e[name=mark]
- ~-16777216 ~ ~
每组指令的数字需要除以2,以此递推。直到数字变为1。
当然最后不要忘记kill掉这个计算的实体。
- kill @e[name=mark]
这个的精髓就在于利用exe进行判断实体是否在边界之地内部。这比我原来所使用的选择器的判断方法高效很多。话是这么说啦,但是还是比较抽象不是吗,这里我就把我平时喜欢用的方法说一下。我一般喜欢用这个指令来直接看。
- /tellraw @a [{"score":{"objective":"x","name":"x"},"bold":"true"},{"text":","},{"score":{"objective":"z","name":"z"},"bold":"true"}]
高频执行这个指令,然后没病走两步,就可以很生动的看到坐标的变化。
而且这个模块运行起来一点都不卡,实用性非常高。我已经使用到我最近写的一个原版mod里面了。我会在楼中楼里面附上那贴的链接,你们可以去那个帖子下载下来看看。
签名有些奇怪....
simon3000 发表于 2015-11-12 20:57
签名有些奇怪....
然而你只注意到了签名——虽说签名也是优秀之作
但真正的精华在帖内好不!
最后你快把The History's Power删了,看着我好痛苦——别黑我图片不行么。
本帖最后由 simon3000 于 2015-11-13 05:04 编辑
这又不是黑
你的图片被别人借鉴,是对你图片的一种认可
就比如你的头像,肯定是画师画得好你才拿来用对吧
这就是心态问题了,我要是做一个签名图片,然后被人都来借鉴
我高兴还来不及呢
怎么叫黑呢
不愧是BAKA2050
lichi2050 发表于 2015-11-13 04:35
然而你只注意到了签名——虽说签名也是优秀之作
但真正的精华在帖内好不!
这又不是黑
你的图片被别人借鉴,是对你图片的一种认可
就比如你的头像,肯定是画师画得好你才拿来用对吧
这就是心态问题了,我要是做一个签名图片,然后被人都来借鉴
我高兴还来不及呢
怎么叫黑呢
不愧是BAKA2050
simon3000 发表于 2015-11-13 05:02
这又不是黑
你的图片被别人借鉴,是对你图片的一种认可
跟一个版主争,好6
王健彬 发表于 2015-11-13 06:09
跟一个版主争,好6
哎呀我真是虎落平阳被犬欺
说了半天用处是什么……
检测玩家位置?
检测玩家位置?
这....啊实在看不懂{:10_524:}
我尽力了.....看不懂
nixgnot 发表于 2015-11-13 13:19
3000前几天刚被撤职
人家也是当过半年的实习版主的
额,撤职?!
看不懂?


怎么评分???????
execute之所以不能在边界执行,就是因为后面有一个坐标,在边界外的区域的数字都不行的(估计)
放弃了,理解不能,我还是老老实实的玩esay级别的计分板吧,这涉及到算法的东西不适合我
跟版主争