(NO.00002)iOS遊戲精靈戰爭雛形(七)

來源:互聯網
上載者:User

(NO.00002)iOS遊戲精靈戰爭雛形(七)

接上一篇博文,我們繼續完成射擊的功能.

還是在MainScene.m中,添加initBullets方法:

-(void)initBullets{    CCSprite *bullet;    for (int i = 0; i < MAX_BULLET_COUNT; i++) {        bullet = (CCSprite*)[CCBReader load:@Sprites/Bullet];        bullet.positionType = CCPositionTypeNormalized;        bullet.visible = NO;        [_bullets addObject:bullet];        [_physics addChild:bullet];    }}

該方法用來預先緩衝子彈,其中MAX_BULLET_COUNT值為10,即表示我們預先建立10顆子彈,這10顆子彈是可以重複使用的,造成子彈無窮的假象.下面看一下如何”製造”一顆子彈:

首先載入Bullet.ccb檔案到bullet變數中,不要問為什麼代碼中沒有.ccb尾碼,前面SpriteBuilder普及知識裡已經說過了,大家可以搜一下.然後修改子彈位置類型,這時子彈是看不見的,因為我們還沒有發射出去.將子彈分別添加到子彈數組和物理對象中.

這裡要注意的是,不能直接把子彈添加到MainScene情境中,因為子彈是物理對象,他只能添加到物理世界中.

修改didLoadFromCCB方法,在最後添加如下代碼:

    [self initBullets];

子彈的初始化工作都完成了,但是這時子彈還是不能用,還需要一個子彈”上膛”操作,子彈上膛之後才可以真正發射,遂添加一個loadBullet方法:

-(CCSprite*)loadBullet{    static NSInteger last = 0;    for (CCSprite* bullet in _bullets) {        if (!bullet.visible) {            bullet.visible = YES;            return bullet;        }    }    //如果所有子彈都可見,則取可見時間最長的那一顆    CCSprite *bullet = _bullets[last];    last = (last + 1)%MAX_BULLET_COUNT;    return bullet;}

前面說過了,預設彈夾裡的子彈都是不可見的,一旦發射出去子彈就變得可見了.這裡尋找第一個不可見的子彈,然後上膛,將其變得可見,準備擊發.如果此時所有子彈都可見怎麼辦?這意味著所有彈夾內的子彈都被打出去了.我們必須回收利用已經打出去的子彈,我們選擇最早打出去的的那一顆子彈,注意方法中last變數是靜態.

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.