在很多遊戲引擎中,都有各種各樣的動作,以及各色各樣的動作緩衝,以便達到不同的效果。
在cocos2d中,同樣也有這樣一大批動作緩衝類。
先讓我們分析下動作是如何執行的吧。
1、動作的要素
一般的動作至少有2個要素,乙個是時間、乙個是目的地,可能是位置(距離),也可能是其他屬性。
2、如果只考慮線性,不考慮緩衝,那麼基本的計算公式就是:
當前屬性 = 起始屬性 + 逝去時間*(目標屬性 - 起始屬性)/總時間
這個公式變化一下就是:
3、比率
我們可以看出,以上的公式中,只有逝去時間是變化的,我們設
在計算機中,這個逝去時間基本是線性累加的,我們如果想做各種緩衝,只需要改變rate即可。
下面我們來看下cocos2d中的動作類關於變化部分是如何設計的:
動作基類ccactioninterval中,動作會首先呼叫
-(void) step: (cctime) dtelse
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 ...