Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 2558|回复: 32

[新版本预览] 【TCP|Ms】1.13-pre 轨道炮卖萌+追踪弹道修正系统

[复制链接]
发表于 2018-6-26 18:20:56 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 MsYqgzt 于 2018-6-26 23:19 编辑

大家好呀,这里是诈尸高考完的Ms,
虽然沉迷摸鱼到现在,不过多少也做了点东西出来,于是来跟大家分享分享。

跳过剩余的开场白,这次分享一个轨道炮的实现方法。
不过轨道炮的子弹只是来卖萌的而已,呈现的核心部分在于实装在其之上的 追踪弹道修正系统

此追踪并非百发百中的必中,而是根据追踪目标的位置 对自身的弹道进行偏移修正,
通俗的说就是子弹的前进方向随着目标移动慢慢偏向目标位置,可实现更加真实的特效。

此模块可自定义 追踪的目标点 ——追踪目标的头部或脚部,也可自定义 追踪时的偏移速度 和 追踪角度范围

效果图:

追踪范围内——追踪成功效果

                               
登录/注册后可看大图


目标超出追踪范围——追踪失败效果

                               
登录/注册后可看大图


那么进入讲解环节
本次讲解涉及1.13的指令,如果对指令不了解的同学请自行转到指令讲解贴内学习
重点讲解追踪部分的运算,子弹的移动效果实现不做讲解。

追踪模块代码:
  1. #子弹追踪曲线修正
  2. #Usage: execute as @e[tag=bullet,...] at @s run function pack:(...)/bullet_tracking

  3. #Scoreboard
  4. scoreboard objectives add Bullet_RotX dummy
  5. scoreboard objectives add Bullet_RotY dummy

  6. scoreboard objectives add ToTarget_RotX dummy
  7. scoreboard objectives add ToTarget_RotY dummy

  8. scoreboard objectives add Math dummy

  9. #Get_Data
  10. execute store result score @s Bullet_RotX run data get entity @s Rotation[0] 1000000
  11. execute store result score @s Bullet_RotY run data get entity @s Rotation[1] 1000000

  12. #Get_ToTarget_Data
  13. execute as @s at @s anchored feet run tp @s ~ ~ ~ facing entity @e[type=!player,tag=!bullet,distance=..20,limit=1] feet
  14. #瞄准位置(eyes/feet)

  15. execute store result score @s ToTarget_RotX run data get entity @s Rotation[0] 1000000
  16. execute store result score @s ToTarget_RotY run data get entity @s Rotation[1] 1000000

  17. execute store result entity @s Rotation[0] float 0.000001 run scoreboard players get @s Bullet_RotX
  18. execute store result entity @s Rotation[1] float 0.000001 run scoreboard players get @s Bullet_RotY

  19. #-----水平偏移-----
  20. #Offset_Calculation
  21. scoreboard players operation @s Math = @s ToTarget_RotX
  22. scoreboard players operation @s Math -= @s Bullet_RotX

  23. #                                         偏移探测范围↓          偏移角度参数↓
  24. execute as @s at @s if score @s Math matches -90000000..0 run tp @s ~ ~ ~ ~-2 ~
  25. execute as @s at @s if score @s Math matches 0..90000000 run tp @s ~ ~ ~ ~2 ~

  26. #-----竖直偏移-----
  27. #Offset_Calculation
  28. scoreboard players operation @s Math = @s ToTarget_RotY
  29. scoreboard players operation @s Math -= @s Bullet_RotY

  30. #                                        偏移探测范围↓            偏移角度参数↓
  31. execute as @s at @s if score @s Math matches -90000000..0 run tp @s ~ ~ ~ ~ ~-2
  32. execute as @s at @s if score @s Math matches 0..90000000 run tp @s ~ ~ ~ ~ ~2
复制代码


此代码附件内同样也有,需要的同学可自行搬用


核心思路:
1.13指令系统中,记分板能够读取实体的NBT数据,并存储为整形(integer),因此可以将实体的Rotation存储到记分板内。
但实际的情况中,实体的Rotation是浮点数(float),为了使追踪系统尽量精确,需要将存储到记分板的 小数 数值进行放大,
把小数的数值转换成整数存储进记分板,在数据回调至实体NBT时再缩小存入。

简单介绍记分板的作用:
Bullet_RotX、Bullet_RotY —— 分别存储 子弹实体 实时的Rotation X、Y的数值
ToTarget_RotX、ToTarget_RotY —— 分别存储 子弹实体 基于面向追踪目标状态 的实时 Rotation X、Y 的数值
Math —— 对以上四个记分板数值的运算结果存储

每部分算法分析:
Get_Data —— 将子弹的Rotation放大1000000倍,存入Bullet_RotX、Bullet_RotY记分板中

Get_ToTarget_Data —— 以子弹面向目标时的Rotation放大1000000倍,存入ToTarget_RotX、ToTarget_RotY记分板中
再将子弹原先的朝向数据,通过Bullet_RotX、Bullet_RotY的值 缩小1000000倍 赋值回去
*注意,这里可以修改追踪目标的追踪位点——头部或脚部

接下来的运算就不必多说,将ToTarget_Rot 数据减去 Bullet_Rot ,对应结果存入Math记分板中 ,对Math的值进行判定,执行对应的朝向tp旋转
*注:在这里可以同时调整旋转的程度 ,以及Math的范围判定调整(甚至可以..0 , 0..这么玩)。


当然,这个追踪系统只包含水平和竖直方向上的追踪,没有实现任意弧度的追踪,
但可在此基础上做 朝向分段判定拓展,实现不同偏移加速度。

召唤共同讨论此模块的朋友们
@玄素  @acordome  


那么,感谢阅读。





来自群组: The Command's Power

rail_bullet.zip

1.85 KB, 下载次数: 67

评分

参与人数 8人气 +18 金粒 +130 收起 理由
Zevn + 2 + 10 MCBBS有你更精彩~
buhuichongfu + 1 听说楼主很可爱
acordome + 4 啊,MS可爱
雷鸣·翾鹗 + 2 + 40 MCBBS有你更精彩~
ruhuasiyu + 2 MCBBS有你更精彩~
玄素 + 3 + 40 啊 Ms可爱
SPGoding + 2 MCBBS有你更精彩~
夜之暗夜 + 2 + 40 MCBBS有你更精彩~

查看全部评分

回复

使用道具 举报

发表于 2018-6-26 18:40:56 | 显示全部楼层
本帖最后由 ruhuasiyu 于 2018-6-27 09:23 编辑

做什么朝向分段啊,锥形区域选择了解下……
http://www.mcbbs.net/thread-796669-1-1.html

改用在子弹前方100处的100内实体加tag sth
  1. execute positioned ^ ^ ^100 run tag @e[type=!player,distance=..99.9999] add pseduo_target
  2. tag @e[tag=pseduo_target,distance=..20,sort=nearest,limit=1] add target
复制代码

来选择目标,以避免判断rotation

最后你可以这样,在前方1米放置a,然后a facing目标并向前0.0349米,将bullet设置为facing a
  1. summon aec ^ ^ ^1 {Tags:["a"]}
  2. execute as @e[type=aec,tag=a,limit=1] at @s facing entity @e[tag=target,limit=1] run tp @s ^ ^ ^0.0349
  3. tp @s ~ ~ ~ facing @e[type=aec,tag=a,limit=1]
复制代码

这样无论目标在何处,都能使弹道向其偏移2°左右

说错了,这个偏移角度不是2°,而是约等于目标偏移度的正弦除以45,不过也是逐渐向目标偏移的……

大概是这样,具体你再测试看看



评分

参与人数 2人气 +4 金粒 +20 收起 理由
玄素 + 2 + 20 啊 如花也很可爱
SPGoding + 2 神乎其技,不服不行!

查看全部评分

回复

使用道具 举报

发表于 2018-6-26 22:51:41 | 显示全部楼层
跟不上
/summon Creeper ~ ~ ~ {Fuse:0s}
真·丢脸
回复

使用道具 举报

发表于 2018-6-26 23:32:15 | 显示全部楼层
还在玩1.7.10呢
回复

使用道具 举报

发表于 2018-6-30 23:51:21 | 显示全部楼层
导弹军工厂后继有人了

评分

参与人数 1金粒 +2 收起 理由
MsYqgzt + 2 ?????????

查看全部评分

回复

使用道具 举报

发表于 2018-7-8 15:24:02 | 显示全部楼层
好厉害 学习学习 水一波~~~

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

发表于 2018-7-8 17:25:40 | 显示全部楼层
我特别讨厌楼主这种大佬,搞得我觉得自己根本不好意思讲自己会玩mc。
回复

使用道具 举报

发表于 2018-7-10 00:00:50 | 显示全部楼层
厉害厉害学习学习

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

发表于 2018-7-10 14:39:59 | 显示全部楼层
6666666666666666666666666666666666666666666

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

发表于 2018-7-10 14:40:20 | 显示全部楼层
64464535353

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

发表于 2018-7-10 14:40:57 | 显示全部楼层
大炮貌似……

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 三连

查看全部评分

回复

使用道具 举报

发表于 2018-7-10 14:41:18 | 显示全部楼层
很6的样子6

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 四连

查看全部评分

回复

使用道具 举报

发表于 2018-7-12 03:10:23 | 显示全部楼层
苦力怕炸死了苦力怕
回复

使用道具 举报

发表于 2018-7-13 18:23:15 | 显示全部楼层
那怎么做枪械啊,一秒3发都行,求采纳。
回复

使用道具 举报

发表于 2018-7-14 18:42:40 | 显示全部楼层
我的目标是成为18级大神。假如你每天签到拿4经验,18级300000/4=75000天, 如果从1岁开始签到,那100年=36500天,你差不多要 活200年保持每天签到(谁知道200年后还有没有签到 这玩意),如果你每天再水4经验,时间减半,但考虑 现实,你不可能再活100年,取50年吧,你就要每天水 16经验,可能你是个勤快的人,每天水32经验,那就 需要25年!!!再如果你是个大水怪,每天水64经验 ,那就只要12.5年!!!还如果你个心急的人,每天水 128经验,你只要6.25年!!!!假如你已经急不可耐 了,每天水256经验,那你碉堡了,只要3.125年!!! 当然,你会觉得3年还是太远了,每天你闲的蛋疼,忙 忙碌碌的水512经验,碉堡了,你只需要1.5625年,只 比1年半多一点!!!什么!!你还不满意,那你觉得 你可能一天水1024经验吗,可能吗!!可能吗!!!据 说回复100字或者一百字以上可以得到11~30经验,那么,按照队形,点击复制吧!!! ... ... ... ... ... . ... ... .. ... ... ... ... ... ...

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2018-9-21 04:02 , Processed in 0.175856 second(s), 21 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表