godlearner吧 关注:7贴子:21
  • 7回复贴,共1

【日常】【开发进程】godlearner开发进程实时发布帖

取消只看楼主收藏回复

首先,请原谅我现在过于严肃。
本帖发帖规范
1.本帖非水贴,请不要插楼、灌水,否则删帖加封号3天。如有正常探讨请在楼中楼恢复,否则视同灌水。
2.在本帖中汇发布日常的开发与更新进程,有时也会发布开发版,但所有资源仅供交流学习,请在24小时内主动删除,开发版网盘资源链接仅保留7天,请不要抄袭或擅自修改。
3.任何bug报告可在另外的bug上传帖中提出,开发版bug一律不予处理,请不要再本帖中上传,否则视同灌水处理。
4.有意见以及建议请私信或回复,所有正式版均为开放资源,美术作品均无版权限制。
5.本游戏暂时无mod支持,以后也许会有,有需要mod开发者包的可以私信,不过任何mod的发布请告知。
最后,请大家多多支持我的游戏,并提出宝贵的建议!


IP属地:浙江1楼2014-09-22 18:35回复
    好久不见。。。
    最近在分析Minecraft的地形生成算法,发现如下关键代码:
    (该段代码仅生成高度。。)
    public void func_147424_a(int p_147424_1_, int p_147424_2_,
    Block[] p_147424_3_) {
    byte b0 = 63;
    this.biomesForGeneration = getBiomesForGeneration(
    this.biomesForGeneration, p_147424_1_ * 4 - 2,
    p_147424_2_ * 4 - 2, 10, 10);
    this.func_147423_a(p_147424_1_ * 4, 0, p_147424_2_ * 4);
    for (int k = 0; k < 4; ++k) {
    int l = k * 5;
    int i1 = (k + 1) * 5;
    for (int j1 = 0; j1 < 4; ++j1) {
    int k1 = (l + j1) * 33;
    int l1 = (l + j1 + 1) * 33;
    int i2 = (i1 + j1) * 33;
    int j2 = (i1 + j1 + 1) * 33;
    for (int k2 = 0; k2 < 32; ++k2) {
    double d0 = 0.125D;
    double d1 = this.field_147434_q[k1 + k2];
    double d2 = this.field_147434_q[l1 + k2];
    double d3 = this.field_147434_q[i2 + k2];
    double d4 = this.field_147434_q[j2 + k2];
    double d5 = (this.field_147434_q[k1 + k2 + 1] - d1) * d0;
    double d6 = (this.field_147434_q[l1 + k2 + 1] - d2) * d0;
    double d7 = (this.field_147434_q[i2 + k2 + 1] - d3) * d0;
    double d8 = (this.field_147434_q[j2 + k2 + 1] - d4) * d0;
    for (int l2 = 0; l2 < 8; ++l2) {
    double d9 = 0.25D;
    double d10 = d1;
    double d11 = d2;
    double d12 = (d3 - d1) * d9;
    double d13 = (d4 - d2) * d9;
    for (int i3 = 0; i3 < 4; ++i3) {
    int j3 = i3 + k * 4 << 12 | 0 + j1 * 4 << 8 | k2
    * 8 + l2;
    short short1 = 256;
    j3 -= short1;
    double d14 = 0.25D;
    double d16 = (d11 - d10) * d14;
    double d15 = d10 - d16;
    for (int k3 = 0; k3 < 4; ++k3) {
    if ((d15 += d16) > 0.0D) {
    p_147424_3_[j3 += short1] = Blocks.stone;
    } else if (k2 * 8 + l2 < b0) {
    p_147424_3_[j3 += short1] = Blocks.water;
    } else {
    p_147424_3_[j3 += short1] = null;
    }
    }
    d10 += d12;
    d11 += d13;
    }
    d1 += d5;
    d2 += d6;
    d3 += d7;
    d4 += d8;
    }
    }
    }
    }
    }
    private void func_147423_a(int p_147423_1_, int p_147423_2_, int p_147423_3_) {
    double d0 = 684.412D;
    double d1 = 684.412D;
    double d2 = 512.0D;
    double d3 = 512.0D;
    this.field_147426_g = this.noiseGen6.generateNoiseOctaves(
    this.field_147426_g, p_147423_1_, p_147423_3_, 5, 5, 200.0D,
    200.0D, 0.5D);
    this.field_147427_d = this.field_147429_l.generateNoiseOctaves(
    this.field_147427_d, p_147423_1_, p_147423_2_, p_147423_3_, 5,
    33, 5, 8.555150000000001D, 4.277575000000001D,
    8.555150000000001D);
    this.field_147428_e = this.field_147431_j.generateNoiseOctaves(
    this.field_147428_e, p_147423_1_, p_147423_2_, p_147423_3_, 5,
    33, 5, 684.412D, 684.412D, 684.412D);
    this.field_147425_f = this.field_147432_k.generateNoiseOctaves(
    this.field_147425_f, p_147423_1_, p_147423_2_, p_147423_3_, 5,
    33, 5, 684.412D, 684.412D, 684.412D);
    boolean flag1 = false;
    boolean flag = false;
    int l = 0;
    int i1 = 0;
    double d4 = 8.5D;
    for (int j1 = 0; j1 < 5; ++j1) {
    for (int k1 = 0; k1 < 5; ++k1) {
    float f = 0.0F;
    float f1 = 0.0F;
    float f2 = 0.0F;
    byte b0 = 2;
    BiomeGenBase biomegenbase = this.biomesForGeneration[j1 + 2
    + (k1 + 2) * 10];
    for (int l1 = -b0; l1 <= b0; ++l1) {
    for (int i2 = -b0; i2 <= b0; ++i2) {
    BiomeGenBase biomegenbase1 = this.biomesForGeneration[j1
    + l1 + 2 + (k1 + i2 + 2) * 10];
    float f3 = biomegenbase1.rootHeight;
    float f4 = biomegenbase1.heightVariation;
    // if (this.field_147435_p == WorldType.AMPLIFIED && f3
    // > 0.0F)
    // {
    // f3 = 1.0F + f3 * 2.0F;
    // f4 = 1.0F + f4 * 4.0F;
    // }
    float f5 = this.parabolicField[l1 + 2 + (i2 + 2) * 5]
    / (f3 + 2.0F);
    if (biomegenbase1.rootHeight > biomegenbase.rootHeight) {
    f5 /= 2.0F;
    }
    f += f4 * f5;
    f1 += f3 * f5;
    f2 += f5;
    }
    }
    f /= f2;
    f1 /= f2;
    f = f * 0.9F + 0.1F;
    f1 = (f1 * 4.0F - 1.0F) / 8.0F;
    double d12 = this.field_147426_g[i1] / 8000.0D;
    if (d12 < 0.0D) {
    d12 = -d12 * 0.3D;
    }
    d12 = d12 * 3.0D - 2.0D;
    if (d12 < 0.0D) {
    d12 /= 2.0D;
    if (d12 < -1.0D) {
    d12 = -1.0D;
    }
    d12 /= 1.4D;
    d12 /= 2.0D;
    } else {
    if (d12 > 1.0D) {
    d12 = 1.0D;
    }
    d12 /= 8.0D;
    }
    ++i1;
    double d13 = (double) f1;
    double d14 = (double) f;
    d13 += d12 * 0.2D;
    d13 = d13 * 8.5D / 8.0D;
    double d5 = 8.5D + d13 * 4.0D;
    for (int j2 = 0; j2 < 33; ++j2) {
    double d6 = ((double) j2 - d5) * 12.0D * 128.0D / 256.0D
    / d14;
    if (d6 < 0.0D) {
    d6 *= 4.0D;
    }
    double d7 = this.field_147428_e[l] / 512.0D;
    double d8 = this.field_147425_f[l] / 512.0D;
    double d9 = (this.field_147427_d[l] / 10.0D + 1.0D) / 2.0D;
    double d10 = MathHelper.denormalizeClamp(d7, d8, d9) - d6;
    if (j2 > 29) {
    double d11 = (double) ((float) (j2 - 29) / 3.0F);
    d10 = d10 * (1.0D - d11) + -10.0D * d11;
    }
    this.field_147434_q[l] = d10;
    ++l;
    }
    }
    }
    }
    我承认我现在还没有完全分析懂它的工作原理,因此这里就不贴出了来了。
    估计在很长一段时间内就都会用这段代码了。。


    IP属地:浙江3楼2014-10-26 13:34
    回复
      新的截图。。
      修改了光照算法,修复了一系列BUG,主要修改有:
      1.优化光照与渲染算法,速度更快,不易出错。
      2.完全修改浮动显示模式,降低编程难度(虽然现在还不能加mod)
      3.更新命令行模式,解决一些小问题。
      注:本次更新知识开发版,问题依旧多多,因此就不发布了。
      最后上截图:

      可以看到,光照算法有了很大改进,且帧率也提高了不少(一个区块内控制在60帧,跨越区块时帧率有所下降,但不低于20帧,总体运行还算流畅)


      IP属地:浙江4楼2014-10-26 15:39
      收起回复
        大家好,因为本吧人数过少,所以我也比较懒,很少更新,现在来发一下最近的情况。
        主要因为我还要上学,最近又要考试,所以码字的时间比较少,请大家见谅!
        最近打算将整个godLearner的架构好好改一改,主要是把类规划之类的改的好一点什么的
        任务很重,预计大约要寒假结束才能完成,文成后大概功能不会加的很多,但应该bug什么的会少很多,速度也会快一点
        上周打了一千多行代码,累的我。。。(大约用了4个小时左右,上学没时间)
        顺便,大家有没有人擅长鼠绘的,能不能帮我画几张图,有想法的可以私信或者回帖,主要是本人鼠绘渣,家里又没有打印机,谢谢。
        好了,今天就说这么多了,俺又要去码字了。。。TAT


        IP属地:浙江5楼2014-12-12 16:32
        回复
          今天的成就。。。貌似有种程序员式的幽默。。。
          Hello World!!!! ╮(╯▽╰)╭

          --------------------我是分割线,上面是图片-------------------
          好吧,虽然这看上去很简陋,但是他能够运行就是一个好的开始,再说我现在的也不过是一个例子,其实还可以做出许许多多其他的,毕竟架子搭好了,什么都好办,只要努力去做,就没有什么做不到的。(话说我怎么感觉这么感动呢。。)
          好了,今天就这样吧,下次再见!(下次应该就有按钮了。。)


          IP属地:浙江6楼2014-12-14 18:03
          回复
            再来一张


            IP属地:浙江7楼2014-12-14 18:08
            回复
              这两天加入了Unicode字体显示



              呵呵呵呵呵呵


              IP属地:浙江8楼2014-12-21 13:37
              回复
                突然想吐槽一下。。。(不要在意这些细节)
                昨天看到有别人送的一盒喜糖,上面写着:
                I'm comming
                我随然英语学得不咋地,但这点常识总还是有的:
                以e结尾的动词现在分词只要去e加ing,不要双写的。
                也就是说正确的应该是coming而不是comming
                所以。。。没文化真可怕。


                IP属地:浙江9楼2015-01-15 08:40
                回复