豪华版飞机大战系列(三)
本篇来介绍下游戏中的敌人类,既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。
豪华版飞机大战系列(三)相关推荐
- 豪华版飞机大战系列(六)--附源代码
最后一篇讲一下游戏中的主要逻辑推断,在上面的工作都做充分准备后,游戏主要逻辑将变得特别清晰,接下来你会看到全部的逻辑都是那么的清晰自然,由于前面已经做好了充分的准备工作,这里仅仅是整合了前面的工作,略 ...
- 飞机大战java_java版飞机大战实战项目详细步骤
本文为大家分享了java版飞机大战实战项目,供大家参考,具体内容如下 分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是 ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
- python飞机大战源代码-python版飞机大战代码分享
利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import ...
- 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端
简介: 飞机大战HTML5游戏源码是一款基于Canvas制作的网页版飞机大战游戏,画质精美的飞机大战手机端游戏源码 网盘下载地址: http://kekewangLuo.net/W1S2LQcqAT2 ...
- java版飞机大战代码
java版飞机大战代码 前言 Plane PlaneStatus类 Power类 Gift Diji play类 over类 MainFrame主类 MyZiDan DijiZiDan Before ...
- python版飞机大战
python版飞机大战 用python几百行代码搞定飞机大站游戏. 我们利用pygame包进行飞机大战的游戏开发,所以大家首先得安装好pygame包,本游戏一共封装了8个类,大家可以在GitHub上下 ...
- html+javascript实现的网页版飞机大战小游戏源码
html+javascript实现的网页版飞机大战小游戏源码 完整代码下载地址: html+javascript实现的网页版飞机大战小游戏源码 index.html <!DOCTYPE html ...
- 简易版飞机大战源码下载
简易版飞机大战,实现飞机发射子弹,随机出现怪物,碰撞检测,分数记录,OC语音开发 网盘下载地址:http://pan.baidu.com/s/1gfMHdYj 密码:jwjr 查看原文:http:// ...
- pygame的应用——python版飞机大战
利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import ...
最新文章
- 工业界如何解决NER问题?12个trick,与你分享~
- spring3 发送邮件和附件
- 设计模式-创建型模式-建造者模式
- 我们计划招收300名学员,免费攻读人工智能专业!
- 人脸识别翼闸使用规范_人行通道闸如何搭配人脸识别使用
- 对session和cookie的一些理解
- 深度学习笔记(48) 内容代价函数
- element ui 弹出组件的遮罩层在弹出层的上面的解决方法
- 7.分布式服务架构:原理、设计与实战 --- 服务的容器化过程
- java-php-python-ssm医药网络挂号系统计算机毕业设计
- torch中(required_grad_=True),根据mask替换掉部分值
- 天圆地方,物换星移. 北京天坛,先祖的祈福
- 基于嵌入式ARM的mp3播放器的设计
- 四舍六入c语言公式,【测绘专用】四舍六入五成双的C++实现
- 朋友圈终于能斗表情包了,会发表情包您就多发点!
- 启发式算法,元启发式算法,超启发式算法
- 面试官:关于负载均衡你了解多少 | Nginx面试题 | Nginx架构
- python hook(钩子)函数
- JavaScript网页特效-“渔夫打鱼晒网”程序设计
- 小蚁智能摄像机服务器故障,小蚁智能摄像机app怎么和摄像头连接
热门文章
- eclipse连接MySQL,进行增删改查
- linux系统交换分区的文件格式是,【简答题】Red Hat Linux中,交换分区的文件系统类型是什么,光盘文件的文件系统类型是什么?...
- 问题1:VS2017:找不到 Windows SDK 版本10.0.17134.0
- python总结与思考_Python小结 – pip 升级包总结
- android ndk r10d.rar,[Android] 环境配置之Android Studio开发NDK
- vue组件object_vue使用PDFObject的方法
- Matplotlib--legend函数
- Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
- 双11当天,淘宝搜索如何让CPU使用率降45%,GMV提1% | 论文
- Bootstrap3 表单-水平排列的表单