基于cocos2dx的飞机大战学习[五]-添加三种敌机

2024-08-21 07:58

本文主要是介绍基于cocos2dx的飞机大战学习[五]-添加三种敌机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这节完成了许多的功能:
1、添加小飞机、中等飞机、大飞机。
2、每种飞机的移动速度和血量不同。
3、飞机被子弹打击效果。
4、飞机被摧毁效果。

cocos2d提供的Sprite类不足以提供以上功能,所以我们需要新建一个Enemy类重写Sprite。

Enemy.h代码段

#ifndef __ENEMY_H__
#define __ENEMY_H__#include "cocos2d.h"//敌机类型
typedef enum 
{SMALL_ENEMY,MIDDLE_ENEMY,BIG_ENEMY
}EnemyType;class Enemy : public cocos2d::Sprite {
public:Enemy();static Enemy* create(EnemyType);bool init(EnemyType);//碰撞void hit();//摧毁void down();EnemyType e_type;//敌机移动速度float e_step;//敌机血量int e_hp;   
};
#endif

这里的e_step、e_hp、e_type我直接public了,可以自行封装。

Enemy.cpp代码段

#include "Enemy.h"Enemy::Enemy() {this->e_type = SMALL_ENEMY; this->e_hp = 0;
}Enemy* Enemy::create(EnemyType type) {auto enemy = new Enemy();if( enemy && enemy->init(type) ) {enemy->autorelease();return enemy;}delete enemy;enemy = NULL;return NULL;
}//根据不同的敌机建立不同的图片效果
bool Enemy::init(EnemyType type) {this->e_type = type;switch (type){case  SMALL_ENEMY:this->e_hp = 1;this->e_step = 4;       cocos2d::Sprite::initWithSpriteFrameName("enemy1.png");break;case  MIDDLE_ENEMY:this->e_hp = 6;this->e_step = 1;cocos2d::Sprite::initWithSpriteFrameName("enemy2.png");break;case  BIG_ENEMY:this->e_hp = 30;this->e_step = 0.5f;cocos2d::Sprite::initWithSpriteFrameName("enemy3_n1.png");break;default:break;}return true;
}//打击效果
void Enemy::hit() { auto animation = cocos2d::Animation::create();switch (this->e_type){case MIDDLE_ENEMY:animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2_hit.png"));animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2.png"));break;case BIG_ENEMY:animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->    getSpriteFrameByName("enemy3_hit.png"));animation->addSpriteFrame(cocos2d::SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3_n1.png"));break;default:break;}animation->setDelayPerUnit(0.2f);auto animate 

这篇关于基于cocos2dx的飞机大战学习[五]-添加三种敌机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092580

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

在Spring中配置Quartz的三种方式

《在Spring中配置Quartz的三种方式》SpringQuartz是一个任务调度框架,它允许我们定期执行特定的任务,在Spring中,我们可以通过多种方式来配置Quartz,包括使用​​@Sche... 目录介绍使用 ​​@Scheduled​​ 注解XML 配置Java 配置1. 创建Quartz配置

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert