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);//窗口缩放,只对计算机平台有效,对手机无效

.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; }

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);//只有执行这一步,才能让场景类显示出来

.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; }


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

.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; }

二 、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:  };

.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; }

.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; }

2.CocosDenshion::SimpleAudioEngine::sharedEngine()

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

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

3.CCScale9Sprite

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

   1:  #include "cocos-ext-h"
   2:  using namespace cocos2d::extension;

.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; }


然后需要如下设置:

属性—》配置属性—》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读取工具。

时间: 2024-10-07 07:04:37

cocos2d-x初学笔记的相关文章

初学笔记(C#事件)

1.声明事件      EventHandler是一个预定义的委托,它定义了一个无返回值的方法.在 .Net Fromwork中,他的格式: public  delegate  void EventHandler (Object  sender, EvenArgs  e) 其中sender的类型为Object,表示时间发布者本身,e用来传递事件的相关信息,数据类型为EvenArgs及其派生类. 标准的EvenArgs并不包含任何事件数据, 因此EventHandler专用于表示不生成数据的事件的

lisp初学笔记

学习任何知识,都不能仅仅把它们当做知识,更重要的是要把它们在实际编程实践中应用起来,持有这样的学习观念才不至于让你变成学究式的活字典,对于程序员来说这一点尤其重要,你学习的任何语言知识,一定要在实际的程序编写过程中不断练习.不停实践,纸上得来终觉浅,绝知此事须躬行. LispBox 实际上是把 Emacs.Slime.Clozure CL 以及 QuickLisp 集成到一起,使用 LispBox 做开发环境就相当于选择了 Emacs 作为编辑器.选择 Slime 作为交互界面,那么一定要熟悉

flex入门--初学笔记1

环境:flashBuilder + eclipse 4.2 基本控件: 1 <mx:Script> 2 <![CDATA[ 3 import mx.controls.Alert; 4 public function showMsg(msg:String):void{ 5 mx.controls.Alert.show(msg); 6 } 7 ]]> 8 </mx:Script> 9 <mx:Panel title="常用控件" width=&qu

AS3 初学笔记 actionscript-之变量

变量 变量可用来存储程序中使用的值.要声明变量,必须将 var 语句和变量名结合使用.在 ActionScript 2.0 中,只有当您使用类 型注释时,才需要使用 var 语句.在 ActionScript 3.0 中,总是需要使用 var 语句.例如,下面的 ActionScript 行声明一个名 为 i 的变量: var i; 如果在声明变量时省略了 var 语句,则在严格模式下会出现编译器错误,在标准模式下会出现运行时错误.例如,如果以前未 定义变量 i,则下面的代码行将产生错误: i;

js&#39;初学笔记

之前看过一个博主说的学习前端养成写博客的习惯,我慢慢学着在上面写点东西,记录我的学习. 这段时间把之前学的js基础补上一点,学了一些对数组和字符的操作,split(),将字符串变成数组.join(),数组变为字符串.conca()连接数组. charAt(),charCodeAt(),formCharCode(),slice(start,end),substring(),substr(start,length);indexOf(); 有一些我就不多说了,在这里记下来,以后看看,有兴趣可以看看山冈

网站初学笔记3-HTML实用元素

HTML中链接邮件地址: <!DOCTYPE html><html><body> <address>Written by <a href="mailto:[email protected]">Donald Duck</a>.<br> Visit us at:<br>Example.com<br>Box 564, Disneyland<br>USA</addres

TensorFlow官方文档MNIST初学笔记[二]

TensorFlow官方文档MNIST初学笔记[二] MNIST是一个简单的计算机视觉数据集, 它还包括每个图像的标签, 每个图像是28像素乘以28像素, 我们可以把这个数组变成一个28×28 = 784个数字的向量.MNIST只是一个784维向量空间中的一个点.mnist.train.images具有形状的张量(n维阵列)[55000, 784] 第一维度是图像列表中的索引,第二维度是每个图像中每个像素的索引.对于特定图像中的特定像素,张量中的每个条目是0和1之间的像素强度. MNIST中的每

网站初学笔记3-HTML实用元素2

HTML 链接 - name 属性 name 属性规定锚(anchor)的名称.您可以使用 name 属性创建 HTML 页面中的书签.书签不会以任何特殊方式显示,它对读者是不可见的.当使用命名锚(named anchors)时,我们可以创建直接跳至该命名锚(比如页面中某个小节)的链接,这样使用者就无需不停地滚动页面来寻找他们需要的信息了. 首先,我们在 HTML 文档中对锚进行命名(创建一个书签):<a name="tips">基本的注意事项 - 有用的提示</a&

网站初学笔记1

什么是 WWW?WWW 指万维网(World Wide Web)万维网常被称为WebWeb 是由遍布全球的计算机所组成的网络所有 Web 中的计算机都可以彼此通信所有这些计算机都使用名为 HTTP 的通信标准 WWW 如何工作?Web 信息存储于被称为网页的文档中网页是存储于被称为 Web 服务器的计算机上读取网页的计算机称为 Web 客户端Web 客户端通过称为浏览器的程序来查看网页主要的浏览器有 Internet Explorer 和 Mozilla Firefox 浏览器如何读取页面?浏览

网站初学笔记3-HTML实用元素4

<!DOCTYPE> 声明Web 世界中存在许多不同的文档.只有了解文档的类型,浏览器才能正确地显示文档.HTML 也有多个不同的版本,只有完全明白页面中使用的确切 HTML 版本,浏览器才能完全正确地显示出 HTML 页面.这就是 <!DOCTYPE> 的用处.<!DOCTYPE> 不是 HTML 标签.它为浏览器提供一项信息(声明),即 HTML 是用什么版本编写的. HTML 中的预留字符必须被替换为字符实体. HTML 实体在 HTML 中,某些字符是预留的.在