如何使用kobold2d来做一个简单的iphone游戏教程(第三部分)

免责声明:本系列教程是根据该系列教程实践过程所作的自己使用kobold2D框架经历。仅供学习与交流使用,请勿进行商业传播,转载时不要移除本声明。如果产生任何纠纷均与博客所有者无关。欢迎转载。

作者:Rush.xzj

本篇文章只是添加炮台和移动的怪物(包括强和弱的怪物),需要的相关图片

炮台,强怪物,弱怪物



添加炮台:

只需对HelloWorlLayer.m中init函数修改成如下

-(id) init {
	if ((self = [super init])) {
        //设置背景颜色为白色
        glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        
        //获取屏幕的大小
        CGSize winSize = [[CCDirector sharedDirector] winSize];
        
        //添加炮台,炮台png文件名称;player2.png
        CCSprite *player = [CCSprite spriteWithFile:@"player2.png"];
        CGSize playerContentSize = player.contentSize;
        player.position = ccp(playerContentSize.width / 2 + 100, winSize.height / 2);
        [self addChild:player];

	}
	return self;
}

运行可以在模拟器中看到以下的效果:

如何使用kobold2d来做一个简单的iphone游戏教程(第三部分)_第1张图片


添加怪物:

我们需要添加2种怪物,第一种强但是移动慢的怪物,第二种移动快但是弱的怪物,并且怪物是从屏幕的右边向左边以一定的速度移动

首先添加怪物的类

添加一个Objective-C类,名称为Monster,这个时候会产生2个文件:Monster.h和Monster.m

打开Monster.h文件修改代码:

#import <Foundation/Foundation.h>
#import "cocos2d.h"


@interface Monster : CCSprite {
@private
    int curHp;                  //当前怪物的血量,当血量小于等于0的时候表示死亡
    int minMoveDuration;        //该类型怪物从屏幕移出的最小时间
    int maxMoveDuration;        //该类型怪物从屏幕移出的最大时间
    NSString *name;             //怪物的名称
}
@property (nonatomic, assign) int curHp;
@property (nonatomic, assign) int minMoveDuration;
@property (nonatomic, assign) int maxMoveDuration;
@property (nonatomic, copy) NSString *name;

@end

@interface WeakAndFastMonster : Monster {
@private
}
+(id)monster;
@end

@interface StrongAndSlowMonster : Monster {
@private
    
}
+(id)monster;
@end
打开Monster.m文件:

-(void)addMonster {
    Monster *monster = nil;
    //随即产生一个强或者弱的怪物
    if(arc4random() % 2 == 0) {
        monster = [WeakAndFastMonster monster];
    } else {
        monster = [StrongAndSlowMonster monster];
    }
    
    //获取屏幕的大小
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    
    //怪物的尺寸
    CGSize monsterSize = monster.contentSize;
    
    
    //设置怪物出现的起始地点
    int startPointX = winSize.width + monsterSize.width / 2;
    int minStartPointY = monsterSize.height / 2;
    int maxStartPointY = winSize.height - monsterSize.height / 2;
    int offSetY = arc4random() % (maxStartPointY - minStartPointY);
    int startPointY = minStartPointY + offSetY;
    monster.position = ccp(startPointX, startPointY);
    
    //添加到屏幕
    [self addChild:monster];
    
    
    //设置怪物的持续周期
    int rangeDuration = monster.maxMoveDuration - monster.minMoveDuration;
    int actualDuration = arc4random() % rangeDuration + monster.minMoveDuration;
    
    //设置怪物结束地点
    int endPointX = -monsterSize.width / 2;
    int endPointY = startPointY;
    
    //设置怪物的动作
    
    //移动到目的地
    CCMoveTo *moveTo = [CCMoveTo actionWithDuration:actualDuration position:ccp(endPointX, endPointY)];
    //移动完成后的回调函数
    CCCallFuncN *callFuncN = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
    //把所有的动作放入到系列中
    CCSequence *sequence = [CCSequence actions:moveTo, callFuncN, nil];
    [monster runAction:sequence];
}



这里增加的新的元素就是actions。kobold2d(cocos2d)里面提供了许多非常方便的内置的action,你可以使用这样action来让你的精灵动起来。比如move action,jump action,fade action,animation action(就是播放图片序列)等等。这里,我们对目标对象使用了3种类型的action:

  • CCMoveTo: 我们使用CCMoveTo action让目标从屏幕右边一直往左移动,直到移出屏幕。注意,这里我们可以指定这个过程要花费多长时间。这里使用了变化的时间间隔2-4秒。
  • CCCallFuncN: 它可以让你为某个执行此action的对象指定一个回调函数。我们指定的回调函数是:spriteMoveFinished---目前并没有,到后面会具体给了来。
  • CCSequence: 它允许我们把一系列的action组成一个action序列,并且这些acton可以按顺序执行。一次执行完所有的action。在上面的例子中,我们让对象首先执行CcMoveTo,等CCMoveTo完成后,马上就会执行CCCallFuncN action。

接下来, 为CCCallFuncN action增加一个回调函数。你可以在addMonster前面增加下面的代码:

-(void)spriteMoveFinished:(id)sender{
    CCSprite *sprite = (CCSprite *)sender;
    [self removeChild:sprite cleanup:YES];
}

这个函数的目的是当怪物飞出屏幕之后,需要移除出当前的scene。这个非常重要,这样的话我们就不会因为屏幕外面积累太多没有用到的精灵而造成内存泄漏。

在我们继续之前,还有最后一件事没做。我们需要调用这个方法来创建我们的目标怪物。而且,为了使事情变得更加有趣,我们会随着时间连续不断地发射一些怪物出来。我们可以使用cocos2d的定时scheduler,并指定一个回调函数来完成此功能。一秒钟调用一次回调函数就可以了。因此,在init函数中添加player后,我们再加入下面的代码:

        //定时添加怪物
        [self schedule:@selector(gameLogic:) interval:1.0];

然后简单的实现一下这个回调函数(在init函数上方)

-(void)gameLogic:(ccTime)dt {
    [self addMonster];
}

这个时候运行就可以看见好多的怪物从右边向左边移动了

如何使用kobold2d来做一个简单的iphone游戏教程(第三部分)_第2张图片

到此刻我们已经添加完炮台和怪物了。下一篇,我们将添加子弹来消灭怪物。

到此为止,本篇教程就结束了。

该篇主要是介绍了添加炮台和可移动的怪物。敬请期待下一篇文章!

你可能感兴趣的:(游戏,iPhone,Random,animation,action,interface)