最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

egret白鷺引擎繪畫程序,實現(xiàn)撤銷,重做,歷史記錄功能

2022-03-30 17:10 作者:-千里馬-  | 我要投稿

?就在最近幾天我在做游戲的場景編輯器,場景編輯器的繪畫場景功能需要有一個繪畫系統(tǒng),繪畫系統(tǒng)前半部分筆刷配置等等各種東西都做完了就差歷史記錄和非常關(guān)鍵的功能ctrl+z撤銷,ctrl+shift+z重做了。

這三個功能的重要程度有多高呢?基本上每個比較專業(yè)一點的生產(chǎn)力軟件都標(biāo)準(zhǔn)配備的,不分公司還是操作系統(tǒng)還是各種應(yīng)用程序,乃至于所有生產(chǎn)軟件都有的一種通用性非常強的功能。

?

?那么我是怎么實現(xiàn)的呢?

首先所有的繪畫功能函數(shù)類等等系統(tǒng)都已經(jīng)比較完備了,可以直接調(diào)用其中的接口進(jìn)行各種程序繪畫的工作。

而這三個功能是建立在這些基礎(chǔ)功能之上的所以我就用繼承的面向?qū)ο蠓椒ɡ^承一層歷史記錄系統(tǒng)。

?讓我們分析一下,歷史記錄的本質(zhì),其實不管是撤銷還是重做都是建立在歷史記錄功能上的,所以我就進(jìn)行優(yōu)先制作歷史記錄功能。然后開發(fā)撤銷,重做。

我的實現(xiàn)方法是先讓繪畫類有一個信息提供的基礎(chǔ),比如我現(xiàn)在用的什么筆刷,畫的這一筆畫了多少個點,點都在什么位置,每畫一筆我都會記錄每一筆的記錄然后存起來。

這樣歷史記錄層就可以看見每一筆的記錄都有什么內(nèi)容,能夠保存起來,這時候就分化出了兩種不同的歷史記錄解決方案。

?先說第一種,每次撤銷重做記錄都進(jìn)行一遍繪畫到當(dāng)前選擇點的繪畫流程渲染,很顯然這樣對性能消耗很高,所以我就直接在抬起畫筆位置進(jìn)行保存一遍當(dāng)前畫布的texture紋理到數(shù)組里面。

這是第二種方案了,texture紋理占用空間也不會特別大,畢竟沒有渲染就是掛到內(nèi)存里面罷了,而且現(xiàn)在電子設(shè)備的內(nèi)存容量相比以前已經(jīng)非常大幅度提升了,至少可以存到1萬步記錄。所以嘛,我就把所有記錄的紋理texture都放到一個數(shù)組里面,每次打開繪畫文件的時候就進(jìn)行遍歷一次,存入每一步記錄到texture數(shù)組。

這時候撤銷和重做功能也就有了基礎(chǔ)的提供,撤銷就是減去一步繪畫內(nèi)容,重做就是添加一步繪畫內(nèi)容,不過這里要注意了,歷史記錄不能刪除,不過可以覆蓋,指定當(dāng)前指示繪畫筆畫點的位置就可以了。

所以就這樣完美的實現(xiàn)了歷史記錄,重做,撤銷功能,比較簡單,沒有復(fù)雜的算法。


egret白鷺引擎繪畫程序,實現(xiàn)撤銷,重做,歷史記錄功能的評論 (共 條)

分享到微博請遵守國家法律
泰州市| 德惠市| 吉首市| 昌邑市| 隆回县| 竹山县| 大竹县| 鄯善县| 武平县| 稷山县| 昭觉县| 报价| 扶风县| 中阳县| 连州市| 怀化市| 汤原县| 沙湾县| 镇平县| 萝北县| 周至县| 莒南县| 达州市| 哈巴河县| 抚松县| 雷山县| 桐乡市| 琼中| 尤溪县| 龙陵县| 湘西| 黄石市| 合作市| 东港市| 肥城市| 宝丰县| 金平| 通州区| 桓仁| 高邮市| 阿勒泰市|