来自 澳门金莎娱乐手机版 2019-11-28 05:45 的文章
当前位置: 金沙澳门官网网址 > 澳门金莎娱乐手机版 > 正文

iOS游戏Smart战役雏形

(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变量是静态的.

 

) 接上一篇博文,我们继续完成射击的功能. 还是在MainScene.m中,添加initBullets方法: -(void)initBullets{ CCSprite *bull...

(NO.00002)iOS游戏精灵战争雏形(六)

接下来我们给MainScene场景再添加一个精灵,作为敌人.

双击SpriteBuilder中的MainScene.ccb,从控件库拖入一个CCSprite到CCPhysicsNode中,设置精灵帧为一个不同的大头贴;设置自定义类为Player,代码连结名称为_sprite2;打开对应的物理对象,设置内容和_sprite1类似:

澳门金莎娱乐手机版 1

有了敌人就可以完成射击功能了.< 喎?" target="_blank" class="keylink">vcD4NCjxwPs7Sw8e7udKq1NpTcHJpdGVCdWlsZGVy1tDM7bzT0ru49kJ1bGxldC5jY2LOxLz+LMDg0M3OqkNDU3ByaXRlLtDo0qrX9rXE1vfSqrmk1/e+zcrHtPK/qs7vwO221M/zLLX31fvF9tey0M7XtDo8L3A+DQo8cD48aW1nIGFsdD0="这里写图片描述" src="" title="" />

因为子弹本身不打算做什么事,所以不需要自定义类了.

回到Xcode,我们需要先设置好一些与子弹相关的ivar.打开MainScene.m,添加以下实例变量:

    CGSize _viewSize;
    CCNode *_sprite2;

    NSMutableArray *_bullets;

在Main场景的初始化方法中,我们要初始化”弹仓”_bullets数组:

-(instancetype)init{
    self = [super init];
    if (self) {
        _bullets = [NSMutableArray array];
    }
    return self;
}

 

) 接下来我们给MainScene场景再添加一个精灵,作为敌人. 双击SpriteBuilder中的MainScene.ccb,从控件库拖入一个CCSpr...

本文由金沙澳门官网网址发布于澳门金莎娱乐手机版,转载请注明出处:iOS游戏Smart战役雏形

关键词: