五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

分享到微博請遵守國家法律
合作市| 库尔勒市| 盐山县| 涞水县| 济源市| 瑞昌市| 长治县| 湖州市| 黑龙江省| 阳城县| 宁阳县| 申扎县| 额敏县| 马公市| 浑源县| 崇阳县| 武宣县| 华亭县| 扎赉特旗| 礼泉县| 中卫市| 泸水县| 苗栗县| 宣武区| 连州市| 腾冲县| 科技| 五家渠市| 山西省| 根河市| 于田县| 安龙县| 汕尾市| 寻乌县| 临夏县| 三台县| 屏南县| 青川县| 娄底市| 海盐县| 连江县|