octopuscraft吧 关注:2,142贴子:44,165
  • 11回复贴,共1

【坑java笔记】方便理清思路的记录贴

取消只看楼主收藏回复

追踪各种超类,一会就看混了。所以记录一下,也方便自己查阅。另求原码触指点错误,求板砖 QAQ 谁有比较好的源码交流平台也请务必告诉我。。


1楼2014-03-10 23:26回复
    今天找出enderpearl的源码来看,想看看小黑眼是怎么工作的。。

    继承item类,构造函数初始化小黑眼stack为16,设置创造标签


    3楼2014-03-10 23:31
    收起回复

      做了下简单的注释,然后就是最关键的语句了。
      par2World.spawnEntityInWorld(new EntityEnderPearl(par2World, par3EntityPlayer));
      这句相当坑爹。。待我慢慢追根溯祖。。


      5楼2014-03-10 23:47
      收起回复

        看下world类的 spawnEntityInWorld方法,这是一个bool类型的方法,返回值要么是真,要么是假。mcp给出的这个方法的注释是在世界里放置所有实体(没明白啥意思),那就研究下。

        floor_double这个函数出现频率貌似挺高,实现的是取double类型数的底(数学符号└ ┘),就是说返回值是整数,这个整数是小于或者等于par0的最大整数。如par0 = -1.9,则返回值为-2.
        所以 spawnEntityInWorld方法中var2等于entity(玩家)所在x坐标除以16取底,var3z坐标除以16取底,boolean var4 = par1Entity.field_98038_p; 这玩意费解,field_98038_p貌似是判断关于骑乘相关的函数,没有去跟踪。。。(太烦QAQ) 但是后面第一个if语句说明如果这里的entity是entityplayer的对象的话,也就是说这里的entity是玩家的话,var4为true


        7楼2014-03-11 00:14
        收起回复
          直接看world类的spawnEntityInWorld貌似有点烦 0。0
          我先看看在itemenderpearl类中这个函数的传入参数。。 new EntityEnderPearl(par2World, par3EntityPlayer)
          建立了一个EntityEnderPearl的对象。。去看看EntityEnderPearl类的构造函数

          额。。看来是调用了超类的构造函数。。
          找到超类entitythrowable。。
          那么去看看超类的构造函数

          噗。。坑。。明天再看了。。


          8楼2014-03-11 00:25
          回复
            楼上大触们都喜欢卖萌→_→太讨厌了-.-


            来自Android客户端12楼2014-03-11 11:50
            回复

              一路往上追踪到超类entity。。涉及到的方法很多。。entity是一个很重要的超类了。先把涉及到的关键的方法理解一下。上面的setPosition方法是设置实体的坐标以及碰撞箱的。
              传入的参数依次是x坐标,y坐标,z坐标。
              minX、minY、minZ;maxX、maxY、maxZ是这个立方体碰撞箱的对角坐标。
              minX=实体所在x坐标-实体宽/2;
              minY=实体所在y坐标-yOffset+这个实体的ysize; (这里yoffset指的是y的偏移量,根据不同实体而定,有的为0,有的为高度/2,在throwable的构造函数里设为0. 但是ysize有点没搞明白, 求指点!!)
              minZ=实体所在z坐标-实体宽/2;
              且满足:
              maxX=minX+实体宽;
              maxY=maxY+实体高;
              maxZ=maxZ+实体宽。
              看看船的碰撞箱吧。
              this.setSize(1.5F, 0.6F); 说明船宽为1.5,高为0.6,
              this.yOffset = this.height / 2.0F; yOffset为0.3
              不过不知道ysize是怎么定义的。。囧。。 还是算了吧,以后再研究ysize是怎么弄的,貌似和entity的移动有着很大的关系。。


              15楼2014-03-11 14:28
              收起回复
                再回到entitythrowable的构造函数吧。我给加了些注释。回头再看看setThrowableHeading方法。


                16楼2014-03-11 14:40
                收起回复
                  刚查了下关于random类的说明,解决了关于产生随机数的问题。也明白了之前nextfloat函数等的用法,如maple所说,就是产生一个在0-1之间的随机数,这个随机数的分布是0-1之间的均匀分布。列举一下吧。
                  random类的构造方法:
                  Random() :创建一个新的随机数发生器
                  Random(long seed) :用一个种子(长整型)创建一个随机数发生器。
                  所包含的方法:
                  1. protected int next(int bits) :产生下一个伪随机数。
                  2. boolean nextBoolean() :返回下一个从随机发生器的系列中得到的均匀分布的布尔值。
                  3. void nextBytes(byte[] bytes) :产生随机字节数组放到指定的数组中。
                  4. double nextDouble() :返回下一个从随机发生器的系列中得到的均匀分布的0.0到1.0的双精度类型值。
                  5. float nextFloat() :返回下一个从随机发生器的系列中得到的均匀分布的0.0到1.0的浮点类型值。
                  6. double nextGaussian() :返回下一个从随机发生器的系列中得到的符合均匀分布的0.0的平均数到1.0方差的高斯分布双精度类型值。
                  7. int nextInt() :返回下一个从随机发生器的系列中得到的均匀分布的整型值。
                  8. int nextInt(int n) :返回下一个从随机发生器的系列中得到的均匀分布的0到指定整型数(n)之间的整型值。
                  9. long nextLong() :返回下一个从随机发生器的系列中得到的均匀分布的长整型值。
                  10. void setSeed(long seed) :设置随机数发生器的种子为一个长整型数。


                  17楼2014-03-11 19:47
                  回复

                    来看看setThrowableHeading方法吧。这里调用的输入参数分别为motionX,motionY,motionZ,1.5,1。


                    21楼2014-03-12 00:23
                    回复
                      setThrowableHeading方法里面的两个关于角度的变量解释如下图:

                      自行看图吧。。不多解释,x轴正方向代表east东方向。rotationPitch和rotationRaw这两个角度也就决定了物品扔出的方向。


                      25楼2014-03-13 22:17
                      收起回复
                        整理一下这几天看的东西吧。首先是Vec3类和Vec3Pool类。这个类在后面解释onupdate函数里会涉及到。
                        简单来说,Vec3Pool通俗说是向量池,也就是关于向量的数组,是一个arraylist。可以向里面加入新的向量,也可以清除和重置。
                        Vec3类是mc中的三维向量。所有关于向量的计算,比如点乘、叉乘、求模、归一化、旋转等等都能有方法实现。


                        27楼2014-03-20 23:31
                        回复