[置顶] 【cocos2d-x入门实战】微信飞机大战之四:飞机登场咯
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11757175
昨天收到了电子工业出版社寄过来的《cocos2d-x游戏开发之旅》这本书了,书还是不错的,那天rp爆发在微博上抽到的奖品。
感觉自己这个系列写的好像有点慢,但是想说尽可能把每一个点介绍到,所以,嫌啰嗦的请见谅咯。。。
我在这个游戏中对精灵和层的处理方式是一个层中只放一种精灵,把精灵的接口提供出去,然后通过层的叠加来实现整个游戏。
1.飞机登场了
飞机是Hero,所以它应该是一个单例类,cocos2d-x中有很多单例类,成员函数中有sharedxxxx的基本上就是。比如导演类,几个cache类等待。但是我这里偷个懒,并没有把它处理成单例类,因为整个游戏结构比较简单,但是在大的项目中就不能这么处理了。
和导演类的shareDirector一样,我们在PlaneLayer中也添加PlaneLayer的一个静态指针sharedPlane。但是和导演类不一样的是,我们需要在创建PlaneLayer后才能使用这个sharedPlane,而且在PlaneLayer销毁后就不能使用它,这里需要我们自己控制好整个流程。
//PlaneLayer.h
class PlaneLayer :
public CCLayer
{
public: PlaneLayer(void); ~PlaneLayer(void); static PlaneLayer* create();//实现create函数 virtual bool init(); public: static PlaneLayer* sharedPlane;//提供sharedPlane全局指针
}; //PlaneLayer.cpp
PlaneLayer* PlaneLayer::sharedPlane=NULL;//静态变量要在cpp外初始化
PlaneLayer* PlaneLayer::create()
{
PlaneLayer *pRet = new PlaneLayer();
if (pRet && pRet->init())
{
pRet->autorelease();
sharedPlane=pRet;//获得静态指针sharedPlane的值
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return NULL;
}
}
和示例不一样,这里的create我们要自己实现,而不是简单的使用LAYER_CREATE_FUNC宏了。
而这个层的使用,只需要在上一篇中的GameLayer.cpp的init函数里调用就可以了。
//加入planeLayer
this->planeLayer=PlaneLayer::create();
this->addChild(planeLayer);
2.添加动画效果
细心的玩家会发现,飞机在飞行过程中机尾是在喷火的,其实这就是帧动画。
这里篇幅有限,就简单介绍下帧动画和这里用到的其他动画效果。
帧动画的使用步骤:
(1)create,创建CCAnimation类实例。
(2)setDelayPerUnit,设置帧间间隔时间。
(3)addSpriteFrame,添加帧图片。
(4)create,创建CCAnimate类实例,传入(1)的CCAnimation实例,注意CCAnimation是动画过程是名词,CCAnimate才是动画动作。
(5)精灵调用runAction即可使用。
(6)注意CCAnimationCache这也是一个动画类全局缓冲池。如果大量重复动画可以放里面使用,加快游戏速度。
bool PlaneLayer::init()
{
bool bRet=false;
do
{
CC_BREAK_IF(!CCLayer::init()); CCSize winSize=CCDirector::sharedDirector()->getWinSize(); CCSprite* plane=CCSprite::create(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero1.png"));
plane->setPosition(ccp(winSize.width/2,plane->getContentSize().height/2));
this->addChild(plane,0,AIRPLANE);//添加精灵,AIRPLANE是tag CCBlink *blink=CCBlink::create(1,3);//闪烁动画 CCAnimation* animation=CCAnimation::create();
animation->setDelayPerUnit(0.1f);
animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero1.png"));
animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero2.png"));
CCAnimate* animate=CCAnimate::create(animation);//帧动画 CCSequence* sequence=CCSequence::create(blink,CCRepeatForever::create(animate));//重复帧动画和连续动画
plane->runAction(sequence); bRet=true;
} while (0); return bRet;
}
那这些CCBlink,CCRepeaterForever和CCSequence又是什么?
这就是cocos2d-x提供的一些动画效果,其实用起来都很简单,无非是设置duration持续时长,repeat重复次数,和一些位移的坐标点,角度等等,就可以直接运行。可以在cocos2d-x的test示例中找到。
现在飞机出现了,在一开始闪烁3次以后,结合上篇的背景滚动,飞机就会喷气往前飞了。。。吼吼。。。
[置顶] 【cocos2d-x入门实战】微信飞机大战之四:飞机登场咯的更多相关文章
- [置顶] 【cocos2d-x入门实战】微信飞机大战之六:子弹层的处理
这一篇将会处理完子弹层的其他要点. 1.子弹的初始位置 子弹的初始位置在飞机的机头位置,因为飞机在游戏的过程中会随着玩家的触摸而改变其位置,所以,子弹的初始位置只能以当前飞机位置为基准进行添加. CC ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11730601 不过明眼人一看就知道起飞的不是飞机,是背景,相对运动引起的错觉. 1 ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之二:别急,先处理好CCScene和CCLayer的关系
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11713197 在整个游戏开始之前,我们先看一下HelloWorld示例中CCSce ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之十三:游戏场景过渡
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12082043 游戏是实现了,但是如果有个欢迎界面和一个结束界面就更好了. 欢 ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之十二:分数的本地存储
转载请表明地址:http://blog.csdn.net/jackystudio/article/details/12036237 作为一个单机游戏,连分数存储的的功能都没有,让它怎么在单机游戏圈里混 ...
- [置顶] IOS 基础入门教程
IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...
- [置顶] 【Git入门之十五】Github操作指南
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12374633 最终篇,介绍一下Github网站的使用,主要是翻译为主,简化了 ...
- [置顶] Hibernate从入门到精通(五)一对一单向关联映射
上次的博文中Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理多个相关对象和 ...
- [置顶] Mysql存储过程入门知识
Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...
随机推荐
- github/python/ show me the code 25题(一)
先上网址 https://github.com/Show-Me-the-Code/show-me-the-code 初学python拿来练手,记住一些常用的库和函数 第 0000 题:将你的 QQ 头 ...
- Oratop工具——实时数据库性能监控工具
在任何系统优化过程中,“80/20原则”是我们一定要关注的问题.简单的说,就是我们系统80%的性能问题.现象,都是有少数几个甚至一个问题造成的.这就需要我们面对复杂的系统性能问题的时候,要学会“拨开云 ...
- 面向对象程序设计-C++_课时26拷贝构造Ⅰ_课时27拷贝构造Ⅱ
一旦写了一个类,给它3个函数: 1default construtor 2virtual destructor 3copy constructor Constructions vs. assignme ...
- dataset 用法(3)
ReadXml 提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式(若要同时读数据和架构,请使用包括 mode 参数的 ReadXML 重载之一,并将其值设置为 ReadSc ...
- FilenameUtils工具类
转载请出自出处:http://eksliang.iteye.com/blog/2217081 一.概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的 ...
- CentOS修改系统默认语言与编码
有时候在安装CentOS无意中把默认语言设置为中文,而部分SSH软件不支持中文编码,所以在远程管理的时候会出现些乱码的现象. 如何修改CentOS的默认语言呢? 请先使用root权限帐户登陆 一. ...
- validate 表单验证
转自博客园:http://www.cnblogs.com/easyinsc/archive/2009/02/27/1407826.html (1)required:true ...
- [转]oracle误删数据的恢复
与数据打交道,免不了会误删一些数据,之后还commit了,连回滚的机会都没了,而更糟糕的是你又没有备份,这种事终于在今天被我不幸的遇上了... 唯一一点值得欣慰的是,我删除表记录的时候,时间不长,一天 ...
- UISearchBar--改变内部输入框的背景颜色
思路是获取UISearchBar的子视图,判断他是否是输入框(注意不要先入为主地认为是UITextField),最后修改背景色.至于UISearchBar的子视图结构,在不同的iOS版本可能会不一样, ...
- Chain of Responsibility模式
熟悉VC/MFC的都知道,VC是“基于消息,事件驱动”,消息在VC开发中起着举足轻重的作用.MFC提供了消息的处理的链式处理策略,处理消息的请求将沿着预定好的路径依次进行处理.消息的发送者并不知道该消 ...