<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                加班加了三個月終于喘了口氣,博客很久沒有更新了,這段期間框架加了很多 Feature,大部分不太穩定,這些 Feature中實現起來比較簡單而且用的比較穩定的就是鏈式編程支持了。 ## 什么是鏈式編程? 我想大家應該都接觸過DOTween,用起來是這樣的。 ```cs transform.DOMove(Vector3.one, 0.5f) .SetEase(Ease.InBack) .OnKill(() => Debug.Log("on killed")) .OnComplete(() => Debug.Log("on completed")); ``` 像以上.XXX().YYY().ZZZ()這種寫法就叫鏈式編程了。 ## QChain是什么? QFramework 中有零零散散支持了鏈式寫法,打算整理出來作為一個獨立的庫進行過維護。目前的使用方式如下: ```cs this.Show() .LocalIdentity() // 歸一化 .LocalPosition(Vector3.back) .LocalPositionX(1.0f) .Sequence() // 開始序列 .Delay(1.0f) .Event(() => Log.I("frame event")) .Until(() => count == 2) .Event(() => Log.I("count is 2")) .Begin() // 執行序列 .DisposeWhen(() => count == 3) .OnDisposed(() => Log.I("On Disposed")); this.Repeat() .Delay(1.0f) .Event(() => count++) .Begin() .DisposeWhenGameObjDestroyed(); this.Repeat(5) .Event(() => Log.I(" Hello workd")) .Begin() .DisposeWhenFinished(); // 默認是這個 this.Sequence() .Delay(1.0f) .Event(() => Log.I("delay one second")) .Delay(1.0f) .Event(() => Log.E("delay two second")) .Begin(); ``` ## 為什么要用 QChain 前段時間在給公司寫一個藍牙的插件,比較麻煩的是藍牙管理類的狀態同步和當狀態改變時通知其他對象的問題。但是有了 QChain,藍牙連接的代碼可以這樣寫: ```cs this.Sequence() .Event(() => PTBluetooth.Initialize(true, false)) .Until(() => PTBluetooth.IsInitialized) .Until(() => PTBluetooth.IsOpened) .Event(() => PTBluetooth.ScanPeripheral((address, name, rssi, adInfo) => name.Contains("device"))) .Until(() => PTBluetooth.ScannedDevices.Count >= 1) .Event(() => PTBluetooth.ConnectToPeripheral(PTBluetooth.ScannedDevices[0].Address)) .Begin() .DisposeWhen(()=> { if (PTBluetooth.IsInitialized && !PTBluetooth.IsOpened) { // TODO: 這里處理初始化失敗邏輯 return true; } // ... 其他失敗邏輯處理 return false; }); ``` 這樣寫的好處是,邏輯不會分散到處都是。相比于協程,生命周期更好進行管理(不用管理協程對象),可作為協程的替代方案。還有其他的好處隨著本系列的更新逐個討論。 轉載請注明地址:涼鞋的筆記:[liangxiegame.com](http://liangxiegame.com) ## 更多內容 * QFramework 地址:[https://github.com/liangxiegame/QFramework](https://github.com/liangxiegame/QFramework) * QQ 交流群:[623597263](http://shang.qq.com/wpa/qunwpa?idkey=706b8eef0fff3fe4be9ce27c8702ad7d8cc1bceabe3b7c0430ec9559b3a9ce66) * **Unity 進階小班**: * 主要訓練內容: * 框架搭建訓練(第一年) * 跟著案例學 Shader(第一年) * 副業的孵化(第二年、第三年) * 權益、授課形式等具體詳情請查看[《小班產品手冊》](https://liangxiegame.com/master/intro):https://liangxiegame.com/master/intro * 關注公眾號:liangxiegame 獲取第一時間更新通知及更多的免費內容。 ![](http://file.liangxiegame.com/38eccb55-40b2-4845-93d6-f5fb50ff9492.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看