如何使用Cocos2D-x制作iphone/Android简单游戏
这篇文章主要为大家详细介绍了如何使用Cocos2D-x制作iphone/Android简单游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
为了有趣,我们创建两种类型的鬼头靶子:一种脆弱但是移动速度快的,和一种强壮但是速度慢的,
现在让我们创建Monster类。有很多方法可以模型化Monster类,但这里我们使用最简单的,就是作为CCSprite的子类。我们还将会创建两个Monster的子类:一个代表脆弱快速的鬼头靶子,另一种则代表强壮慢速的。
- /*
- * Monster.h
- *
- * Created on: 2012-9-28
- * Author: Panda
- */
- #ifndef MONSTER_H_
- #define MONSTER_H_
- #include "cocos2d.h"
- USING_NS_CC;
- class Monster: public CCSprite
- {
- public:
- Monster();
- virtual ~Monster();
- CC_SYNTHESIZE(int, _curHp, Hp);
- CC_SYNTHESIZE(int, _minMoveDuration, MinMoveDuration);
- CC_SYNTHESIZE(int, _maxMoveDuration, MaxMoveDuration);
- };
- class WeakAndFastMonster: public Monster {
- public:
- static WeakAndFastMonster *monster();
- };
- class StrongAndSlowMonster: public Monster {
- public:
- static StrongAndSlowMonster *monster();
- };
- #endif /* MONSTER_H_ */
这里直截了当:我们让Monster继承自CCSprite并加了几个成员变量,用来记录鬼头靶子的状态,然后又从Monster派生了两个类,用来代表两种不同类型的鬼头靶子。
- /*
- * Monster.cpp
- *
- * Created on: 2012-9-28
- * Author: Panda
- */
- #include "Monster.h"
- Monster::Monster() {
- // TODO Auto-generated constructor stub
- }
- Monster::~Monster() {
- // TODO Auto-generated destructor stub
- }
- WeakAndFastMonster* WeakAndFastMonster::monster() {
- WeakAndFastMonster *monster = new WeakAndFastMonster;
- if (monster->initWithFile("Target.png") && monster->autorelease()) {
- monster->setHp(1);
- monster->setMinMoveDuration(3);
- monster->setMaxMoveDuration(5);
- }
- return monster;
- }
- StrongAndSlowMonster *StrongAndSlowMonster::monster() {
- StrongAndSlowMonster *monster = new StrongAndSlowMonster;
- if (monster->initWithFile("Target2.png") && monster->autorelease()) {
- monster->setHp(3);
- monster->setMinMoveDuration(6);
- monster->setMaxMoveDuration(12);
- }
- return monster;
- }
这里实际有用的代码只是在两个类中分别添加了一个static方法,用来设置默认的HP和移动时间。
现在让我们把新的Monster类加入到除此之外的代码中去!首先导入新文件到MainScene.cpp的一开头
- #include "Monster.h"
然后,修改addTarget 方法,替换掉以前直接创建sprite的方法,使其构造我们新的类。用以下内容替换掉CCSprite *pTarget = CCSprite::create("Target.png");这一行:
- Monster *pTarget = NULL;
- if (arc4random() % 2 == 0) {
- pTarget = WeakAndFastMonster::monster();
- } else {
- pTarget = StrongAndSlowMonster::monster();
- }
这里会有50%的几率会出现两种鬼头靶子中的一种。另外,因为我们把靶子移动速度这个变量移到了类中,所以要如下修改min/max duration这一行:
- int minDuration = pTarget->getMinMoveDuration();
- int maxDuration = pTarget->getMaxMoveDuration();
最后一步,要对updateFrame方法做些修改。首先在targetsToDelete声明之前加入一个bool。
- bool monsterHit = false;
然后,在intersectsRect判断块儿中,不要立刻就将对象加入到 array_targetsToDelete ,用以下内容替换之:
- if (Projectile->boundingBox().intersectsRect(
- Target->boundingBox())) {
- monsterHit = true;
- Monster *monster = (Monster*) Target;
- monster->setHp(monster->getHp() - 1);
- if (monster->getHp() <= 0) {
- array_targetsToDelete->addObject(Target);
- }
- break;
- }
我们不再立刻杀掉鬼头靶子了,而是减少其一HP,当血量为0或比0小时,我们才摧毁它。另外注意一下,每当飞镖碰到一个鬼头靶子时我们就退出循环了,意味着飞镖每次只能打击一个鬼头靶子。
最后,如下修改array_projectilesToDelete判断块儿:
- if (monsterHit) {
- array_projectilesToDelete->addObject(Projectile);
- }
编译并运行,如果一切顺利你会看到两种不同类型的鬼头靶子穿梭在屏幕中,我们的主角终于棋逢对手了!
以上就是使用Cocos2D-x制作iphone/Android简单游戏的代码,代码应该是足够清楚的,而且我也相信有相当的一些例子可能是我们日常工作可能会见得到的。通过这篇文章,希望你能收获更多。