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

相关文章

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

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

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen