你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> (NO.00004)iOS實現打磚塊游戲(十四):3球道具的實現

(NO.00004)iOS實現打磚塊游戲(十四):3球道具的實現

編輯:IOS開發綜合

 

 反彈棒變化道具實現前面已經介紹過了,我們下面可以在小球上做些文章,實現一個道具可以變出更多的小球出來.

我們稱之為3球道具:當反彈棒碰到該道具時,小球變為3枚,接下來你盡可能保持這些小球不掉落,這樣你可以得到比1個球時更多地分數.

打開Xcode,在Star.m中的spawnStar方法條件中加入新的分支:

case brkColorPurple:
            star = [Star starWithType:starTypeThreeBalls];
            break;

因為在Star.m的方法中需要知道當前場景中小球的狀態,所以先在GameScene.h接口中添加2個新的方法:

-(void)addBall:(CCSprite*)ball;
-(NSInteger)currentBallsCount;

回到GameScene.m中,擴展代碼增加一個新的實例變量,用來表示當前所有小球:

NSMutableArray *_balls;

接著我們實現上面新加的2個方法:

//在GameScene中添加小球,小球的位置必須已經被正確設置
-(void)addBall:(CCSprite*)ball{
    @synchronized(self){
        [_physicsWorld addChild:ball];
        [_balls addObject:ball];
    }
}

-(NSInteger)currentBallsCount{
    @synchronized(self){
        return _balls.count;
    }
}

注意方法中都設置了同步,因為讀取時可能發生修改,如果不加同步,app可能會發生crash!

再回到Star.m中,我們添加關鍵的道具功能方法doThreeBalls:

+(void)doThreeBalls:(CGPoint)ballLocation{
    GameScene *gameScene = [GameScene sharedGameScene];

    if ([gameScene currentBallsCount] != 1) {
        return;
    }

    CCSprite *ball2 = (CCSprite*)[CCBReader load:@Elements/Ball];
    ball2.position = ballLocation;
    [gameScene addBall:ball2];

    CCSprite *ball3 = (CCSprite*)[CCBReader load:@Elements/Ball];
    ball3.position = ballLocation;
    [gameScene addBall:ball3];
}

代碼首先檢查當前場景中有多少個小球,如果多余1個則直接返回,就是說該道具只能在只有1枚小球時發揮作用.

接著創建另外2個小球,通過之前定義的addBall方法,把它們添加到場景中去.

最後在GameScene.m的碰撞處理中增加新選擇分支:

case starTypeThreeBalls:
            @synchronized(self){
                if ([self currentBallsCount] >= 1) {
                    [self scheduleBlock:^(CCTimer *timer){
                        [Star doThreeBalls:((CCSprite*)_balls[0]).position];
                    } delay:0];
                }
            }
            break;

現在編譯連接app,運行效果如下:

這裡寫圖片描述

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved