首页 > 代码库 > cocos2d-x初学笔记

cocos2d-x初学笔记

一、HelloWorld

1.修改窗口属性:

main.cpp

   1:  CCEGLView * eglView = CCEGLView::sharedOpenGLView();    
   2:  eglView->setViewName("HelloCpp");//窗口名字     
   3:  eglView->setFrameSize("2048,1536");//窗口大小    
   4:  eglView->setFrameZoomFactor(0.4f);//窗口缩放,只对计算机平台有效,对手机无效
<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>

2.解决无法打开文件“libcocos2d.lib”的问题

   右键项目—》属性—》左侧,配置属性—》C/C++-—》右侧,附加包含目录—》编辑—》把$(SolutionDir)换成Cocos2d-x安装目录

3.AppDelegate.cpp—>applicationDidFinishLaunching

   1:  pDirector->setDisplayStats(true);//设置是否显示游戏的帧数等调试信息
   2:  pDirector->setAnimationInterval(1.0 / 60);//设置游戏的帧率,在这里是60帧每秒
   3:  CCScene * pScene = HelloWorld::scene();//创建一个场景
   4:  pDirector->runWithScene(pScene);//只有执行这一步,才能让场景类显示出来
<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>

4.CREATE_FUNC宏

   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:  }
<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>

二 、Base_1

1.CCScene

   1:  class CC_DLL CCScene : public CCNode
   2:  {
   3:  public:
   4:          CCScene();
   5:          virtual ~CCScene();
   6:          bool init();
   7:          
   8:          static CCScene * create(void);
   9:  };
<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>

2.CocosDenshion::SimpleAudioEngine::sharedEngine()

playBackgroundMusic适合播放持续时间比较长的声音文件,比如背景音乐。

playEffect适合播放持续时间比较短的声音文件,比如打斗声音,技能释放声音。

3.CCScale9Sprite

一种支持任意拉伸的图片,节省资源和内存空间。使用它需加上如下代码:

   1:  #include "cocos-ext-h"
   2:  using namespace cocos2d::extension;
<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>

然后需要如下设置:

属性—》配置属性—》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++的简单通信流程:

QQ拼音截图未命名

有一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读取工具。