• <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>

            劍孤寒的小站

            人生的價值不是用時間,而是用深度去衡量的!
            posts - 75, comments - 290, trackbacks - 0, articles - 0

               最近依然很忙,項目太緊已經很久沒寫東西了。今天難得得空,把以前寫的一個RPG代碼翻出來看了看,發現很多設計上的問題,所以準備重寫了。這個游戲本來已接近完成,只要整合完各個系統就是一個完整的游戲了,現在推掉重寫老實說心里是很不愿意的,但我更不愿意把一個自己都不滿意的東西發出來,所以前思后想還是決定重寫了,還好自己的東西沒有項目壓力,有時間就弄弄
               好了,閑話就不多說了,我在看代碼時首先注意到的一個問題是,Galaxy2D游戲引擎的GUI系統適用范圍太窄,以至于在這個RPG中又寫了一個GUI系統,這是因為GUI系統控件之間的聯系太“散”了,也沒有一個層的概念,所以在遇到比較復雜的需求時就沒法用了。Galaxy2D的GUI系統是參考HGE寫的,在HGE的GUI系統里,所有的控件都是平級的,所以當要控制GUIManager里的所有控件的一個界面上的某些控件時就變得非常麻煩,雖然后來寫了一個Window控件來建立一個“層”的關系,但后來發現還是不好用,而且由于很多功能與GUIManager相似,導致產生了大量的冗余代碼。另外,由于以前的GUI沒有消息路由機制,所以當一個消息傳到一個最末端的控件上時就“死”掉了,根本沒機會再通知其他可以處理它的控件,這也使一些像某個控件被點擊后將另一個控件高亮等操作要實行硬編碼了,如果那一天那個控件改了名字或ID,這邊的代碼也要跟著改。以上這兩點都違背了設計模式里的“開放-封閉”原則,這樣的代碼是非常不好維護的,所以準備做如下修改:
               首先,把GUIManager中控件List的管理移到Window控件里去,GUIManager只負責把各種事件消息傳到頂層Window控件,而不再管理和維護控件列表,Window控件上可掛其他控件或再掛個Window控件。這樣就把層的關系建立起來了,而且GUIManager和Window控件的職責也清楚了,不會再有代碼冗余,以后如果還要再添功能也只要改Window控件就行了,GUIManager不用做修改。
               其次,給Window控件添加消息路由機制,該機制分兩種模式:Send和Post。Send為立即模式,Post為緩存模式,消息將在下一幀中處理。消息傳遞路徑為:自身子控件->同級控件的子控件->同級控件->父控件。這樣如果一個控件被點擊了,要高亮另一控件,只要發送一個消息即可,響應控件在接到消息后把自己高亮起來就可以了。

            久久久久久久久久久免费精品| 女同久久| 国产伊人久久| 少妇人妻综合久久中文字幕| 亚洲国产精品无码久久SM| 久久精品国产69国产精品亚洲| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 国产亚洲色婷婷久久99精品| 香港aa三级久久三级| 国产69精品久久久久APP下载| 亚洲日韩中文无码久久| 国产午夜电影久久| 久久人人妻人人爽人人爽| 99久久婷婷国产综合精品草原| 亚洲精品无码久久毛片| 国产亚洲精久久久久久无码| 久久无码人妻精品一区二区三区| 丁香色欲久久久久久综合网| 99久久精品九九亚洲精品| 国内精品伊人久久久久777| 久久久综合香蕉尹人综合网| 国产精品久久久久影院嫩草 | 久久九九精品99国产精品| 午夜精品久久久内射近拍高清| 久久99国产精品久久| 日产精品99久久久久久| 亚洲欧美日韩精品久久亚洲区| 91精品国产91热久久久久福利| 国内精品久久久人妻中文字幕| 久久受www免费人成_看片中文| 久久久国产精品| 久久久久国产精品嫩草影院| 亚洲午夜久久久精品影院 | 久久天天躁狠狠躁夜夜躁2O2O| 久久亚洲国产成人精品无码区| 九九99精品久久久久久| 69SEX久久精品国产麻豆| 麻豆AV一区二区三区久久 | 久久综合给合久久狠狠狠97色| 久久综合亚洲鲁鲁五月天| 一极黄色视频久久网站|