你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> (NO.00004)iOS實現打磚塊游戲(七):關卡類的實現

(NO.00004)iOS實現打磚塊游戲(七):關卡類的實現

編輯:IOS開發綜合

 


關卡游戲的精髓都集中在游戲的關卡裡,其中包含了游戲的所有要素,至於關卡如何管理這些要素這得根據不同游戲想要的效果來決定.我們開始先從在關卡中建立磚塊,小球和反彈棒3個元素做起.

創建關卡類

在Xcode中創建Level類,繼承於CCNode類.修改頭文件為如下內容:

#import CCNode.h

@interface Level : CCNode

-(void)removeFromBricks:(id)brick;

-(CGPoint)ballPosition;

@end

Level要維護一個單獨的列表,用來保存其中的磚塊實例,當在Level外部刪除磚塊時我們需要用removeFromBricks方法來保證brick被正確刪除.後一個方法看名知其意,就是取得小球的位置,這個在後面會用到.

實現關卡的初始化方法

打開Level.m文件,添加一個初始化方法:

-(void)didLoadFromCCB{
    _bricks = [NSMutableArray array];

    Brick *brick = [Brick brickWithColor:brkColorBlack];
    _brickHeight = brick.contentSize.height;
    _brickWidth = brick.contentSize.width;

    _viewSize = [CCDirector sharedDirector].viewSize;

    [self initBricks];
    [self initStick];
}

我們首先創建了保存磚塊的_bricks數組,取得在關卡中後面會頻繁用到的一些變量,然後就是初始化磚塊和反彈棒的方法.你可能會奇怪怎麼少了初始化小球的方法?這裡要說明一下,因為在初始化小球的方法中要調整小球的力矩,所以放在這裡太早,這時小球的物理對象還未准備好,我們把它放到onEnter方法中去:

-(void)onEnter{
    [super onEnter];
    [self initBall];
}

磚塊的初始化

我們先看磚塊的初始化:

-(void)initBricks{
    Brick *brick = [Brick brickWithColor:brkColorBlack];
    for (int row = 0; row < 8; row++) {
        [self updateCurrentBrickColor:1];
        for (int col = 0; col < 4; col++) {
            brick = [Brick brickWithColor:_currentBrickColor];
            brick.position = ccp(col * (_brickWidth - BRICK_SHADOW_OFFSET_X),
                                 MAX_BRICK_HIGHT - row * (_brickHeight - BRICK_SHADOW_OFFSET_Y));
            [_physicsWorld addChild:brick];
            [_bricks addObject:brick];
        }
    }
}

以上代碼從屏幕頂部開始依次繪制8行,每行4塊磚塊,同時將每塊磚塊添加到物理世界和_bricks數組中.

反彈棒的初始化

-(void)initStick{
    _stick = [Stick stickNormal];
    _stick.position = ccp(_viewSize.width/2, STICK_Y);
    [_physicsWorld addChild:_stick];
}

代碼很簡單,建立一個反彈棒然後添加到物理世界中.

小球的初始化

最後是小球的初始化工作:

//在Level中初始化小球並給其一個隨機的沖力.(不希望小球直接垂直落在反彈棒上)
-(void)initBall{
    _ball = (CCSprite*)[CCBReader load:@Elements/Ball];
    NSAssert(_ball, @ball must not nil);
    _ball.name = @ball;
    _ball.position = ccp(_viewSize.width/2, BALL_Y);
    [_physicsWorld addChild:_ball];

    CCPhysicsBody *physBall = _ball.physicsBody;
    CGPoint velocity = physBall.velocity;

    NSInteger neg = arc4random_uniform(2);
    if (neg == 0) {
        neg = -1;
    }
    NSInteger rndX = arc4random_uniform(100)+100;

    velocity.x = neg * rndX;

    [physBall applyAngularImpulse:10];
    [physBall applyImpulse:velocity];
}

在以上方法中建立了一個小球,我們不希望其垂直掉落下來,所以隨機給其賦予一個沖力,讓其略活潑點的掉落下來 ;)

現在編譯和運行游戲,現在的游戲剛進入的效果如下所示:

這裡寫圖片描述

一個基本的關卡框架就基本搭好了,下篇我們來實現游戲中的碰撞處理.see you ;)

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