• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Error

            C++博客 首頁 新隨筆 聯系 聚合 管理
              217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
            目前覺得比較好的做法,C++寫具體控件效果,lua處理事件響應
            <EventList>
                <Event Name="OnCreate" File="LogonWnd.xml.lua" Func="MSG_OnCreate"/>
            </EventList>

            function MSG_OnCreate(self)
            i = 0
            print(self)
            end

            self為事件源注冊到lua中的類型事例。

            迅雷界面庫中還有另一種做法:

            function OnInit()

            local owner = self:GetOwner()

                          local objFactory = XLGetObject("Xunlei.UIEngine.ObjectFactory")
                          local newIcon = objFactory:CreateUIObject("icon2","ImageObject")
                          local xarManager = XLGetObject("Xunlei.UIEngine.XARManager")
                          newIcon:SetResProvider(xarManager)
                          newIcon:SetObjPos(45,165,45+70,165+70)
                          newIcon:SetResID("app.icon2")
                          local function onClickIcon()
                               XLMessageBox("Don't touch me!")
                          end
                          newIcon:AttachListener("OnLButtonDown",true,onClickIcon)
                          self:AddChild(newIcon)
            end

            直接在lua層處理事件,貌似更舒服了。但是所引用的函數不能是上層C的,也不能有self參數了,否則內存管理又是一大害處。
            這里的AttachListener應該和上層的Wnd類或者對應的派發消息的CPP里邊的《EventList》關聯,貌似這樣能動態添加消息處理器,而且不用擔心對象生命周期管理。


            觀摩了一下迅雷的sdk給的粒子,發現他們可能修改了虛擬機,發現在不同的文件中會有相同的函數,而且都是全局的,聯想到前面配置的時候要給定一個文件名和一個函數名,要么就傻逼的每次調用前都要loadfile一次,不然很可能修改lua虛擬機,或者lua api支持按文件索引。

            問題:cpp向lua派發事件的時候函數名,名字沖突。迅雷的做法是文件名+函數名索引,但是目前我的技術積累做不到。
            解決辦法:
            1.靠自己約定,即自己確保所有lua文件中都沒有相同的函數
            2.參考魔獸世界,然后加點佐料的做法:<scripts file="LogonWnd.lua" />  <Event EventName="BtnClick" EventSink="LogonWnd.BtnClick">
            也就是默認每個文件名中的所有函數都在以文件名為名字控件的作用域下

            posted on 2014-06-19 11:56 Enic 閱讀(402) 評論(0)  編輯 收藏 引用 所屬分類: 從零開始寫棋牌游戲平臺
            久久中文字幕人妻熟av女| 一本色道久久综合| 久久天堂电影网| 国产成人久久精品麻豆一区| 久久九九久精品国产免费直播| 久久精品国产亚洲精品| 精品多毛少妇人妻AV免费久久 | 国产亚洲婷婷香蕉久久精品 | 婷婷久久综合九色综合98| 狠狠色丁香婷综合久久| 四虎亚洲国产成人久久精品| 亚洲国产精品无码成人片久久| 久久精品国产精品亚洲毛片| 久久精品国产福利国产琪琪| 亚洲AV无码久久精品狠狠爱浪潮| 国产精品禁18久久久夂久| 中文字幕无码久久久| 99久久精品九九亚洲精品| 久久亚洲AV无码精品色午夜麻豆| 久久综合丁香激情久久| 国产亚洲精品久久久久秋霞| 99久久国产亚洲高清观看2024 | 久久99国产精品成人欧美| 日韩人妻无码精品久久免费一| 久久国产成人午夜aⅴ影院 | 人妻无码αv中文字幕久久 | 亚洲精品成人久久久| 9999国产精品欧美久久久久久| 亚洲色大成网站WWW久久九九| 久久久久九国产精品| 99久久无码一区人妻| 国产精品久久久久久福利漫画| 一本色道久久88—综合亚洲精品| 久久久国产亚洲精品| 亚洲精品tv久久久久久久久久| 久久久久成人精品无码 | 伊人久久精品无码二区麻豆| 日韩久久久久中文字幕人妻| 国产亚洲精久久久久久无码AV| 9191精品国产免费久久| 成人午夜精品久久久久久久小说|