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

歡迎光臨散文網(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)撤銷,重做,歷史記錄功能的評論 (共 條)

分享到微博請遵守國家法律
寿宁县| 凤阳县| 永春县| 梨树县| 弥渡县| 泾阳县| 德昌县| 昭通市| 六安市| 清丰县| 安福县| 牡丹江市| 固镇县| 慈利县| 乳源| 唐山市| 彰武县| 黄山市| 宣威市| 葫芦岛市| 永定县| 琼海市| 麦盖提县| 乌恰县| 江孜县| 南乐县| 仪陇县| 克山县| 托克托县| 新余市| 天门市| 博野县| 宁蒗| 仙游县| 怀集县| 同德县| 临武县| 新宁县| 米脂县| 右玉县| 临潭县|