cocos2d-x

1.环境
在http://www.cocos2d-x.org/下载cocos2d-2.0-x-2.0.2.zip,解压
安装项目模板:cd到/Users/gzty1/x_workspace/cocos2d-2.0-x-2.0.2,
在安装模板之前,先退出Xcode,然后打开一个终端,并输入下面的命令:
sudo  ./install-templates-xcode.sh -f
参考 http://www.cocoachina.com/gamedev/gameengine/2012/0428/4206.html

cocos2d-iphone环境搭建
  第一步:下载cocos2d-iphone最新版本;地址:http://code.google.com/p/cocos2d-iphone/downloads/list (当前最新2.1-beta)
      第二步:下载完成之后解压;
      第三步:启动终端;
      第四步:先利用cd命令进入cocos2d引擎文件夹,然后“./install-templates.sh -u”命令开始安装cocos2d
http://blog.csdn.net/kepoon/article/details/7634013


2.cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例
http://blog.csdn.net/column/details/cocos2d-x-study.html

3.Cocos2d-x 中文文档
http://cn.cocos2d-x.org/document
用过的类
CCApplication
CCDirector
CCEGLView
CCScene
CCLayer
CCMenuItemImage
CCMenu
CCLabelTTF
CCSize
CCSprite
b2World
CCTexture2D
b2Body
b2Vec2:向量
b2Mat22:一个由两个b2Vec2组成的2*2方阵,可以直接由两个b2Vec2(col1、col2)构造或者由一个角度值构造。
b2AABB:就是一个盒子,由两个向量组成,一个为minVertex是最小顶点,另一个为maxVertex是最大顶点,通过这两个顶点来表示最为普通的AABB框。
b2ShapeDef:形状定义,用一个b2ShapeType型量type来表示形状类型,用函数指针来表示用户数据(userdata),用一个b2Vec2向量localPosition来表示当前位置,用float32的localRotation来表示当前角度,用float32的friction、density、restitution来表示摩擦力、密度、弹性系数,用uint16的categoryBits和maskBits来表示碰撞位及位标识(可以用来过滤一些碰撞),用int16的groupIndex来表示组号,这个组号可以用来过滤还比位标识优先。
相关形状定义:b2CircleDef,b2BoxDef,b2PolyDef
b2BodyDef:刚体定义结构,由一个函数指针userData来表示用户数据,一组类型为b2ShapeDef*指针数组shapes来表示形状队列,目前形状数最大支持64个,用一个b2Vec2向量position来表示当前位置,用类型为float32的量rotation来表示当前角度,用类型为b2Vec2的量linearVelocity表示线速度,用类型为float32的angularVelocity来表示角速度,用类型为float32的量linearDamping来表示线性阻尼,用类型为float32的量angularDamping来表示角阻抗,用类型为bool的allowSleep 来表示是否可以允许休眠,用一个类型为bool的isSleeping来表示是否正在休眠,用一个类型为bool的量preventRotation来表示是否防止旋转。


4.论坛
http://cn.cocos2d-x.org/bbs/forum.php

5.了解
基于cocos2d-x引擎的游戏框架设计
http://www.programmer.com.cn/10845/

6.物理引擎
  在游戏中加入物理引擎可以使我们的游戏更加真实,cocos2d自带了两种物理引擎:Box2d和Chipmunk,这两种引擎都是2D游戏设计,Box2d是用C++来写的,而Chipmunk是通过C来写的。
   Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,可以把它和游戏中的其他元素区分开。
几个概念:
世界(b2World):世界就是一个环境,所有物理运算都在这个里面进行。
形状定义(b2ShapeDef):定义对象的样子,用来确定碰撞。
刚体定义(b2BodyDef):刚体定义类
刚体(b2Body):刚体就是物理引擎里面的对象,它可以受力的作用进行当前位置的变化旋转等。在世界中使用的所有物体都是刚体。
约束:一个约束就是消除物体自由度的物理连接。在 2D 中,一个物体有 3 个自由度。如果把一个物体钉在墙上(像摆锤那样),就把它约束到了墙上。此物体就只能绕着这个钉子旋转,所以这个约束消除了它 2 个自由度。还有一种不须创建的接触约束,一个防止刚体穿透,以及用于模拟摩擦和恢复的特殊约束。
链接:链接可以联系多个刚体,使得刚体之间相互影响。链接还支持限制和马达,限制就是限制物体运动的角度,马达就是依照关节中的限制来约束物体。
关联:body->CreateFixture(&fixtureDef); 关联是一种附加在刚体上的属性,一个刚体可以有多个关联。


http://blog.csdn.net/vickylh/article/details/5545212


7.b2World
  b2World是box2d中的物理世界,是一个包含了各种物体(body,物理体,或者叫刚体),固定附着物(fixture,形状与物理体的绑定物)以及各种约束体(比如关节),并使其在当中完成各种交互的这样一个集合体。
  世界是遵循物理的空间,所有都存在于世界中,可以创建多个世界,但很少这样做。
  这个世界可能存在重力,所以,在创建这个世界的时候我们需要传一个描述重力的二维向量(v2对象),这取决于视角设定,横版游戏需要一个重力.如果是顶视图,可能就不需要重力了.
  创建世界需要两个步骤,一是生成重力向量,二是根据重力生成世界对象
//生成重力向量
b2Vec2 gravity;
gravity.Set(0.0f, -10.0f);
//生成世界对象
bool doSleep = true;
world = new b2World(gravity);
world->SetAllowSleeping(doSleep);
world->SetContinuousPhysics(true);


http://blog.lunastudio.cn/?p=156

cocos2d中使用box2d的过程
http://blog.csdn.net/jiarusun000/article/details/6947760

b2World中左下角是(0,0)??

8.b2Body
刚体有三种类型
staticBody,静态刚体(即不受力影响的物体,比如边界墙),
dynamicBody,动态刚体(完全模拟真实物理情况的物体),
kinematicBody,运动刚体(这是2.1版新增的一个类型,和静态刚体相比,就是它可以移动.它也同样不会被环境力所影响)
首先定义一个描述类,然后再根据描述类通过世界创建某个对象。
创建刚体时需要有两个步骤,一是创建一个刚体定义,二是根据刚体定义生成刚体。
//定义刚体
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(screenSize.width/2/PTM_RATIO, screenSize.height/2/PTM_RATIO);
//生成刚体
b2Body* groundBody = world->CreateBody(&groundBodyDef);

9.刚体单位详解
//Pixel to metres ratio. Box2D uses metres as the unit for measurement. 
//This ratio defines how many pixels correspond to 1 Box2D "metre" 
//Box2D is optimized for objects of 1x1 metre therefore it makes sense 
//to define the ratio so that your most common object type is 1x1 metre. 
#define PTM_RATIO 32
对Box2D来 说,所有的距离是以米为单位的,所有的物体都是以公斤为单位的,时间则是以秒为单位的,PTM_RATIO用于定义32个像素在Box2D世界中等同于1米。一个有32像素宽和高的 盒子形状的刚体等同于1米宽和高的物体。
http://blog.sina.com.cn/s/blog_7c336a8301014e2o.html

10.Fixture
     固定装置

11.ios
iOS设备不支持超过60帧每秒的帧率,它的屏幕刷新率被锁定在60帧每秒(Hz)。如果强迫cocos2d以超过60帧每秒的速度进行渲染,在最好的情况下,可能会不产生任何效果。在最差的情况下,你的帧率可能反而会下降。如果想让cocos2d运行在最快的帧率下,把动画间隔设置为1.0/60。

12.cocos2d-iPhone
http://www.cocos2d-iphone.org/
http://blog.csdn.net/a287971/article/details/7631684
http://www.cocoachina.com/bbs/simple/?t55155.html
http://cocos2d-central.com/files/file/2-source-code-for-the-learn-iphone-and-ipad-cocos2d-game-development-book/

13, cocos2d-x2.0中CCArray中发现的问题
       containsObject和indexOfObject函数内部,只是做了对象地址比较,并没有使用isEqual函数。
       CCArray和CCSet的ContainObject方法有问题,现修改CCArray里面的方法使之有效
/** Returns index of first occurrence of object, CC_INVALID_INDEX if object not found. */
unsigned int ccArrayGetIndexOfObject(ccArray *arr, CCObject* object)
{
for(unsigned int i = 0; i < arr->num; i++)
    {
        //old
//if( arr->arr[i] == object ) return i;
        //modify by wwk
        if( (object && object->isEqual(arr->arr[i])) || (!object && !arr->arr[i])) return i;
    }

return CC_INVALID_INDEX;
}

并且同时要修改解压的cocos2dx目标下的 cocos2dx/support/data_support/ccCArray.cpp 中的代码

14.cocos2d-x的首选开发调试平台
参考http://cn.cocos2d-x.org/bbs/forum.php?mod=viewthread&tid=1052&extra=&page=1

猜你喜欢

转载自wwk.iteye.com/blog/1676035