大熊貓豬·侯佩原創或翻譯作品.歡迎轉載,轉載請注明出處.
如果覺得寫的不好請多提意見,如果覺得不錯請多多支持點贊.謝謝! hopy ;)
下面我們來看游戲主角類裡面幾個播放特殊動畫的方法,首先從runWinAnimation開始:
//運行精靈慶祝時的動畫
-(void)runWinAnimation{
CCActionJumpBy *jump = [CCActionJumpBy actionWithDuration:5
position:ccp(0, 5) height:5 jumps:10];
[self runAction:[CCActionRepeatForever actionWithAction:jump]];
[self runAnimation:_happyAnimation];
}
該動畫在主角在游戲場景中找到並進入出口時播放,可以看到代碼很簡單,就是讓主角跳躍同時運行_happyAnimation表示慶祝的動畫.該動畫在主角的初始化方法中預先創建過了.
當主角掛掉時,尤其是被火焰精靈碰到或者被炸彈炸到時,我們就播放fired動畫:
//運行自燃動畫
-(void)fired{
if (_isDead) {
return;
}
_isDead = YES;
[self stopAllActions];
CCActionAnimate *animate = [CCActionAnimate actionWithAnimation:_firedAnimation];
CCActionDelay *delay = [CCActionDelay actionWithDuration:0.3];
CCActionCallBlock *block = [CCActionCallBlock actionWithBlock:^{
self.visible = NO;
}];
CCActionSequence *seq = [CCActionSequence actions:animate,delay,block,nil];
[self runAction:seq];
}
如果主角已經掛了則直接返回,否則設置主角死亡狀態,停止所有動作,按游戲邏輯調整動畫運行的間隔和串行序列動作,最後運行該序列動作.
在主角類的接口文件中我們提到2個方法:
-(BOOL)isInvincible;
-(void)setIsInvincible:(BOOL)isInvincible;
大家可能回想把它們做成一個屬性更好一點吧?但實際我們需要在寫者方法中做附加操作,所以必須自己實現寫者方法:
-(BOOL)isInvincible{
return _isInvincible;
}
//因為要做額外的操作,所以沒有用自動生成的屬性
-(void)setIsInvincible:(BOOL)isInvincible{
_isInvincible = isInvincible;
[self setIsRiding:isInvincible];
}
大家可以看到我在寫者方法中除了調整主角的_isInvincible變量,還調用了另外一個setIsRiding方法:
-(void)setIsRiding:(BOOL)isRiding{
_isRiding = isRiding;
CCSpriteFrame *spriteFrame;
//如果當前是騎行狀態則按前進方向將精靈幀設置為對應圖片
//ERROR:因為狀態變為騎行狀態時,精靈必定在移動過程中(移動中才能接觸到無敵道具),所以只要判斷當前的動畫即可
//加入拖拽道具,這裡也要和下面一樣判斷2種情況
if (isRiding) {
if (_curAnimation == _facingForwardAnimation || _curDirection == RoleDirectionDown) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideForward_2.png"];
}else if (_curAnimation == _facingBackAnimation || _curDirection == RoleDirectionUp) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideBack_2.png"];
}else if (_curAnimation == _facingLeftAnimation || _curDirection == RoleDirectionLeft) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideLeft_2.png"];
}else if (_curAnimation == _facingRightAnimation || _curDirection == RoleDirectionRight) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideRight_2.png"];
}
}else{
//否則精靈處於非騎行狀態,按前進方向恢復其精靈幀圖片
//不像上面一種情況,精靈恢復正常狀態(非騎行狀態)時需要判斷兩種情況:
//1.精靈在移動中恢復狀態 2.精靈處於靜止狀態時恢復狀態
//要分別判斷這兩種情況,做出處理.
if (_curAnimation == _facingForwardRideAnimation || _curDirection == RoleDirectionDown) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_forward_2.png"];
}else if (_curAnimation == _facingBackRideAnimation || _curDirection == RoleDirectionUp) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_back_2.png"];
}else if (_curAnimation == _facingLeftRideAnimation || _curDirection == RoleDirectionLeft) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_left_2.png"];
}else if (_curAnimation == _facingRightRideAnimation || _curDirection == RoleDirectionRight) {
spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_right_2.png"];
}else{
}
}
//停止當前的動畫
[self stopAction:_curAnimate];
//設置合適的精靈幀
self.spriteFrame = spriteFrame;
}
上面注釋說的足夠清楚了,該方法的作用在於當主角處於無敵狀態時,改變其移動的動畫,讓它騎在一頭坐騎上,有點小霸氣的趕腳啊 ;)
以下是當主角無敵時的效果示意圖:
游戲主角到這裡基本介紹完了,後面我們來看看游戲中的各種怪物吧 see you ;)