本帖最后由 末地探险者 于 2020-4-6 21:12 编辑
前言:




在求助帖中基本把思路想清楚了:https://www.mcbbs.net/thread-1007529-1-1.html


到底有多准?
先看慢动作(药水云标记路径)实际效果看最下面的gif,几乎看不到arrow


核心代码
  1. summon armor_stand 0.0 0.0 0.0 {Tags:["track_work"],Rotation:[0.0f,0.0f],NoGravity:true,Invisible:true,Marker:true}
  2. 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"]}
  3. execute as @e[tag=track_work] at @s rotated as @p anchored feet run tp ^ ^ ^10
  4. execute as @e[tag=track_sel] run data modify entity @s Motion set from entity @e[tag=track_work,limit=1] Pos
  5. 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 Directly Trackv0.zip (5.83 KB, 下载次数: 5)




感谢
SPG的帮助和DHP和Json文件生成器
Teen的帮助和data教程
小豆数学库
hans的JText
@kongbaiyo
@00ll00







file_1586082454000.jpg (109.9 KB, 下载次数: 0)

file_1586082454000.jpg

file_1586082988000.jpg (123.34 KB, 下载次数: 0)

file_1586082988000.jpg