免责声明:本系列教程是根据该系列教程实践过程所作的自己使用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; }
添加怪物:
我们需要添加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:
接下来, 为CCCallFuncN action增加一个回调函数。你可以在addMonster前面增加下面的代码:
-(void)spriteMoveFinished:(id)sender{ CCSprite *sprite = (CCSprite *)sender; [self removeChild:sprite cleanup:YES]; }
在我们继续之前,还有最后一件事没做。我们需要调用这个方法来创建我们的目标怪物。而且,为了使事情变得更加有趣,我们会随着时间连续不断地发射一些怪物出来。我们可以使用cocos2d的定时scheduler,并指定一个回调函数来完成此功能。一秒钟调用一次回调函数就可以了。因此,在init函数中添加player后,我们再加入下面的代码:
//定时添加怪物 [self schedule:@selector(gameLogic:) interval:1.0];
然后简单的实现一下这个回调函数(在init函数上方)
-(void)gameLogic:(ccTime)dt { [self addMonster]; }
到此刻我们已经添加完炮台和怪物了。下一篇,我们将添加子弹来消灭怪物。
到此为止,本篇教程就结束了。
该篇主要是介绍了添加炮台和可移动的怪物。敬请期待下一篇文章!