Cocos2d-x《雷电大战》(4)-策略模式实现不同子弹切换!!,cocos2dx层切换

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 13:13 我要评论(0)

Cocos2d-x《雷电大战》(4)-策略模式实现不同子弹切换!!,cocos2dx层切换

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

本文从设计模式中的策略模式入手,主讲了飞机大战中英雄飞机切换不同的子弹。这里分为三种子弹。第一种:每次发一个子弹,垂直发射;第二种:每次发两个子弹,两个都是垂直发射:第三种;每次发三个子弹,两边的子弹有一定的角度,而中间的子弹垂直发射;设计模式是游戏开发经常用到的思想,建议有兴趣的同学可以好好研究下!好了,下面开始吧。

效果如下:

\

\

\

Cocos2d-x版本:3.4

工程环境:VS30213

一、策略模式(Stragegy Pattern)

1、简介

Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法的切换 。

2、意图

定义一系列的算法,把它们一个个封装起来,并且它们可相互替换。使得算法可独立于使用它的客户而变化。

3、适用性

如果一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

一个系统需要动态的在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些算法类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则,客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法的对象。

一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的和复杂的只与算法有关的数据。

如果一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移到它们各自的Strategy类中以代替这些条件语句。

更多详细的策略模式看这里吧:24天学会设计模式------策略模式 二.子弹类与子弹管理类的代码编写首先来看下本文的类UML图:\这里的思路是把子弹发射当成是一个函数,基类子弹中定义成虚函数,然后实现类子弹中HeroBulletOne、HeroBulletTwo、HeroBulletThree分别实现不同的发射功能。然后在子弹管理类中HeroBulletLayer中有一个私有的成员变量BulletStyle *mBulletStyle.当需要切换不同的子弹时,就将new不同的HeroBulletOne或HeroBulletTwo或HeroBulletThree,赋给mBulletStyle。下面我们来看看代码吧!!!2.1 首先是子弹的基类:BulletStyle.h,这里注意到virtual void shootBullet(float dt){}为虚函数,表示这里要根据的子类不同,发射不同的子弹数目;/**

*功能 创建子弹的基类

*作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)

*时间 2015.3.31

*/

#pragma once

#ifndef __BulletStyle_H__

#define __BulletStyle_H__

#include "cocos2d.h"

USING_NS_CC;

class BulletStyle : public cocos2d::Node{

public:

~BulletStyle();

/**

* 移除所有的东西

*/

void removeAllObject();

/**

*移除超出屏幕可视范围的子弹或者碰撞后的子弹清除

*@param pNode 要删除的子弹

*/

void removeBullet(Node* pNode);

/**

*根据传入的飞机,子弹跟随发射

*@param plane为传入飞机,可为英雄飞机或敌机

*/

virtual void createBullet(Node* plane);

/**

*发射子弹,在其中进行子弹的渲染和子弹的飞行动作,默认为单子弹

*@param dt子弹间隔发时间

*/

virtual void shootBullet(float dt){}

protected:

//子弹容器

Vector <Sprite *> vecBullet;

//批次渲染节点

SpriteBatchNode* bulletBatchNode;

//传入的飞机

Node* plane;

};

#endif 实现文件BulletStyle.cpp/**

*功能 创建子弹的基类

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...