前言:
在求助帖中基本把思路想清楚了:https://www.mcbbs.net/thread-1007529-1-1.html
到底有多准?
先看慢动作(药水云标记路径)实际效果看最下面的gif,几乎看不到arrow
核心代码
- summon armor_stand 0.0 0.0 0.0 {Tags:["track_work"],Rotation:[0.0f,0.0f],NoGravity:true,Invisible:true,Marker:true}
- execute at @s anchored eyes run summon arrow ^ ^ ^ {Motion:[0.0,0.0,0.0],NoGravity:true,pickup:false,Silent:true,damage:-1.0,Tags:["track_sel"]}
- execute as @e[tag=track_work] at @s rotated as @p anchored feet run tp ^ ^ ^10
- execute as @e[tag=track_sel] run data modify entity @s Motion set from entity @e[tag=track_work,limit=1] Pos
- kill @e[tag=track_work]
当然你射什么实体都可以(只要有Motion的)
原理:
所指的参数即是Rotation的两个量。
所射的参数即是Motion的x,y,z的速度向量。
两者的联系就相当于极坐标系的ρcosθ
而ρ甚至可以随便取。经测试,速度向量最大值为10.0
接下来我要寻求cosθ的计算。一开始我想到了小豆数学库
但是我又想到:直接在(0,0,0)这个特殊的位置以玩家的方向位移ρ
所得到的(x,y,z)不就应和Motion[dx,dy,dz]吗。
结果查看小豆数学库,不谋而合。
tp 直接使用^ ^ ^10
一开始我用execute store 替换数据,结果精度相差非常大
经过@(=°ω°)丿
的指导,改用data modify直接复制坐标
实体的选择
这也是最关键的一步。
需要的实体要求:
要求 | 要求 |
所指实体 | 不会对该实体造成伤害/击退效果 |
所指方块 | 方便简单,还能选到非固体方块/不会透过去:就是黑框 |
所指固体方块 | 可以透过非固体方块 |
这样的话弹射物是比较合适的了。
经过重重测试和NBT的学习
https://www.mcbbs.net/thread-1006413-1-1.html
还有@SPGoding
的指导
我选择了以下实体
所指实体 | 产生了“漂浮效果”,用断言消去 | 潜影贝导弹 |
所指方块 | 不会透过去,只要寻找雪球死前的位置就可以了 | 雪球 |
所指固体方块 | 可以透过非固体方块,还为大家准备了inBlockState的NBT,非常贴心(再次感谢SPG) | 箭 |
使用效果和方法
命名空间 | track | 储存地址(标签) |
所指实体 | direct1 | 被标记为track_select,并且有track_sele的标记坐标的药水云 |
所指方块 | direct3 | 上方生成一个track_select3的实体 |
所指固体方块 | direct2 | 固体方块id记录在track_select的ArmorItems[0].id里,位置记录在Pos里 |
如何在1tick内完成寻找目标:(实验对象为箭,先不讨论其他)
我们设置1tick的速度为10,则要在1tick内找到目标,则可以在一定范围内像[0,5][5,10][10,15][15,20]做判定区间。
同时发射4支箭,讨论响应的情况:
前面响应则忽略后面
后面先响应则讨论前面响应的情况,当前面的超过该区间范围,则忽略,直接统计后面的情况
(本部分还没做,暂时是个可行的思路吧)
结果自然是好的现有的不足便是:会有颗粒无法消去
因为这只是思路,所以数据包并没有完善。
断言也是很粗糙(根本就是太泛了)
进一步可以消除颗粒等等的
版本 | 数据包 |
v 0.0.1 |
|
感谢
SPG的帮助和DHP和Json文件生成器
Teen的帮助和data教程
小豆数学库
hans的JText
@kongbaiyo
@00ll00
-
file_1586082454000.jpg (109.9 KB, 下载次数: 0)
-
file_1586082988000.jpg (123.34 KB, 下载次数: 0)