017-熱更新只FishingJoy二

今天咱們繼續學習xlua的案例,咱們發現這個xlua仍是很簡單的,你須要要進行簡單的操做,而後再根據你的需求就能夠完成你想要的效果,可是xlua也有一個很差的地方,就是很容易寫錯,這個是比較蛋疼的,咱們在寫lua語言的時候必定要注意。好了,開始咱們今天的內容。下面是客戶提的要求。dom

1.2函數

1.與UI交互時不能發射子彈。*
2.技能扣鑽石太多。*
3.boss撞擊玩家數值變更同樣且不是減小是增長。*學習


1.3ui

1.boss撞擊玩家當鑽石金幣不夠時會產生負數。*
2.炮臺3太強,且鑽石沒用處,不削弱,只有氪金纔可以使用。*
3.大魚太多。 *lua

接下來咱們一個一個的解決。spa

1與UI交互時不能發射子彈。code

這個問題其實咱們在之前碰見過,就是siki老師的黑暗之光的課程中,其實這個問題也是很簡單的,只要咱們在鼠標按到技能圖標的時候,就不作動做。用到的就是這個方法:UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()只不過在lua中咱們要進行變形是UnityEngine.EventSystems.EventSystem.current:IsPointerOverGameObject()blog

if UnityEngine.EventSystems.EventSystem.current:IsPointerOverGameObject() then
            return
        end

在進行技能的開始的時候加入這句話就好了,就是fish.lua.txt中的第二個函數。索引

2技能扣鑽石太多。遊戲

這個問題咱們能夠在項目中發現管理技能的三個腳本,ButterFly Fire Ice,在三個類中,找到要改的方法,注入,註冊,這個寫法也是很簡單的,以下:

xlua.private_accessible(CS.Fire)
xlua.hotfix(CS.Fire,'Start',function(self)
    self.reduceDiamands=8
end
)

xlua.private_accessible(CS.Ice)
xlua.hotfix(CS.Ice,'Start',function(self)
    self.reduceDiamands=8
end
)

xlua.private_accessible(CS.ButterFly)
xlua.hotfix(CS.ButterFly,'Start',function(self)
    self.reduceDiamands=5
end
)

注意一點的是要在fishDispose.lua.txt中進行反註冊

xlua.hotfix(CS.Fire,'Start',nil)
xlua.hotfix(CS.Ice,'Start',nil)
xlua.hotfix(CS.ButterFly,'Start',nil)

3.boss撞擊玩家數值變更同樣且不是減小是增長

在這個問題中咱們發現其實咱們要改的boss類中的指定方法有不少的代碼是有用的,咱們只要改其中的一點點內容,因此咱們就要用到了新方法util,就是將xlua中的util賦值到fish.lua.txt同一級目錄,而後就能夠用以下的寫法了

local util=require 'util'
xlua.private_accessible(CS.Boss)
util.hotfix_ex(CS.Boss,'Start',function(self)
    self.Start(self)
    self.m_reduceGold=self.m_reduceGold-20
end
)

xlua.private_accessible(CS.DeffendBoss)
util.hotfix_ex(CS.DeffendBoss,'Start',function(self)
    self.Start(self)
    self.m_reduceGold=self.m_reduceGold-30
end
)

xlua.private_accessible(CS.InvisibleBoss)
util.hotfix_ex(CS.InvisibleBoss,'Start',function(self)
    self.Start(self)
    self.m_reduceDiamond=self.m_reduceDiamond-5
end
)

記得反註冊,在這裏咱們還要注意的一點是hotfixScripts中的Start()中的方法,寫到Awake中。由於在Start中寫的話,編譯的順序就不一致的,lua的工做要在全部的工做的以前,這樣纔不會報錯。

4boss撞擊玩家當鑽石金幣不夠時會產生負數

這個問題如上面的同樣以下:

util.hotfix_ex(CS.Gun,'GoldChange',function(self,number)
    --只須要在負數的時候爲0就行,其餘方法不變
    self.GoldChange(self,number)
    if(self.gold<-number)then
        self.gold=0
        return
    end
end
)

5炮臺3太強,且鑽石沒用處,不削弱,只有氪金纔可以使用。

這個問題就是限制炮臺3的使用限制,必須使用磚石才行。這樣咱們就知道咱們應該在炮臺選擇的方法去修改。在fish.lua.txt的第二個方法中寫以下:

    --炮臺3太強,且鑽石沒用處,不削弱,只有氪金纔可以使用。
        if self.gunLevel==3 and self.diamands<3 then
        return
        elseif self.gunLevel ~=3 then
            if(self.gold<1+(self.gunLevel-1)*2 or gold==0)then
            return
            end
        end

在進行選擇的操做,咱們還要進行磚石的扣除,以下圖:

    if(not self.canShootForFree)then
            if(self.gunLevel==3)then
                self:DiamandsChange(-3)
            else 
             self:GoldChange(-1-(self.gunLevel-1)*2)
            end
        end

6大魚太多。這個就是咱們在寫腳本的時候,沒有索引用變量寫上,這樣的話,拓展性將會不好,咱們就重寫方法:

xlua.private_accessible(CS.CreateFish)
xlua.hotfix(CS.CreateFish,'Update',function(self)
    self:CreateALotOfFish()
    --大魚太多。
    if (self.ItemtimeVal >= 0.5)then
        
            --//位置隨機數
            self.num = UnityEngine.Mathf.Floor(UnityEngine.Random.Range(0, 4))
            --//遊戲物體隨機數
            self.ItemNum = UnityEngine.Mathf.Floor(UnityEngine.Random.Range(1, 101))

            local halfLength=self.fishList.Length/2
            --定義小魚的產生機率
            local littlefishTypeIndex=UnityEngine.Mathf.Floor(UnityEngine.Random.Range(0,halfLength))
            --定義大魚的生產機率
            local bigfishTypeIndex=UnityEngine.Mathf.Floor(UnityEngine.Random.Range(halfLength+1,self.fishList.Length))
            --定義物品的生產機率
            local itemTypeIndex=UnityEngine.Mathf.Floor(UnityEngine.Random.Range(0,self.item.Length))
            --產生氣泡
            if (self.ItemNum < 20)then
                self:CreateGameObject(self.item[3]);
                self:CreateGameObject(self.fishList[6]);
            end
            --貝殼10% 85-94 
            --第一種魚42% 42
            if (self.ItemNum <= 42)then
                --3種小魚
                for i=0,2,1 do
                self:CreateGameObject(self.fishList[littlefishTypeIndex])
                end
                self:CreateGameObject(self.item[itemTypeIndex])

            --第二種魚30% 43-72
            elseif (self.ItemNum >= 43 and self.ItemNum < 72)then
                --兩種大魚
                for i=0,1,1 do
                self:CreateGameObject(self.fishList[bigfishTypeIndex])
                end
                self:CreateGameObject(self.item[itemTypeIndex]) 
                
            elseif(self.ItemNum>=84 and self.ItemNum<=86)then
                self.CreateGameObject(self,self.boss)

            elseif(self.ItemNum>=87 and self.ItemNum<=88)then
                self.CreateGameObject(self,self.boss2)

            elseif(self.ItemNum==100)then
                self.CreateGameObject(self,self.boss3)

            else  
                self:CreateGameObject(self.item[0])
            end
                self.ItemtimeVal = 0;
        else
            self.ItemtimeVal =self.ItemtimeVal+UnityEngine.Time.deltaTime
        end
end)

這樣些話的,咱們就能夠完成最後一個要求的。咱們發現本部分的內容計較簡單,這就說明xlua的簡單引用,仍是最後一句話,必定要細心,否則會很容易錯的。

相關文章
相關標籤/搜索