首页 > 代码库 > cocos2d-x初学笔记
cocos2d-x初学笔记
一、HelloWorld
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>1.修改窗口属性:
main.cpp
1: CCEGLView * eglView = CCEGLView::sharedOpenGLView();
2: eglView->setViewName("HelloCpp");//窗口名字3: eglView->setFrameSize("2048,1536");//窗口大小4: eglView->setFrameZoomFactor(0.4f);//窗口缩放,只对计算机平台有效,对手机无效
2.解决无法打开文件“libcocos2d.lib”的问题
右键项目—》属性—》左侧,配置属性—》C/C++-—》右侧,附加包含目录—》编辑—》把$(SolutionDir)换成Cocos2d-x安装目录
3.AppDelegate.cpp—>applicationDidFinishLaunching
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>1: pDirector->setDisplayStats(true);//设置是否显示游戏的帧数等调试信息2: pDirector->setAnimationInterval(1.0 / 60);//设置游戏的帧率,在这里是60帧每秒3: CCScene * pScene = HelloWorld::scene();//创建一个场景4: pDirector->runWithScene(pScene);//只有执行这一步,才能让场景类显示出来
4.CREATE_FUNC宏
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>1: #define CREATE_FUNC(__TYPE__)\2: static__TYPE__* create() \
3: { \
4: __TYPE__ *pRet = new __TYPE__(); \5: if (pRet && pRet->init()) \6: { \
7: pRet->autorelease(); \
8: return pRet; \9: } \
10: else \11: { \
12: delete pRet; \
13: pRet = NULL; \
14: return NULL; \15: } \
16: }
二 、Base_1
1.CCScene
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style><style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>1: class CC_DLL CCScene : public CCNode2: {
3: public:4: CCScene();
5: virtual ~CCScene();6: bool init();7:
8: static CCScene * create(void);9: };
2.CocosDenshion::SimpleAudioEngine::sharedEngine()
playBackgroundMusic适合播放持续时间比较长的声音文件,比如背景音乐。
playEffect适合播放持续时间比较短的声音文件,比如打斗声音,技能释放声音。
3.CCScale9Sprite
一种支持任意拉伸的图片,节省资源和内存空间。使用它需加上如下代码:
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>1: #include "cocos-ext-h"2: using namespace cocos2d::extension;
然后需要如下设置:
属性—》配置属性—》C/C++—》附加包含目录—》编辑—》添加“$(SolutionDir)extensions”;
属性—》配置属性—》链接器—》输入—》编辑附加依赖项—》添加“libExtensions.lib”
4.CCControlButton::setPreferredSize(CCSize(width,height))
强制设置按钮的大小,如果超过这个范围,则会自动扩大。
5.CControlPotentiometer 电位计按钮,由三张图片构成,比如用于音量按钮的设计
6.贝塞尔曲线运动 CCBezierTo CCBezierBy
需要ccBezierConfig对象,有三个属性:
bezier.controlPoint_1:波谷偏向值;
bezier.controlPoint_2:波峰偏向值;
bezier.endPosition:动作终点。
7.CCSequence和CCSpawn
CCSequence:让所有动作按顺序播放,CCSpawn:让所有动作一起播放。其中函数CCSequence::create的最后一个参数必须为NULL。
8.bool ccTouchBegan(CCTouch * pTouch,CCEvent * pEvent)
返回true,将截取屏幕触摸事件,ccTouchMoved和ccTouchEnded都会被调用,而其它层都无法接收屏幕触摸事件;
放回false,不截取屏幕触摸事件,ccTouchMoved和ccTouchEnded将不会被调用,其它层都可以接收屏幕触摸事件,也就是说,所有复数形式的监听函数都能被调用。
9.需要复数形式的监听函数要用addStandardDelegate,需要单数形式的监听函数要用addTargetedDelegate。
10.创建筛选器,即虚拟的文件夹,有助于对类文件的管理。
11.addChild(参数1,参数2),参数2的值越大,对象层次越高,越迟被绘制,位置越靠前。
12.程序运行的每一帧都会调用CCNode的update函数,前提是允许调用,使用this->scheduleUpdate();
13.对象默认的描点是对象的中点。
14.CCSpriteBatchNode,包含的子节点在绘制时只调用一次OpenGL渲染。
15.打包图片的工具TexturePacker。
16.创建动画的一般步骤:
(1)首先创建一组CCSpriteFrame对象,每张动画图片为一个CCSpriteFrame对象;
(2)用这组CCSpriteFrame对象创建一个CCAnimation对象;
(3)用CCAnimation对象创建一个CCAnimate对象。
17.地图编辑器Tiled Map Editor。创建完地图后,注意地图路径问题。若加载报错,则用文本编辑器打开tmx文件进行修改。
18.常用回调函数
schedule_selector:常用于定义定时器回调函数,函数无参数;
callfunc_selector:常用于定义动作回调函数,函数无参数;
callfuncN_selector:常用于定义动作回调函数,函数带一个CCNode * 参数;
callfuncND_selector:常用于定义动作回调函数,函数带一个CCNode * 参数和一个void * 参数;
menu_selector:常用于定义菜单回调函数,带一个CCObject * 参数。
三、Base_2
1、观察者模式工具类(CCNotificationCenter)
(1)addObserver(CCObject * target,SEL_CallFuncO selector,const char * name,CCObject * obj);
订阅消息,参数:要订阅消息的主体,消息回调函数,消息名称,要传递的数据。
(2)removeObserver(CCObject * target,const char * name);
取消订阅消息,参数:取消订阅消息的主体,消息名称。
(3)postNotification(const char * name);
发布消息,参数:消息名称。
(4)postNotification(const char * name,CCObject * object);
发布消息,参数:消息名称,传递的数据。
2、CCUserDefault类,将用户数据保存到xml文件中。
3、Csv文件,一组只用逗号分隔的字符串。
Excel—》****.xls WPS—》****.et
4、有限状态机FSM
控制游戏对象在不同的状态下应该做什么事情的一个机制。运用了状态模式的设计思想。
5、Lua
(1)Lua和C++的简单通信流程:
有一lua文件:name = “cocos2dx”
1>、C++想获取name字符串的值,所以它把name放到Lua堆栈栈顶;
2>、Lua从堆栈栈顶中获取name,此时栈顶为空;
3>、Lua在全局表中查找name对应的字符串;
4>、全局表返回一个字符串“cocos2dx”;
5>、Lua将获得的“cocos2dx”字符串放到堆栈栈顶;
6>、C++可以从Lua堆栈栈顶获得“cocos2dx”。
(2)Lua是C语言库,所以在C++中使用必须用extern”C”声明,让编译器知道。
extern ”C” {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
};
(3)lua_State执行Lua的容器;
luaopen_base(lua_State * x),luaopen_math(lua_State * x),luaopen_string(lua_State * x)使用Lua的标准库需要加载;
lua_close(lua_State * x)释放内存;
luaL_dofile(lua_State * x,const char * path)执行脚本,返回0表示成功;
lua_settop(lua_State * x,int tag)设置栈顶的索引值为tag;
(4)堆栈的索引方式有两种,一种正数索引,一种负数索引:
正数索引:不需要知道栈的大小,我们就知道栈底在哪,栈低的索引永远是1;
负数索引:不需要知道栈的大小,我们就知道栈顶在哪,栈顶的索引永远是-1;
(5)table数据结构,类似数组
lua_gettable从栈顶取得一个值,然后根据这个值去table中寻找对应的值,最后把找到的值放到栈顶。
(6)C++的函数和封装函数都必须是静态的。
6、SMC,状态机代码生产工具。
7、TinyXML,XML读取工具。