国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種圖形繪制方法及裝置與流程

      文檔序號(hào):11406789閱讀:214來(lái)源:國(guó)知局
      一種圖形繪制方法及裝置與流程

      本發(fā)明涉及軟件開(kāi)發(fā)領(lǐng)域,更具體地,涉及一種圖形繪制方法及裝置。



      背景技術(shù):

      在軟件開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員經(jīng)常會(huì)使用開(kāi)發(fā)平臺(tái)所提供的圖形繪制接口來(lái)處理一些對(duì)性能要求較高的界面動(dòng)畫(huà)操作。目前使用圖形繪制接口進(jìn)行圖形顯示時(shí),首先將所有需要顯示的圖片資源一次加載到內(nèi)存中,然后等到需要顯示該圖片時(shí)就將內(nèi)存中對(duì)應(yīng)的資源進(jìn)行顯示。

      現(xiàn)有技術(shù)存在如下問(wèn)題:一次將所有的資源加載進(jìn)內(nèi)存,特別是遇到復(fù)雜的動(dòng)畫(huà)效果或游戲場(chǎng)景顯示時(shí),會(huì)導(dǎo)致加載時(shí)間過(guò)長(zhǎng),內(nèi)存占用過(guò)多,不僅影響界面動(dòng)畫(huà)的初次顯示效果,還可能導(dǎo)致應(yīng)用的響應(yīng)速度變慢和性能下降,用戶(hù)體驗(yàn)較差。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明提供一種圖形繪制方法及裝置,能夠克服或者至少部分解決現(xiàn)有圖形繪制技術(shù)中存在的一次將所有資源加載進(jìn)內(nèi)存,加載時(shí)間過(guò)長(zhǎng)、內(nèi)存占用過(guò)多、顯示效果差,導(dǎo)致應(yīng)用的性能下降和用戶(hù)體驗(yàn)差的問(wèn)題。

      根據(jù)本發(fā)明的一個(gè)方面,提供一種圖形繪制方法,包括:

      步驟1,基于相同的幀圖像界面元素,將圖形劃分為多個(gè)待繪制的邏輯層;

      步驟2,基于層切換的狀態(tài)機(jī),對(duì)所述多個(gè)待繪制的邏輯層分別進(jìn)行獨(dú)立的資源加載和繪制。

      其中,所述步驟1進(jìn)一步包括:

      將圖形細(xì)化為多個(gè)幀圖像,獲取繪制所述多個(gè)幀圖像中的每個(gè)幀圖像所需要的界面元素;

      將所有需要相同界面元素的幀圖像設(shè)定為同一邏輯層,得到多個(gè)待繪制的邏輯層。

      其中,所述步驟2進(jìn)一步包括:

      定義第一數(shù)組,且將所述第一數(shù)組中的各個(gè)變量分別初始化為所述多個(gè)待繪制的邏輯層中的各個(gè)邏輯層;

      從所述第一數(shù)組中順序讀取所述各個(gè)邏輯層作為目標(biāo)層。

      其中,所述步驟2進(jìn)一步包括:

      調(diào)用所述目標(biāo)層的加載函數(shù),對(duì)繪制所述目標(biāo)層所需要的資源進(jìn)行加載;

      基于所述資源,調(diào)用所述目標(biāo)層的繪制函數(shù)對(duì)所述目標(biāo)層進(jìn)行繪制;

      繪制完成后,調(diào)用所述目標(biāo)層的釋放函數(shù),釋放所述資源。

      其中,所述狀態(tài)機(jī)包括:枚舉類(lèi)、第二數(shù)組和層切換函數(shù),其中,

      所述枚舉類(lèi)的各個(gè)成員分別為所述多個(gè)待繪制的邏輯層中的各個(gè)邏輯層;

      所述第二數(shù)組中的各個(gè)變量分別被初始化為所述多個(gè)待繪制的邏輯層中各個(gè)邏輯層的枚舉;

      所述層切換函數(shù)的形參的類(lèi)型為所述枚舉類(lèi),且所述層切換函數(shù)的內(nèi)部包括一個(gè)用于保存當(dāng)前邏輯層的全局變量。

      其中,所述步驟2進(jìn)一步包括:

      將所述第二數(shù)組中的各個(gè)變量順序作為所述層切換函數(shù)的實(shí)參,調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制。

      其中,所述調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制包括:

      判斷所述全局變量是否為空,若不為空,則調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的釋放函數(shù),釋放繪制當(dāng)前邏輯層所需要的資源;

      將所述層切換函數(shù)的實(shí)參傳遞給所述全局變量;

      調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的加載函數(shù),加載繪制所述全局變量所對(duì)應(yīng)的邏輯層所需要的資源,并基于所述資源,調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的繪制函數(shù),對(duì)所述全局變量所對(duì)應(yīng)的邏輯層進(jìn)行繪制。

      其中,所述調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制包括:

      判斷所述全局變量是否為空,若為空,則將所述層切換函數(shù)的實(shí)參傳遞給所述全局變量;

      調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的加載函數(shù),加載繪制所述全局變量所對(duì)應(yīng)的邏輯層所需要的資源,并基于所述資源,調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的繪制函數(shù),對(duì)所述全局變量所對(duì)應(yīng)的邏輯層進(jìn)行繪制。

      其中,調(diào)用所述繪制函數(shù)包括:

      在所述繪制函數(shù)的內(nèi)部,調(diào)用開(kāi)發(fā)平臺(tái)所提供的圖形繪制接口中的繪制類(lèi)方法。

      根據(jù)本發(fā)明的一個(gè)方面,提供一種圖形繪制裝置,包括:

      邏輯分層模塊,用于基于相同的幀圖像界面元素,將圖形劃分為多個(gè)待繪制的邏輯層;

      繪制模塊,用于基于層切換的狀態(tài)機(jī),對(duì)所述多個(gè)待繪制的邏輯層分別進(jìn)行獨(dú)立的資源加載和繪制。

      本發(fā)明提供一種圖形繪制方法及裝置,將動(dòng)畫(huà)效果或者游戲場(chǎng)景中的圖形繪制時(shí)所需要的資源分開(kāi)加載,以分層的方式去實(shí)現(xiàn)圖形繪制,繪制完成后及時(shí)釋放內(nèi)存,內(nèi)存占用率低、能有效避免因?yàn)橐淮渭虞d所有資源造成的性能損耗。

      附圖說(shuō)明

      圖1為本發(fā)明一實(shí)施例提供的一種圖形繪制方法的流程示意圖;

      圖2為本發(fā)明另一實(shí)施例提供的基于圖1中步驟s12的流程示意圖;

      圖3本發(fā)明另一實(shí)施例提供的調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制的流程示意圖;

      圖4為本發(fā)明另一實(shí)施例提供的調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制的流程示意圖;

      圖5為本發(fā)明又一實(shí)施例提供的一種圖形繪制裝置的結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說(shuō)明本發(fā)明,但不用來(lái)限制本發(fā)明的范圍。

      如圖1所示,為本發(fā)明一實(shí)施例提供的一種圖形繪制方法的流程示意圖,包括:

      s11,基于相同的幀圖像界面元素,將圖形劃分為多個(gè)待繪制的邏輯層;

      s12,基于層切換的狀態(tài)機(jī),對(duì)所述多個(gè)待繪制的邏輯層分別進(jìn)行獨(dú)立的資源加載和繪制。

      具體地,在軟件開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)使用到圖形繪制來(lái)處理一些對(duì)性能要求較高的界面動(dòng)畫(huà)操作或者游戲場(chǎng)景的顯示,無(wú)論是動(dòng)畫(huà)或者游戲場(chǎng)景中的圖形都可以被細(xì)化為多個(gè)幀圖像,每個(gè)幀圖像具體由界面元素組成,界面元素包括:圖片、按鈕、文字、動(dòng)畫(huà)和聲音等元素。同一個(gè)圖形的不同幀圖像中,必然有幾個(gè)幀的界面元素是相同的,可以根據(jù)幀圖像界面元素的相同性,將圖形劃分為多個(gè)待繪制的邏輯層。將圖形劃分為多個(gè)待繪制的邏輯層的目的是為了對(duì)圖形進(jìn)行分層繪制,避免一次加載所有繪制該場(chǎng)景所需要的資源所造成占用內(nèi)存過(guò)多和性能損耗,同時(shí)能夠避免某個(gè)場(chǎng)景因?yàn)樘珡?fù)雜導(dǎo)致代碼邏輯過(guò)于復(fù)雜從而導(dǎo)致后期維護(hù)困難的情況出現(xiàn)。

      步驟s12中基于層切換的狀態(tài)機(jī),所述狀態(tài)機(jī)的狀態(tài)數(shù)等于步驟s11中所得到的多個(gè)待繪制的邏輯層的個(gè)數(shù),每個(gè)狀態(tài)分別對(duì)應(yīng)一個(gè)邏輯層。狀態(tài)機(jī)可歸納為4個(gè)要素,即現(xiàn)態(tài)、條件、動(dòng)作和次態(tài),其中,現(xiàn)態(tài)是指當(dāng)前所處的狀態(tài)。條件又稱(chēng)為事件,當(dāng)一個(gè)條件被滿(mǎn)足,將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。動(dòng)作是指條件滿(mǎn)足后執(zhí)行的動(dòng)作,動(dòng)作執(zhí)行完畢后,可以遷移到新的狀態(tài)。次態(tài)是指條件滿(mǎn)足后要遷往的新?tīng)顟B(tài)。次態(tài)是相對(duì)于現(xiàn)態(tài)而言的,次態(tài)一旦被激活,就轉(zhuǎn)變成新的現(xiàn)態(tài)了。通過(guò)創(chuàng)建一個(gè)狀態(tài)機(jī),來(lái)實(shí)現(xiàn)對(duì)所述多個(gè)待繪制的邏輯層分別進(jìn)行獨(dú)立的資源加載和繪制。其中,前一個(gè)邏輯層的繪制完成為觸發(fā)狀態(tài)遷移的條件,對(duì)當(dāng)前邏輯層進(jìn)行獨(dú)立的資源加載和繪制為具體的動(dòng)作,首先對(duì)層切換狀態(tài)機(jī)的第一個(gè)狀態(tài)所對(duì)應(yīng)的邏輯層進(jìn)行繪制,然后觸發(fā)狀態(tài)機(jī)自動(dòng)遷移到下一個(gè)狀態(tài),對(duì)所述下一個(gè)狀態(tài)所對(duì)應(yīng)的邏輯層進(jìn)行繪制,然后觸發(fā)狀態(tài)遷移……重復(fù)上述過(guò)程,直至最后一個(gè)狀態(tài)所對(duì)應(yīng)的邏輯層的繪制完成。

      本發(fā)明實(shí)施例提供一種圖形繪制方法,以分層的方式去實(shí)現(xiàn)圖形繪制,將動(dòng)畫(huà)效果或者游戲場(chǎng)景中的界面繪制所需要的資源分開(kāi)加載,避免了因?yàn)樗匈Y源都初次一起加載而引起的性能問(wèn)題,同一時(shí)間只有同一個(gè)層需要的資源被加載到內(nèi)存中,可以更加高效的利用內(nèi)存,能夠避免出現(xiàn)內(nèi)存占用過(guò)多的情況。

      本發(fā)明另一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,所述步驟s11進(jìn)一步包括:

      將圖形細(xì)化為多個(gè)幀圖像,獲取繪制所述多個(gè)幀圖像中的每個(gè)幀圖像所需要的界面元素;

      將所有需要相同界面元素的幀圖像設(shè)定為同一邏輯層,得到多個(gè)待繪制的邏輯層。

      具體地,將圖形細(xì)化為多個(gè)幀圖像,獲取繪制所述多個(gè)幀圖像中的每個(gè)幀圖像所需要的界面元素,然后基于所獲取到的界面元素,對(duì)圖形細(xì)化后得到的多個(gè)幀圖像進(jìn)行邏輯分層,即將所有需要相同界面元素的幀圖像設(shè)定為同一邏輯層,將所述多個(gè)幀圖像中的其余各幀圖像分別單獨(dú)設(shè)為一層。比如一個(gè)動(dòng)畫(huà)有n個(gè)幀,其中必然有幾幀所需要的界面元素是相同的,將所有需要相同元素的幀統(tǒng)一設(shè)定為同一層,所以n個(gè)幀的動(dòng)畫(huà)最后可能分成m層,其中,m小于等于n,這m個(gè)層即為所述多個(gè)待繪制的邏輯層。

      本發(fā)明提供一種圖形繪制方法,通過(guò)將圖形進(jìn)行邏輯分層后再分別獨(dú)立繪制,能有效避免因?yàn)橐淮渭虞d所有資源造成的性能損耗,能使內(nèi)存得到更高效的利用。

      如圖2所示,為本發(fā)明另一實(shí)施例提供的基于圖1中步驟s12的流程示意圖,包括:

      s21,定義第一數(shù)組,且將所述第一數(shù)組中的各個(gè)變量分別初始化為所述多個(gè)待繪制的邏輯層中各個(gè)邏輯層;

      s22,從所述第一數(shù)組中順序讀取所述各個(gè)邏輯層作為目標(biāo)層。

      需要說(shuō)明的是,上下文中使用的“第一”、“第二”等術(shù)語(yǔ)僅僅是為了區(qū)別不同的描述對(duì)象,而并非有意限制任何時(shí)間或者空間上的順序。

      具體地,邏輯層用一個(gè)抽象類(lèi)來(lái)實(shí)現(xiàn),這里可以命名為layer,layer中有抽象方法oncreate(),onpaint()及ondestory(),步驟s21中所述多個(gè)待繪制的邏輯層中各個(gè)邏輯層即為所述layer類(lèi)的實(shí)例化對(duì)象,即每個(gè)邏輯層都是一個(gè)layer類(lèi)的對(duì)象。當(dāng)開(kāi)發(fā)人員定好邏輯分層后,需要將定義好的各個(gè)邏輯層進(jìn)行實(shí)現(xiàn),其中加載函數(shù)oncreate()用來(lái)處理繪制當(dāng)前邏輯層所需要加載的資源,包括圖片、音頻和文字等資源,繪制函數(shù)onpaint()用于繪制當(dāng)前邏輯層,ondestory()方法用來(lái)釋放繪制當(dāng)前邏輯層所需要的資源。

      本發(fā)明實(shí)施例的層切換狀態(tài)機(jī)通過(guò)遍歷一個(gè)數(shù)組來(lái)實(shí)現(xiàn),所述數(shù)組的各個(gè)變量分別被初始化為所述多個(gè)待繪制的邏輯層中的各個(gè)邏輯層,即具體的layer類(lèi)對(duì)象。按順序遍歷所述該數(shù)組就可以訪問(wèn)所述多個(gè)待繪制的邏輯層的對(duì)象。按順序讀取數(shù)組變量,即按順序?qū)⑺龈鱾€(gè)邏輯層的對(duì)象,將每次讀取的邏輯層的對(duì)象作為目標(biāo)層,然后對(duì)所述目標(biāo)層進(jìn)行獨(dú)立的資源加載和繪制。數(shù)組變量的順序是根據(jù)不同的場(chǎng)景,開(kāi)發(fā)人員通過(guò)代碼進(jìn)行添加的,通過(guò)遍歷數(shù)組就可以實(shí)現(xiàn)不同邏輯層之間的切換。

      本發(fā)明實(shí)施例提供的一種圖形繪制方法,通過(guò)遍歷數(shù)組實(shí)現(xiàn)多個(gè)層之間的切換,代碼清晰后期維護(hù)成本低,以分層的方式去實(shí)現(xiàn)圖形繪制,避免了將一堆代碼寫(xiě)一個(gè)一個(gè)界面,減少了代碼的復(fù)雜度和bug率。

      本發(fā)明又一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,所述步驟s12進(jìn)一步包括:

      調(diào)用所述目標(biāo)層的加載函數(shù),對(duì)繪制所述目標(biāo)層所需要的資源進(jìn)行加載;

      基于所述資源,調(diào)用所述目標(biāo)層的繪制函數(shù)對(duì)所述目標(biāo)層進(jìn)行繪制;

      繪制完成后,調(diào)用所述目標(biāo)層的釋放函數(shù),釋放所述資源。

      具體的,確定目標(biāo)層后要對(duì)目標(biāo)層進(jìn)行繪制,具體的繪制過(guò)程如下:首先,調(diào)用所述目標(biāo)層的加載函數(shù)oncreate(),對(duì)繪制所述目標(biāo)層所需要的資源進(jìn)行加載;然后,基于所述資源,調(diào)用所述目標(biāo)層的繪制函數(shù)onpaint(),對(duì)所述目標(biāo)層進(jìn)行繪制;在目標(biāo)層繪制完成后,調(diào)用所述目標(biāo)層的釋放函數(shù)ondestory(),釋放加載進(jìn)內(nèi)存的所述資源。

      本發(fā)明實(shí)施例提供的一種圖形繪制方法,對(duì)圖形的資源進(jìn)行分層加載,分散了資源加載的時(shí)期,并在每一個(gè)邏輯層繪制完成后立即釋放資源,可以有效避免一次加載過(guò)多資源導(dǎo)致的性能損耗,并有效減少內(nèi)存占用率。

      本發(fā)明另一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,所述狀態(tài)機(jī)包括:枚舉類(lèi)、第二數(shù)組和層切換函數(shù),其中,

      所述枚舉類(lèi)的各個(gè)成員分別為所述多個(gè)待繪制的邏輯層中的各個(gè)邏輯層;

      所述第二數(shù)組中的各個(gè)變量分別被初始化為所述多個(gè)待繪制的邏輯層中各個(gè)邏輯層的枚舉;

      所述層切換函數(shù)的形參的類(lèi)型為所述枚舉類(lèi),且所述層切換函數(shù)的內(nèi)部包括一個(gè)用于保存當(dāng)前邏輯層的全局變量。

      具體地,本發(fā)明實(shí)施例的狀態(tài)機(jī)通過(guò)定義枚舉、第二數(shù)組和調(diào)用層切換函數(shù)來(lái)實(shí)現(xiàn),枚舉和第二數(shù)組將所述多個(gè)待繪制的邏輯層進(jìn)行封裝,將封裝后的邏輯層作為狀態(tài)轉(zhuǎn)移的條件,通過(guò)調(diào)用層切換函數(shù)來(lái)實(shí)現(xiàn)繪制操作,從而實(shí)現(xiàn)了基于層切換的狀態(tài)機(jī),對(duì)所述多個(gè)待繪制的邏輯層分別進(jìn)行獨(dú)立的資源加載和繪制。

      定義一個(gè)枚舉類(lèi),所述枚舉類(lèi)的成員是所述多個(gè)待繪制的邏輯層中各個(gè)邏輯層,那么每個(gè)邏輯層都是一個(gè)枚舉,比如有m個(gè)待繪制的層,枚舉的成員就有m個(gè),狀態(tài)機(jī)就有m種狀態(tài),分別對(duì)應(yīng)各個(gè)邏輯。用枚舉對(duì)各個(gè)邏輯層進(jìn)行封裝,目的是為了能夠清晰地知道當(dāng)前狀態(tài)機(jī)處于繪制哪個(gè)層的狀態(tài)。

      定義第二數(shù)組,將所述數(shù)組中的各個(gè)變量分別初始化為所述多個(gè)待繪制的邏輯層中各個(gè)邏輯層的枚舉,訪問(wèn)數(shù)組變量,就可以訪問(wèn)所述各個(gè)邏輯層的對(duì)象。數(shù)組變量的順序是根據(jù)不同的場(chǎng)景,開(kāi)發(fā)人員通過(guò)代碼進(jìn)行添加的,通過(guò)遍歷數(shù)組可以實(shí)現(xiàn)不同層之間的切換。

      定義一個(gè)層切換函數(shù),這里可以命名為changelayer(),changelayer()函數(shù)的形參類(lèi)型為所定義的枚舉類(lèi),以需要繪制的邏輯層的枚舉作為參數(shù),來(lái)實(shí)現(xiàn)不同邏輯層之間的切換。在所述層切換函數(shù)changelayer()的內(nèi)部定義一個(gè)全局變量curlayout,用來(lái)保存當(dāng)前邏輯層的對(duì)象。

      本發(fā)明實(shí)施例提供的一種圖形繪制方法,通過(guò)枚舉將多個(gè)待繪制的層進(jìn)行封裝,通過(guò)遍歷數(shù)組實(shí)現(xiàn)多個(gè)層之間的切換,代碼清晰后期維護(hù)成本低,以分層的方式去實(shí)現(xiàn)圖形繪制,避免了將一堆代碼寫(xiě)一個(gè)一個(gè)界面,減少了代碼的復(fù)雜度和bug率。

      本發(fā)明另一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,所述步驟s12進(jìn)一步包括:將所述數(shù)組中的各個(gè)變量順序作為所述層切換函數(shù)的實(shí)參,調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制。

      具體地,將所述數(shù)組中的各個(gè)變量順序作為層切換函數(shù)的實(shí)參,即順序?qū)⒏鱾€(gè)邏輯層的枚舉作為層切換函數(shù)changelayer()的實(shí)參傳遞給全局變量curlayout,全局變量curlayout此時(shí)被分別賦值為所述各個(gè)邏輯層的枚舉,即通過(guò)全局變量curlayout,就可以訪問(wèn)到邏輯層的對(duì)象。然后,通過(guò)調(diào)用層切換函數(shù)changelayer()就可以對(duì)全局變量curlayout所對(duì)應(yīng)的邏輯層進(jìn)行繪制,從而通過(guò)實(shí)參傳遞實(shí)現(xiàn)全局變量curlayout所對(duì)應(yīng)的層的改變。

      另外,在每次層切換函數(shù)執(zhí)行完成后,都調(diào)用平臺(tái)的暫停函數(shù),類(lèi)似sleep()函數(shù),用于使cpu空閑一段時(shí)間,從而控制動(dòng)畫(huà)或游戲場(chǎng)景的流暢度。在每次層的繪制完成后調(diào)用開(kāi)發(fā)平臺(tái)所提供的暫停函數(shù),可以使系統(tǒng)cpu空閑,提高動(dòng)畫(huà)或游戲場(chǎng)景顯示的流暢度,提升了用戶(hù)體驗(yàn)。

      本發(fā)明實(shí)施例提供的一種圖形繪制方法,通過(guò)遍歷數(shù)組實(shí)現(xiàn)多個(gè)待繪制的邏輯層的逐一繪制,代碼清晰后期維護(hù)成本低。

      如圖3所示,為本發(fā)明另一實(shí)施例提供的調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制的流程示意圖,包括:

      s31,判斷所述全局變量是否為空,若不為空,則調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的釋放函數(shù),釋放繪制當(dāng)前邏輯層所需要的資源;

      s32,將所述層切換函數(shù)的實(shí)參傳遞給所述全局變量;

      s33,調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的加載函數(shù),加載繪制所述全局變量所對(duì)應(yīng)的邏輯層所需要的資源,并基于所述資源,調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的繪制函數(shù),對(duì)所述全局變量所對(duì)應(yīng)的邏輯層進(jìn)行繪制。

      具體地,當(dāng)調(diào)用所述層切換函數(shù)changelayer()對(duì)所述多個(gè)待繪制的層進(jìn)行逐一繪制時(shí),需要先判斷全局變量curlayout是否為空,若全局變量curlayout不為空,則說(shuō)明全局變量curlayout保存了當(dāng)前層的對(duì)象,則會(huì)先調(diào)用全局變量curlayout所對(duì)應(yīng)的當(dāng)前邏輯層的ondestory方法來(lái)釋放當(dāng)前層的資源,然后將傳遞進(jìn)來(lái)的實(shí)參,即需要要繪制的邏輯層的對(duì)象,賦給所述全局變量curlayout,從而將全局變量curlayout設(shè)置成需要繪制的層,然后調(diào)用curlayout所表示的對(duì)象的oncreate()方法和onpaint()方法,這樣就實(shí)現(xiàn)了上個(gè)邏輯層的釋放和新的邏輯層的初始化和繪制。這里對(duì)每個(gè)邏輯層都做自己的初始化和釋放的目的是減少由于第一次將所有資源進(jìn)行加載而造成的資源浪費(fèi)以及性能損耗。

      本發(fā)明實(shí)施例提供的一種圖形繪制方法,分層加載資源,并在繪制完成后釋放所加載的資源,能夠有效提升性能,減少內(nèi)存占用率,提示用戶(hù)使用應(yīng)用軟件的體驗(yàn)。

      如圖4所示,為本發(fā)明另一實(shí)施例提供的調(diào)用所述層切換函數(shù)對(duì)所述多個(gè)待繪制的邏輯層進(jìn)行逐一繪制的流程示意圖,包括:

      s41,判斷所述全局變量是否為空,若為空,則將所述層切換函數(shù)的實(shí)參傳遞給所述全局變量;

      s42,調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的加載函數(shù),加載繪制所述全局變量所對(duì)應(yīng)的邏輯層所需要的資源,并基于所述資源,調(diào)用所述全局變量所對(duì)應(yīng)的邏輯層的繪制函數(shù),對(duì)所述全局變量所對(duì)應(yīng)的邏輯層進(jìn)行繪制。

      具體地,當(dāng)調(diào)用所述層切換函數(shù)changelayer()對(duì)所述多個(gè)待繪制的層進(jìn)行逐一繪制時(shí),需要先判斷全局變量curlayout是否為空,若為空,則說(shuō)明當(dāng)前沒(méi)有層已經(jīng)被繪制了,需要將所述層切換函數(shù)的實(shí)參傳遞給所述全局變量,即將所述全局變量curlayout設(shè)置為要繪制的層,然后調(diào)用所述全局變量curlayout所表示的層的對(duì)象的加載函數(shù)oncreate(),加載繪制所述全局變量所對(duì)應(yīng)的層所需要的資源,并基于所述資源,調(diào)用所述全局變量curlayout所表示的層的對(duì)象的繪制函數(shù)onpaint(),對(duì)所述全局變量所表示的層進(jìn)行繪制。完成上述步驟后,全局變量curlayout不再為空,則跳出步驟。

      本發(fā)明實(shí)施例提供的一種圖形繪制方法,分離了加載資源的時(shí)期,避免了因?yàn)樗匈Y源都初次一起加載而引起的性能問(wèn)題。

      本發(fā)明另一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,調(diào)用所述繪制函數(shù)包括:在所述繪制函數(shù)的內(nèi)部,調(diào)用開(kāi)發(fā)平臺(tái)所提供的圖形繪制接口中的繪制類(lèi)方法。

      具體地,無(wú)論是android還是ios開(kāi)發(fā)平臺(tái)所提供的圖形繪制接口api中都會(huì)有繪制類(lèi)方法,類(lèi)似ondraw()的方法,不同平臺(tái)下可能方法名稱(chēng)不同,但是具有相同功能的方法都是存在的,用于直接繪制圖形,一般情況下ondraw方法的作用是將其繪制的數(shù)據(jù)直接顯示在屏幕buffer上從而達(dá)到顯示的效果,屏幕buffer本質(zhì)上就是一塊屏幕的內(nèi)存地址,在具有獨(dú)顯的設(shè)備上即為顯存。當(dāng)調(diào)用狀態(tài)機(jī)對(duì)待繪制的層進(jìn)行繪制時(shí),直接調(diào)用全局變量curlayout的onpaint()方法,在所述onpaint()方法的內(nèi)部,會(huì)自動(dòng)調(diào)用對(duì)應(yīng)平臺(tái)所提供的圖形繪制接口中的繪制類(lèi)方法ondraw(),進(jìn)行新層的繪制。

      本發(fā)明實(shí)施例提供的一種圖形繪制方法,在對(duì)每個(gè)層進(jìn)行繪制時(shí)調(diào)用開(kāi)發(fā)平臺(tái)所提供的圖形繪制接口,實(shí)現(xiàn)了高性能的圖形繪制。

      如圖5所示,為本發(fā)明另一實(shí)施例提供的一種圖形繪制裝置的結(jié)構(gòu)示意圖,包括:邏輯分層模塊51和繪制模塊52,其中,

      邏輯分層模塊51,用于根據(jù)幀圖像界面元素的相同性,將圖形劃分為多個(gè)待繪制的邏輯層;

      繪制模塊52,用于基于層切換的狀態(tài)機(jī),對(duì)所述多個(gè)待繪制的邏輯層分別進(jìn)行獨(dú)立的資源加載和繪制。

      具體地,在軟件開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)使用到圖形繪制來(lái)處理一些對(duì)性能要求較高的界面動(dòng)畫(huà)操作或者游戲場(chǎng)景的顯示,無(wú)論是動(dòng)畫(huà)或者游戲場(chǎng)景中的圖形都可以被細(xì)化為多個(gè)幀圖像,每個(gè)幀圖像具體由界面元素組成,界面元素包括:圖片、按鈕、文字、動(dòng)畫(huà)和聲音等元素。同一個(gè)圖形的不同幀圖像中,必然有幾個(gè)幀的界面元素是相同的,邏輯分層模塊51可以根據(jù)幀圖像界面元素的相同性,將圖形劃分為多個(gè)待繪制的邏輯層。將圖形劃分為多個(gè)待繪制的邏輯層的目的是為了對(duì)圖形進(jìn)行分層繪制,避免一次加載所有繪制該場(chǎng)景所需要的資源所造成占用內(nèi)存過(guò)多和性能損耗,同時(shí)能夠避免某個(gè)場(chǎng)景因?yàn)樘珡?fù)雜導(dǎo)致代碼邏輯過(guò)于復(fù)雜從而導(dǎo)致后期維護(hù)困難的情況出現(xiàn)。

      具體地,所述狀態(tài)機(jī)的狀態(tài)數(shù)等于邏輯分層模塊51所得到的多個(gè)待繪制的邏輯層的個(gè)數(shù),每個(gè)狀態(tài)分別對(duì)應(yīng)一個(gè)邏輯層。狀態(tài)機(jī)可歸納為4個(gè)要素,即現(xiàn)態(tài)、條件、動(dòng)作和次態(tài),其中,現(xiàn)態(tài)是指當(dāng)前所處的狀態(tài)。條件又稱(chēng)為事件,當(dāng)一個(gè)條件被滿(mǎn)足,將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。動(dòng)作是指條件滿(mǎn)足后執(zhí)行的動(dòng)作,動(dòng)作執(zhí)行完畢后,可以遷移到新的狀態(tài)。次態(tài)是指條件滿(mǎn)足后要遷往的新?tīng)顟B(tài)。次態(tài)是相對(duì)于現(xiàn)態(tài)而言的,次態(tài)一旦被激活,就轉(zhuǎn)變成新的現(xiàn)態(tài)了。繪制模塊52通過(guò)創(chuàng)建一個(gè)狀態(tài)機(jī),來(lái)實(shí)現(xiàn)對(duì)所述多個(gè)待繪制的邏輯層分別進(jìn)行獨(dú)立的資源加載和繪制。其中,前一個(gè)邏輯層的繪制完成為觸發(fā)狀態(tài)遷移的條件,對(duì)當(dāng)前邏輯層進(jìn)行獨(dú)立的資源加載和繪制為具體的動(dòng)作,首先對(duì)層切換狀態(tài)機(jī)的第一個(gè)狀態(tài)所對(duì)應(yīng)的邏輯層進(jìn)行繪制,然后觸發(fā)狀態(tài)機(jī)自動(dòng)遷移到下一個(gè)狀態(tài),對(duì)所述下一個(gè)狀態(tài)所對(duì)應(yīng)的邏輯層進(jìn)行繪制,然后觸發(fā)狀態(tài)遷移……重復(fù)上述過(guò)程,直至最后一個(gè)狀態(tài)所對(duì)應(yīng)的邏輯層的繪制完成。

      本發(fā)明實(shí)施例提供一種圖形繪制裝置,以分層的方式去實(shí)現(xiàn)圖形繪制,將動(dòng)畫(huà)效果或者游戲場(chǎng)景中的界面繪制所需要的資源分開(kāi)加載,避免了因?yàn)樗匈Y源都初次一起加載而引起的性能問(wèn)題,同一時(shí)間只有同一個(gè)層需要的資源被加載到內(nèi)存中,可以更加高效的利用內(nèi)存,能夠避免出現(xiàn)內(nèi)存占用過(guò)多的情況。

      本發(fā)明上述各實(shí)施例所提供的圖形繪制方法及裝置,對(duì)復(fù)雜的動(dòng)畫(huà)或游戲場(chǎng)景來(lái)說(shuō),以分層的方式去實(shí)現(xiàn)圖形繪制,避免了將一堆代碼寫(xiě)一個(gè)一個(gè)界面,減少了代碼的復(fù)雜度和bug率,將動(dòng)畫(huà)效果或者游戲場(chǎng)景中的界面繪制所需要的資源分開(kāi)加載,避免了因?yàn)樗匈Y源都初次一起加載而引起的性能問(wèn)題,同一時(shí)間只有同一個(gè)層需要的資源被加載到內(nèi)存中,可以更加高效的利用內(nèi)存,能夠避免出現(xiàn)內(nèi)存占用過(guò)多的情況。

      最后,本申請(qǐng)的方法僅為較佳的實(shí)施方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1