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

來源:互聯網
上載者:User

標籤:

大熊貓豬·侯佩原創或翻譯作品.歡迎轉載,轉載請註明出處.
如果覺得寫的不好請告訴我,如果覺得不錯請多多支援點贊.謝謝! hopy ;)

關卡遊戲的精髓都集中在遊戲的關卡裡,其中包含了遊戲的所有要素,至於關卡如何管理這些要素這得根據不同遊戲想要的效果來決定.我們開始先從在關卡中建立磚塊,小球和反彈棒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 ;)

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.