CCEase動作緩衝的解析

2021-06-13 06:34:51 字數 1334 閱讀 1317

在很多遊戲引擎中,都有各種各樣的動作,以及各色各樣的動作緩衝,以便達到不同的效果。

在cocos2d中,同樣也有這樣一大批動作緩衝類。

先讓我們分析下動作是如何執行的吧。

1、動作的要素

一般的動作至少有2個要素,乙個是時間、乙個是目的地,可能是位置(距離),也可能是其他屬性。

2、如果只考慮線性,不考慮緩衝,那麼基本的計算公式就是:

當前屬性 = 起始屬性 + 逝去時間*(目標屬性 - 起始屬性)/總時間

這個公式變化一下就是:

3、比率

我們可以看出,以上的公式中,只有逝去時間是變化的,我們設

在計算機中,這個逝去時間基本是線性累加的,我們如果想做各種緩衝,只需要改變rate即可。

下面我們來看下cocos2d中的動作類關於變化部分是如何設計的:

動作基類ccactioninterval中,動作會首先呼叫

-(void) step: (cctime) dt

else

elapsed_ += dt;

[self

update

: min(1

, elapsed_/duration_)];

}然後呼叫

-(void) update: (cctime) t。

這裡之前我一直存在著誤解,以為update中的t就像其他的update中的t一樣是 逝去時間,其實大錯特錯,這個只是個比例

這個引數其實應該改下名字,叫做rate更好一點,只能在0到1之間變化。

現在我們來看下ccmoveto的update函式吧

-(void) update: (cctime) t

其中,delta是屬性 位置之差,是不是和我們之前分析的一樣呢。

緩衝函式:

他們的功能很簡單,就是改變rate,讓我們來看下cceasein

-(void) update: (cctime) t

這個函式很簡單,就是將t替換成 t的rate次方,rate是可以設定的,其實就是乙個冪函式,而起變化區間在0與1之間。

我們來複習下中學的知識,看下冪函式的影象吧:

在0到1區間,由於指數rate是大於1的,所以就是下面的那些曲線,變化先慢後快。

而cceaseout呢,

-(void) update: (cctime) t

這個更簡單了,直接求個rate的倒數。

至於其他的緩衝函式,我就不一一枚舉了,要寫自己的緩衝函式,必須先了解數學曲線哦。^_^

linux緩衝區解析

緩衝區是記憶體的一部分空間,用緩衝輸入輸出的資料。緩衝區又分為輸入緩衝區和輸出緩衝區。緩衝區又被稱為快取.主要的意義就是為了提高cpu的效率。輸入端。假如沒有緩衝區,我們要從磁碟中讀取資料,有幾個字元,cpu就要讀寫幾次,cpu是高速率的,而讀取是低速率的,這樣做會降低cpu的效率。相反如果將資料都...

解析與動作聯動得SDN資料平面

在傳統協議處理方式中,各層的協議型別和組合方式固定,使得新增或修改協議很困難 因為需要修改網路裝置的解析模式 基於解析和執行聯動結構的可程式設計資料平面 clipe 的目標是使網路裝置在報文的解析,查表和動作執行上支援使用者自定義 解析器 解析資料報包頭資訊並將包頭組合交給匹配模組,包頭域偏移資訊r...

jsp中的動作元素 動作標籤

jsp中為了簡化 減少 量產生了jsp動作元素這一概念。jsp動作元素只有一種語法,其格式類似標籤,具體為 所以jsp動作元素也叫jsp標籤 注意 冒號 和action name之間沒有空格 下面討論四個常見的jsp動作元素 1.該標籤將url指定的頁面匯入當前頁面,url表示相對路徑 flush ...