cocos自学笔记-酷跑demo(下)
来源:互联网 发布:linux 启动ntp客户端 编辑:程序博客网 时间:2024/04/28 04:57
其中部分资源及概念来源于各种书籍教程及互联网。
自学笔记仅记录自己操作及实践的过程并分享。
因本人水平有限,不保证内容的正确性。
如有错误或侵犯,实属意外,请联系我修改或删除。
上次拆了酷跑demo,这次自己写试试。
1、整理酷跑中出现的东西如下:
参与到游戏逻辑的有主角,怪兽和金币。怪兽和金币是通过一个序列产生。
场景布局有完全不动的背景图片,和一个一直在移动的地图。
然后有一个一直在显示金币状态和暂停按钮的json。
2 、Element
新建一个Element类作为基类,提供精灵初始化、碰撞检测和一个事件响应接口
通过cocos提供的AABB实现碰撞检测如下:
bool rectElement(Element *element)
{
returnsprite->getAABB().intersects(element->sprite->getAABB());
}
并提供一个响应碰撞后续处理的接口bool rectElement(Element *element)
{
returnsprite->getAABB().intersects(element->sprite->getAABB());
}
3、SceneState
新建一个SceneState类,用来载入和显示金币及暂停的状态如下:
staticint gold;
staticcocos2d::ui::TextAtlas* stateGoldText;
并提供一个初始化的成员函数和一个刷新的成员函数
void initStateBar(cocos2d::Layer *layer,int cam);
void UpdateStateBar();
4、Coin、Monster、SceneMap
让Coin、Monster、SceneMap继承Element,并各自实现自己的精灵载入和事件响应。
因为Coin、Monster、SceneMap都用Action实现一直不停朝一个方向运动。
于是偷个懒,让这2个类再继承Action并实现
virtualbool isDone()const;
virtualvoid step(float time);
金币每次被玩家碰撞都会触发金币增长,于是让Coin再继承SceneState,响应碰撞时,调用父类SceneState的UpdateStateBar();刷新分数。5、Hatchery
Hatchery类提供怪物、金币产生时的序列,其实就是简单的对vector的封装。
6、Player、Move3D
Player继承自Element,实现自己的精灵载入和触摸事件响应,以及碰撞的响应。Move3D继承自ActionInterval实现player的运动。
7、MainLayer
包含以下成员
private:
Hatchery hatchery;
Player player;
SceneState sceneState;
cocos2d::Vec2 touch_begin_pos;
cocos2d::Vec2 touch_end_pos;
onTouchBegan时记录touch_begin_pos,onTouchEnded时用touch_end_pos - touch_begin_pos后调用player的updateEvent来处理触摸移动。
MainLayer::upDateScene(float dt)
中如果player.alive就根据时间和hatchery创建新的Coin、Monster、SceneMap加入场景。对于Coin、Monster创建时,调用addRectElement((Element*)&player)。将player加入到碰撞检测列表。
而一开始SceneState没有加入到CameraFlag::USER2时就可以显示,因为被默认加入了CameraFlag::DEFAULT
于是干掉MainLayer的setCameraMask。之后一切正常。
最后使用Instruments检测内存泄漏,一切正常。
9、总结
setCameraMask只对当前起作用,当需要多个Camera,而且都绑在一个Layer上时,给Layer设置CameraMask是自己找不愉快。
要么多个Layer各自对映Camera,最后一口气加完。
要么每加一个节点就给这个节点设置一个CameraMask。
游戏一开始的1s左右有些卡,很不爽。Instruments中发现最开始内存是一瞬间上升的。
也就是说,读取文件,创建精灵最好还是尽量分开弄,不要一口气加载。
要不然就让游戏一开始显示一个loading界面,多线程加载完后再开始跑。
最后感觉用Cocos直接上手写个例子并不难,但是想熟练用好,写出稳定高效的游戏,还是要仔细看api,看源码,和多敲多练。
于是就顺便给自己再挖个坑,先做一个原创的3d小游戏,然后再看设计模式方面的书,再重构代码。
祝我好运
- cocos自学笔记-酷跑demo(下)
- cocos自学笔记-酷跑demo(上)
- cocos自学笔记-环境搭建
- Android自学笔记 第四天(下)
- 自学 java 笔记 day8(继承下)
- 自学 java 笔记 day9(继承下)
- 自学 java 笔记 day10(继承下)
- Git 自学笔记 egit (分支管理 下)
- (cocos笔记) cocos lua 粒子特效试用
- 自学linux从零开始(自学笔记①)
- 自学Linux从零开始(自学笔记③)
- (笔记)cocos :llvm toolchain not found!
- cocos 学习笔记(三)动作
- cocos学习笔记(四)文本
- 自学笔记之-练习题
- 自学笔记之-指针
- ajax自学笔记(一)
- AJAX自学笔记(二)
- View事件面试总结21问21答。
- 游戏中的角色类1
- 第四周 项目5(2)
- 重载函数调用运算符()
- AOP笔记
- cocos自学笔记-酷跑demo(下)
- zookeeper,CuratorFramework,springMVC整合相关问题
- 第五周第二项目——游戏角色设计
- 38. Count and Say | Java最短代码实现
- 多线程使用总结
- Bootstrap学习笔记—关于网格系统
- docker中nginx容器和php容器混合运行
- HDU 1108
- Xcode localization failed to read a strings file问题原因