本篇来介绍下游戏中的敌人类,既EnemySprite.h和EnemySprite.cpp中关于敌人类中的详细实现。

游戏中的敌人类主要有四种,三种不同的敌机和炸弹从上面随机的落下来。同一时候每一个敌人都有自己的生命值。当生命值为0后会被从游戏中移除。

看一下敌人信息的头文件:EnemyInfo.h

#pragma onceconst int ENEMY1_MAXLIFE=3;
const int ENEMY2_MAXLIFE=5;
const int ENEMY3_MAXLIFE=10;const int ENEMY1_SCORE=1;
const int ENEMY2_SCORE=6;
const int ENEMY3_SCORE=30;enum EnemyType
{Enemy1 = 1,Enemy2,Enemy3,Enemy4,
};

这个文件里主要设置了枚举类型来差别不同的敌人,同一时候设置了得人的生命数和每一个敌人的分数,定义常量能够方便程序的维护。

接下来看下EnemySprite.h头文件:

#include "cocos2d.h"
#include "EnemyInfo.h"USING_NS_CC;
class EnemySprite : public Node
{
public:EnemySprite();//构造函数~EnemySprite();//析构函数virtual bool init();//初始化函数CREATE_FUNC(EnemySprite);//create函数宏定义,系统已经实现public:void setEnemyByType(EnemyType enType);//设置敌人的种类Sprite* getSprite();//取得已经创建的敌人int getLife();//获取生命值void loseLife();//被子弹击中后生命值降低Rect getBoundingBox();//取得敌人的外包装矩形Point getcurPoint();//取得敌人的位置private:Sprite *pEnemySprite;int nLife;
};

上述中的函数都做了具体的凝视,接下来看EnemySprite.cpp文件里的各种实现:

#include "EnemySprite.h"EnemySprite::EnemySprite() {
}EnemySprite::~EnemySprite() {
}/*** 依据敌机类型来创建不同的敌机*/
void EnemySprite::setEnemyByType(EnemyType enType) {switch (enType) {case Enemy1:pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n1.png"));nLife = ENEMY1_MAXLIFE;break;case Enemy2:pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n2.png"));nLife = ENEMY2_MAXLIFE;break;case Enemy3:pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n3.png"));nLife = ENEMY2_MAXLIFE;break;case Enemy4:pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n_boss.png"));nLife = ENEMY3_MAXLIFE;break;default:return;break;}this->addChild(pEnemySprite);pEnemySprite->setScale(0.6f);Size winSize = Director::getInstance()->getWinSize();Size enemySize = pEnemySprite->getContentSize();//设置敌机随机出现的位置int minX = enemySize.width / 2;int maxX = winSize.width - enemySize.width / 2;int rangeX = maxX - minX;int actualX = (rand() % rangeX) + minX;this->setPosition(Point(actualX, winSize.height + enemySize.height / 2));
}bool EnemySprite::init() {bool pRet = true;if (!Node::init()) {pRet = false;}return pRet;
}
/*** 取得创建的敌机精灵*/
Sprite* EnemySprite::getSprite() {return pEnemySprite;
}
/*** 取得生命值*/
int EnemySprite::getLife() {return nLife;
}
/*** 生命值降低。每次被击中家少0.5*/
void EnemySprite::loseLife() {nLife = nLife - 0.5;
}
/*** 取得如今的位置*/
Point EnemySprite::getcurPoint() {return this->getPosition();
}/*** 获取外包装矩形*/
Rect EnemySprite::getBoundingBox() {Rect rect = pEnemySprite->boundingBox();Point pos = this->convertToWorldSpace(rect.origin);Rect enemyRect(pos.x, pos.y, rect.size.width, rect.size.height);return enemyRect;
}

上述函数的实现都比較简单。并在关键处做了说明,对于精灵图片的获取是用的缓存单例类来获取的,第一次载入图片后缓存到游戏中,能够降低每次都载入图片所带来的性能损失。用缓存类来创建精灵的代码例如以下:

Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n1.png"));


好了。这篇主要介绍了敌人类的实现,创建好敌人类后就能够在GameLayer中直接调用此文件里已经实现好的函数来创建精灵。使各个文件的功能独立。模块分明,更好的来维护项目。

下一篇来介绍主角类Plane。

豪华版飞机大战系列(三)相关推荐

  1. 豪华版飞机大战系列(六)--附源代码

    最后一篇讲一下游戏中的主要逻辑推断,在上面的工作都做充分准备后,游戏主要逻辑将变得特别清晰,接下来你会看到全部的逻辑都是那么的清晰自然,由于前面已经做好了充分的准备工作,这里仅仅是整合了前面的工作,略 ...

  2. 飞机大战java_java版飞机大战实战项目详细步骤

    本文为大家分享了java版飞机大战实战项目,供大家参考,具体内容如下 分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是 ...

  3. 微信5.0 Android版飞机大战破解无敌模式手记

    微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...

  4. python飞机大战源代码-python版飞机大战代码分享

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import ...

  5. 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端

    简介: 飞机大战HTML5游戏源码是一款基于Canvas制作的网页版飞机大战游戏,画质精美的飞机大战手机端游戏源码 网盘下载地址: http://kekewangLuo.net/W1S2LQcqAT2 ...

  6. java版飞机大战代码

    java版飞机大战代码 前言 Plane PlaneStatus类 Power类 Gift Diji play类 over类 MainFrame主类 MyZiDan DijiZiDan Before ...

  7. python版飞机大战

    python版飞机大战 用python几百行代码搞定飞机大站游戏. 我们利用pygame包进行飞机大战的游戏开发,所以大家首先得安装好pygame包,本游戏一共封装了8个类,大家可以在GitHub上下 ...

  8. html+javascript实现的网页版飞机大战小游戏源码

    html+javascript实现的网页版飞机大战小游戏源码 完整代码下载地址: html+javascript实现的网页版飞机大战小游戏源码 index.html <!DOCTYPE html ...

  9. 简易版飞机大战源码下载

    简易版飞机大战,实现飞机发射子弹,随机出现怪物,碰撞检测,分数记录,OC语音开发 网盘下载地址:http://pan.baidu.com/s/1gfMHdYj 密码:jwjr 查看原文:http:// ...

  10. pygame的应用——python版飞机大战

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import ...

最新文章

  1. 工业界如何解决NER问题?12个trick,与你分享~
  2. spring3 发送邮件和附件
  3. 设计模式-创建型模式-建造者模式
  4. 我们计划招收300名学员,免费攻读人工智能专业!
  5. 人脸识别翼闸使用规范_人行通道闸如何搭配人脸识别使用
  6. 对session和cookie的一些理解
  7. 深度学习笔记(48) 内容代价函数
  8. element ui 弹出组件的遮罩层在弹出层的上面的解决方法
  9. 7.分布式服务架构:原理、设计与实战 --- 服务的容器化过程
  10. java-php-python-ssm医药网络挂号系统计算机毕业设计
  11. torch中(required_grad_=True),根据mask替换掉部分值
  12. 天圆地方,物换星移. 北京天坛,先祖的祈福
  13. 基于嵌入式ARM的mp3播放器的设计
  14. 四舍六入c语言公式,【测绘专用】四舍六入五成双的C++实现
  15. 朋友圈终于能斗表情包了,会发表情包您就多发点!
  16. 启发式算法,元启发式算法,超启发式算法
  17. 面试官:关于负载均衡你了解多少 | Nginx面试题 | Nginx架构
  18. python hook(钩子)函数
  19. JavaScript网页特效-“渔夫打鱼晒网”程序设计
  20. 小蚁智能摄像机服务器故障,小蚁智能摄像机app怎么和摄像头连接

热门文章

  1. eclipse连接MySQL,进行增删改查
  2. linux系统交换分区的文件格式是,【简答题】Red Hat Linux中,交换分区的文件系统类型是什么,光盘文件的文件系统类型是什么?...
  3. 问题1:VS2017:找不到 Windows SDK 版本10.0.17134.0
  4. python总结与思考_Python小结 – pip 升级包总结
  5. android ndk r10d.rar,[Android] 环境配置之Android Studio开发NDK
  6. vue组件object_vue使用PDFObject的方法
  7. Matplotlib--legend函数
  8. Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
  9. 双11当天,淘宝搜索如何让CPU使用率降45%,GMV提1% | 论文
  10. Bootstrap3 表单-水平排列的表单