本發(fā)明涉及智能手機(jī)或智能TV端動畫領(lǐng)域,特別是涉及一種動畫繪制方法。
背景技術(shù):
現(xiàn)有技術(shù)中,對于智能設(shè)備中動畫的實(shí)現(xiàn)方式,主要通過將各種類型的動畫計算好,然后通過回調(diào)的方法,一一繪制出來。對于各種動畫都在同一個線程中計算,且技術(shù)完成后,加入到隊(duì)列中進(jìn)行繪制,只有當(dāng)?shù)谝粋€動畫繪制完成后,才能繪制接下來的動畫。這樣就會導(dǎo)致在動畫過多時,每一次繪制耗費(fèi)的時間都會成倍的增加,因此會導(dǎo)致終端設(shè)備顯示時動畫卡頓,非常的不流暢,影響用戶體驗(yàn)。
現(xiàn)有的一些技術(shù)中,預(yù)處理的線程如果在上次繪制后,到最近一次繪制之間,如果預(yù)處理的內(nèi)容(比如:動畫參數(shù))還沒有計算完成,那么本次繪制就取不到最新的數(shù)據(jù)來繪制,因此這一幀繪制的內(nèi)容依然還是上一幀的內(nèi)容,同樣會導(dǎo)致終端設(shè)備顯示時動畫卡頓,畫面不流暢。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)的問題,本發(fā)明提供一種降低動畫參數(shù)計算對動畫繪制時的時間占用、提高動畫參數(shù)計算效率、保證動畫連續(xù)性的動畫繪制方法。
為實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種動畫繪制方法,包括:
動畫參數(shù)計算和動畫繪制分別在動畫準(zhǔn)備線程和動畫繪制線程中執(zhí)行;
根據(jù)動畫參數(shù)的主次程度,對動畫參數(shù)進(jìn)行分級;
按照動畫參數(shù)的級別從高到低依次進(jìn)行計算;
動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)。
進(jìn)一步地,動畫準(zhǔn)備線程和動畫繪制線程屬于同一進(jìn)程內(nèi)的不同線程。
進(jìn)一步地,動畫準(zhǔn)備線程和動畫繪制線程屬于同一幀內(nèi)的不同線程。
進(jìn)一步地,動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)的步驟中,當(dāng)動畫準(zhǔn)備線程完成全部級別的動畫參數(shù)計算時,繪制線程獲取到所有的動畫參數(shù)。
進(jìn)一步地,動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)的步驟中,當(dāng)動畫準(zhǔn)備線程完成部分級別的動畫參數(shù)計算時,繪制線程獲取部分完成計算的動畫參數(shù)。
進(jìn)一步地,當(dāng)動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)之后,調(diào)用圖形渲染系統(tǒng)進(jìn)行當(dāng)前幀的動畫繪制。
進(jìn)一步地,在當(dāng)前幀動畫繪制的同時,動畫準(zhǔn)備線程繼續(xù)執(zhí)行動畫參數(shù)計算,若當(dāng)前幀還有動畫參數(shù)未計算完,則繼續(xù)計算;若已經(jīng)計算完成,則計算下一幀的動畫參數(shù),等待下一次繪制線程的主動調(diào)用。
進(jìn)一步地,所述動畫參數(shù)包括動畫元素、相關(guān)動畫初始參數(shù)、目標(biāo)參數(shù)中的一種或數(shù)種。
進(jìn)一步地,計算完成的動畫參數(shù)被放入數(shù)據(jù)存儲單元中,動畫繪制線程從數(shù)據(jù)存儲單元中主動獲取當(dāng)前計算完成的動畫參數(shù)。
進(jìn)一步地,所述動畫參數(shù)的主次程度是:當(dāng)動畫呈現(xiàn)出來時,用戶感知度高的,為主要的動畫參數(shù);用戶感知度相對低的,為次要的動畫參數(shù)。
有益效果:
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
(1)本發(fā)明中的動畫參數(shù)計算和動畫繪制是在兩個不同的線程中執(zhí)行的,因此動畫參數(shù)計算不會占用動畫繪制線程的時間,降低繪制動畫時由于計算導(dǎo)致的整個一幀的執(zhí)行時間變長。
(2)本發(fā)明中采用動畫主要參數(shù)與次要參數(shù)分別計算的方式,在動畫參數(shù)計算線程(預(yù)處理線程)中將動畫參數(shù)按照重要程度進(jìn)行分級,主要參數(shù)有限計算,次要參數(shù)后計算。
(3)本發(fā)明中的動畫繪制線程主動去獲取動畫參數(shù),因此只要動畫參數(shù)有更新,顯示時每一幀就都會有更新,而不會還是上一次的界面顯示,導(dǎo)致掉幀的情況。因此,大大的減少了掉幀的概率,提高了畫面流暢性。
附圖說明
圖1為本發(fā)明的動畫參數(shù)計算和繪制的基本框架圖;
圖2為本發(fā)明的動畫繪制方法的流程圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的和技術(shù)方案更加清楚,下面將結(jié)合本發(fā)明實(shí)施例的附圖,對本發(fā)明實(shí)施例的技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;谒枋龅谋景l(fā)明的實(shí)施例,本領(lǐng)域普通技術(shù)人員在無需創(chuàng)造性勞動的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學(xué)術(shù)語)具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣定義,不會用理想化或過于正式的含義來解釋。下面結(jié)合實(shí)施例和說明書附圖對本發(fā)明作進(jìn)一步的說明。
本發(fā)明所述的“線程”指的是程序執(zhí)行流的最小單元。一個標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC),是一個獨(dú)立的,可調(diào)度的執(zhí)行單元,多個線程可同時進(jìn)行,此時叫做多線程。
本發(fā)明所述的“動畫幀”指的是影像動畫中最小單位的單幅影像畫面。一幀就是一副靜止的畫面,連續(xù)的幀就形成動畫。
本發(fā)明所述的“掉幀”指的掉幀一般指由于硬件不足以負(fù)荷顯示器畫面動態(tài)顯示刷新的頻率,從而幀率過低所造成的畫面出現(xiàn)停滯(或短時間或長時間)現(xiàn)象。掉幀在游戲中就是玩游戲過程中,出現(xiàn)卡這種情況,圖像未及時刷新造成,畫面粘滯。
如圖1所示,動畫參數(shù)計算和繪制的基本框架圖中,動畫參數(shù)計算和動畫繪制是在兩個不同的線程中執(zhí)行的,因此動畫參數(shù)計算不會占用動畫繪制線程的時間,降低繪制動畫時由于計算導(dǎo)致的整個一幀的執(zhí)行時間變長。各個動畫(每幀動畫)的動畫參數(shù)都進(jìn)行了分級,分為1級動畫參數(shù)、2級動畫參數(shù)…..,n級動畫參數(shù)。
如圖2所示,本發(fā)明的動畫繪制方法,包括:動畫參數(shù)計算和動畫繪制分別在動畫準(zhǔn)備線程和動畫繪制線程中執(zhí)行;根據(jù)動畫參數(shù)的主次程度,對動畫參數(shù)進(jìn)行分級;按照動畫參數(shù)的級別從高到低依次進(jìn)行計算;動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)。
上述的動畫準(zhǔn)備線程和動畫繪制線程屬于同一進(jìn)程內(nèi)的不同線程。作為優(yōu)選的方式,動畫準(zhǔn)備線程和動畫繪制線程屬于同一幀內(nèi)的不同線程。
動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)的步驟中,當(dāng)動畫準(zhǔn)備線程完成全部級別的動畫參數(shù)計算時,繪制線程獲取到所有的動畫參數(shù)。
動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)的步驟中,當(dāng)動畫準(zhǔn)備線程完成部分級別的動畫參數(shù)計算時,繪制線程獲取部分完成計算的動畫參數(shù)。
當(dāng)動畫繪制線程主動獲取動畫準(zhǔn)備線程中計算完成的動畫參數(shù)之后,調(diào)用圖形渲染系統(tǒng)進(jìn)行當(dāng)前幀的動畫繪制。
在當(dāng)前幀動畫繪制的同時,動畫準(zhǔn)備線程繼續(xù)執(zhí)行動畫參數(shù)計算,若當(dāng)前幀還有動畫參數(shù)未計算完,則繼續(xù)計算;若已經(jīng)計算完成,則計算下一幀的動畫參數(shù),等待下一次繪制線程的主動調(diào)用。
所述動畫參數(shù)包括動畫元素、相關(guān)動畫初始參數(shù)、目標(biāo)參數(shù)中的一種或數(shù)種。
計算完成的動畫參數(shù)被放入數(shù)據(jù)存儲單元中,動畫繪制線程從數(shù)據(jù)存儲單元中主動獲取當(dāng)前計算完成的動畫參數(shù)。
所述動畫參數(shù)的主次程度是:當(dāng)動畫呈現(xiàn)出來時,用戶感知度高的,為主要的動畫參數(shù);用戶感知度相對低的,為次要的動畫參數(shù)。
如圖2所示的本發(fā)明提供了一種動畫繪制方法,包括如下步驟:
1)啟動時,首先在動畫準(zhǔn)備線程中確定需要繪制的動畫元素、相關(guān)動畫初始參數(shù)和目標(biāo)參數(shù);
2)根據(jù)動畫參數(shù)的主次程度,對動畫參數(shù)依次進(jìn)行分級;
3)啟動繪制線程來計算動畫參數(shù),按照動畫參數(shù)的級別從高到低分別進(jìn)行計算,將計算完成的動畫參數(shù)放入數(shù)據(jù)存儲單元中;
4)開啟繪制線程調(diào)度,繪制線程主動向數(shù)據(jù)存儲單元獲取當(dāng)前計算完成的動畫參數(shù);
6)調(diào)用圖形渲染系統(tǒng)進(jìn)行當(dāng)前幀的動畫繪制;在當(dāng)前幀渲染的同時,動畫準(zhǔn)備線程繼續(xù)執(zhí)行動畫參數(shù)計算,若當(dāng)前幀還有動畫參數(shù)未計算完,則繼續(xù)計算;若已經(jīng)計算完成,則計算下一幀的動畫參數(shù),等待下一次繪制線程的主動調(diào)用。
作為優(yōu)選的方式,所述步驟3)中,當(dāng)動畫準(zhǔn)備線程全部計算完成時,繪制線程獲取到所有的動畫參數(shù);當(dāng)動畫準(zhǔn)備線程部分完成時,繪制線程獲取部分完成的動畫參數(shù)。
作為優(yōu)選方式,步驟2)中的分級是分為主要級別和次要級別?;蛘?,步驟2)中的分級是按照級別從高到低依次分為1級至n級。
上述步驟6)中繪制動畫時采用統(tǒng)一繪制,當(dāng)多個動畫中有相同的元素變化,則僅繪制一次。
上述的動畫繪制采用統(tǒng)一繪制的方式,若多個動畫參數(shù)中有相同的元素變化,則僅繪制一次。所述多個動畫參數(shù)屬于同一幀內(nèi)的不同級別的動畫參數(shù),動畫繪制的線程僅獲取較高級別的動畫參數(shù)。
上述的數(shù)據(jù)存儲單元可以選用數(shù)據(jù)結(jié)構(gòu)來執(zhí)行,作用是保存計算好的動畫參數(shù),然后當(dāng)同一繪制時主動獲取動畫參數(shù)的一個溝通橋梁。動畫準(zhǔn)備線程將動畫參數(shù)計算好后保存在了數(shù)據(jù)結(jié)構(gòu)中,這個數(shù)據(jù)結(jié)構(gòu)可以被動畫繪制線程直接獲取。繪制線程與動畫準(zhǔn)備線程都在一個進(jìn)程之中,因此,“動畫準(zhǔn)備線程”計算好參數(shù)后,需要將其保存起來,保存的載體是一個數(shù)據(jù)結(jié)構(gòu)。繪制線程獲取計算好的動畫參數(shù)是直接在數(shù)據(jù)結(jié)構(gòu)中拿到的。
本發(fā)明的主次界定標(biāo)準(zhǔn):以該動畫呈現(xiàn)出來時,用戶能夠感知的程度來決定的。感知度高的,為主要的動畫參數(shù),感知度相對低的,為次級動畫參數(shù)。
比如在動畫1、動畫2和動畫3中按照主次程度進(jìn)行參數(shù)等級劃分:
動畫1中關(guān)于移動的動畫,每少一幀對于用戶的來說,感知都會很明顯,因此其移動的動畫參數(shù)為主要的動畫參數(shù),優(yōu)先計算。以此類推,動畫2中,動畫3中的移動動畫也應(yīng)該作為主要的動畫參數(shù)。
動畫1中,透明度的變化對用戶感知相對較小,可將其定義為次要動畫參數(shù)。動畫2和動畫3中的透明度變化也可以做為次要動畫參數(shù)。
上述實(shí)施例僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出:對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和等同替換,這些對本發(fā)明權(quán)利要求進(jìn)行改進(jìn)和等同替換后的技術(shù)方案,均落入本發(fā)明的保護(hù)范圍。