minecraft吧 关注:2,557,006贴子:31,946,132

回复:【视频+图文】无限射程的TNT大炮,试运行35.5km

只看楼主收藏回复

吊炸天 或前六名


IP属地:山东49楼2013-10-27 11:37
回复
    无论是红石激发,打火机点燃,还是发射器发射
    TNT在刚激发是会有一个初动能
    而初动能的Fy具有随机性,不可控,自然也会对设计造出影响
    要处理这个Fy的话,我的设计是在TNT的发射点上方放一个栅栏门
    在刚点燃时栅栏门是关闭的,TNT由于撞到陷阱门就会失去初动能
    接下来下1 game tick我们会把栅栏门打开
    让TNT可以被顺利发射出去
    因此我们实际上只有79 game tick的飞行时间
    ——来自 MCLive


    来自手机贴吧50楼2013-10-27 11:38
    收起回复
      2025-07-31 16:07:58
      广告
      不感兴趣
      开通SVIP免广告
      看见D大就进来顶了!神啊~地球人已经无法阻止D大了。
      本人对熊孩子炮没什么兴趣。
      看见D大就有了兴趣。


      IP属地:上海51楼2013-10-27 11:40
      回复
        23333


        IP属地:广东来自iPhone客户端52楼2013-10-27 11:41
        回复
          顶帖


          本楼含有高级字体53楼2013-10-27 11:41
          回复
            接下来的问题就是,我们需要产生多大的Fy
            才可以让TNT在79 game tick后正好回到原水平面上呢?
            这个就必须要进入MC的物理系统才能计算出正确答案了
            用MCP 8.05查看MC 1.6.2的源码,定位在EntityTNTPrimed类中
            我们可以找到TNT在y轴的行进方程
            如果我们用y(t)和v(t)表示在t时刻TNT的y坐标和y方向速度
            我们可以从源码中分析出方程式
            y(t) = y(t-1) + v(t) - 0.03999999910593033
            v(t) = [ v(t) - 0.03999999910593033 ] * 0.9800000190734863
            通过这两个方程我们在已知y(0)和v(0)的情况下
            就可以计算出TNT在任意时刻的y坐标和y方向速度


            56楼2013-10-27 11:46
            收起回复


              IP属地:广东58楼2013-10-27 11:53
              收起回复
                为了更方便我进行计算,我用VB写了一个简单的程序
                在Base Y中输入y(0),Impact输入v(0),Ticks输入飞行时间
                程序会自动帮我计算出每game tick的TNT位置和速度
                接下来,不断的代入v(0)进行测试
                直到找到过了79game tick后y值最接近0的v(0)
                经过不断的测试,得知v(0)=2.0033的时候
                79 game tick之后TNT会回到原高度
                也就是说,我们需要产生一个2.0033的初速度
                这样被发射的TNT在爆炸时就会落到地面
                ——来自 MCLive


                来自手机贴吧59楼2013-10-27 11:57
                收起回复
                  2025-07-31 16:01:58
                  广告
                  不感兴趣
                  开通SVIP免广告
                  现在我们知道了要产生v(0)=2.0033
                  那么要怎么样设置下方的TNT才能产生呢?
                  通过查找wiki,我们可以知道TNT对实体产生的爆炸效果公式
                  FI = ( 1 - d / R ) * E
                  其中d为爆炸中心与实体的距离
                  R为爆炸半径,等价于2倍爆炸力量,对于TNT来说R=2*4=8
                  E为作用面积,在此两个TNT直接没有任何阻拦,因此E=1
                  最后我们可以得出,对于我们图中的设计,FI = 1 - d / 8
                  所有的FI总和会被加到弹药TNT的v(0)上
                  ——来自 MCLive


                  来自手机贴吧60楼2013-10-27 12:06
                  收起回复
                    要让v(0)=2.0033,我设计了一个非常接近的方法
                    在炮弹TNT的正下方4格处引爆4个TNT
                    产生的v(0)=4*FI=4*(1-4/8)=2,非常接近2.0033
                    此时我们把2重新代入到计算弹道的程序当中
                    我们可以知道当v(0)=2,第79 game tick时会在y=-0.135处
                    也就是说成功落地了
                    而在第78 game tick时,炮弹仍然在y=1.046初,还没有落地
                    这样我们就保证了TNT能有79 game tick的飞行时间
                    ——来自 MCLive


                    来自手机贴吧61楼2013-10-27 12:11
                    回复
                      搞定了Fy的设计,接下来我们就来考虑Fx的设计了
                      Fx自然越大越好,Fx越大炮弹飞得越远
                      而且没有了Fy的限制,我们不需要担心炮弹不会落地
                      只需要尽一切可能加大Fx即可
                      之前在1.6刚更新时就发过一篇TNT大炮的帖子
                      在这里用同样的设计方法
                      利用未加载chunk进行助推TNT的上弹激发
                      ——来自 MCLive


                      来自手机贴吧62楼2013-10-27 12:25
                      收起回复
                        赶上直播


                        来自Android客户端64楼2013-10-27 12:26
                        回复
                          应当分两步走。或者做分析视频的时候再那样做吧。
                          第一步说一下基本原理:什么未激活的加载区块红石电路可以运行但实体锁死,通过这个方式来在一段时间内生成大量的同时同地爆炸的tnt作为推进力。
                          然后第二步说一下细节上的处理,包括纵向速度、力量计算,中继器时间延迟设定什么的。
                          这样子应该更容易看懂。


                          65楼2013-10-27 12:29
                          回复
                            D大的帖子,拉个广告http://tieba.baidu.com/p/2415647175?pn=7#34581618156l


                            IP属地:新疆66楼2013-10-27 12:30
                            收起回复
                              2025-07-31 15:55:58
                              广告
                              不感兴趣
                              开通SVIP免广告
                              当一个chunk未加载或者只是inactive加载时
                              entity不会被更新,因此TNT也不会进行爆炸前的倒数
                              玩家会active加载17x17个chunk的范围
                              因此如果我们把红石信号引到距离玩家9个chunk之外的地方
                              那么此时用发射器发射的TNT就会被冻结
                              尽管被激发了但是却不会开始倒计时爆炸
                              我们就可以用此同时激发无限个TNT
                              而只有当这个chunk被加载时,这些TNT才会被加载
                              开始倒计时,并且同时爆炸
                              ——来自 MCLive


                              来自手机贴吧67楼2013-10-27 12:36
                              收起回复