基于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

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

详解Java中三种状态机实现方式来优雅消灭 if-else 嵌套

《详解Java中三种状态机实现方式来优雅消灭if-else嵌套》这篇文章主要为大家详细介绍了Java中三种状态机实现方式从而优雅消灭if-else嵌套,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录1. 前言2. 复现传统if-else实现的业务场景问题3. 用状态机模式改造3.1 定义状态接口3

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

redis中session会话共享的三种方案

《redis中session会话共享的三种方案》本文探讨了分布式系统中Session共享的三种解决方案,包括粘性会话、Session复制以及基于Redis的集中存储,具有一定的参考价值,感兴趣的可以了... 目录三种解决方案粘性会话(Sticky Sessions)Session复制Redis统一存储Spr

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和