饥荒代码吧 关注:713贴子:5,933
  • 6回复贴,共1

【提问】关于象仙人掌

取消只看楼主收藏回复

如题


1楼2016-08-24 17:15回复

    5,6行字面理解不是生成一个激活的仙人掌吗?但是整个函数应该是使作物无法收集啊,矛盾了!


    2楼2016-08-24 17:16
    回复
      顶~~


      3楼2016-08-25 10:50
      回复
        我又看了一下makeemptyfn在pickable中只有MakeEmpty会调用,而MakeEmpty调用的情况为:
        1.Rejuvenate(施肥复活),此时要求:protected_cycles >= 1
        2.rejuvenateHandler(季节温度复活),此时要求:self.cycles_left > 0
        这两者的区别是,1先运行MakeEmpty(),再运行self.withered = false(不枯萎),2恰恰相反(不赘述了)。
        这就导致在施肥复活后,active.sg:GoToState("grow_spike")这行判断有效会运行,而季节性复活后active.sg:GoToState("grow_spike")判断失败不运行。
        这说明施肥复活和季节复活有区别,具体区别如何,目前还不清楚。


        10楼2016-08-29 20:23
        回复

          我找到一个一个符合我经验的代码段,火山内部仙人掌枯萎以后有时会显示跟正常一样的状态,但是挖掉是一个刺而不是两个小树枝。


          11楼2016-08-29 20:28
          收起回复
            第一步,先找到影响canbepicked的函数
            赋值canbepicked的函数有:
            1.Pickable:SetUp --true
            2.Pickable:OnLoad --true
            3.Pickable:Regen --false
            4.Pickable:MakeBarren --false
            5.Pickable:Pick --false


            12楼2016-08-30 22:44
            收起回复
              接着上面,先看看Pickable:OnLoad
              data.picked 和 data.time都不为空的时候 canbepicked=true,相反canbepicked=false
              1.先看picked:只有在存档(Onsave)的时候会修改picked,具体为:picked = not self.canbepicked and true or nil,也就是说picked要为空,必须是not self.canbepicked and true=false【逻辑是这样吗?我真是不懂lua】,即self.canbepicked=true。
              2再看data.time,这是上次存档时计算出来的:
              ----------------------------------------------------------------------------------------------------------------------------------------------
              if self.targettime then
              local time = GetTime()
              if self.targettime > time then
              data.time = math.floor(self.targettime - time)
              end
              end
              ----------------------------------------------------------------------------------------------------------------------------------------------
              self.targettime我看了一下就是游戏时间+距离下次可收集的时间(time_to_pickable),这里再减去一个游戏时间,那data.time就刚刚好=距离下次可收集的时间,他不用time_to_pickable的原因是因为那是局部变量。
              也就是说上次存档时候self.canbepicked=true并且距离下次可收集时间不为空的时候canbepicked=true。这里好像不是简单的吧上次存档时候的状态复制过来,因为象仙人掌好像没有targettime(象仙人掌的文件里并没有定义targettime ),所以只要小退一下,canbepicked=false。我这么理解有问题吗?
              如果没错,每次读档枯萎的就会变成小树枝(canbepicked=false),如果不没经过读档,枯萎的像仙人掌还能保持一段时间(canbepicked=true),而获得小树枝?


              14楼2016-08-30 23:18
              收起回复