cocos-2d-x学习笔记

Cocos-2dx学习笔记

1.create a sprite

code:

auto player=Sprite::create("player.png",rect(0,0,27,40));
player->setPosition(Point(x,y));
player->setscale(1.5);   //代表显示的倍数
this->addChild(player);   //讲player添加到背景

其中addChild()函数的定义如下:
函数原型:virtual void addChild(CCNode * child, int zOrder, int tag);

addChild()有三个参数:
第三个参数还没有用过

1、要加入场景的对象的指针,(可以是CCSprite*,CCLayer*,CCNode*等类型)

2、绘制层的顺序,默认参数值为0,表示最高优先层导入,该值越大表示该层在最后
加载(在最高一层),一般背景图层是首先加载,其他元素在加载在背景层上面。因
为背景在后面加载的话,会覆盖掉前面加载的元素,看不到想要的图层组合效果。

3、Tag标记。赋予类的某个方法中定义的局部变量(Node*类型对象,Sprite*
象等)一个标记号tag,如果以后在该类的其他方法中要访问这个变量时可以通过
调用函数 getChildByTag来取回该对象,从而方便使用这个对象进行想要的操作。这
样做的好处是:定义成类的成员变量会一直占用内存资源,而局部变量的生命周期
比成员变量短,节省系统资源,而且在外面就可以通过函数getChildByTagtag号
来获取这个对象。所以在以后编写Cocos2d代码过程中,尽量使用局部变量。

还有一个点就是Rect(x,y,width,height)是制造一个矩形包含了这个精灵。
x,y代表该精灵的坐标,后面两个不用说了。在后面的碰撞检测中我们将再次用
Rect

2.get the size of the screen

code:

auto VisibleSize=Director::getInstance()->getVisibleSize();

感觉基本上每一个场景和函数中都会用到这句

3.to generate a random number

CCRANDOM_0_1(): cocos2d中使用 ,范围是[0,1]
使用方法:

`float random = CCRANDOM_0_1() * 5; //[0,5]`  

CCRANDOM_0_1() 取值范围是[0,1],可以点进去速览定义发现这是一个宏,
实际是一个new c++ 11rand()函数
所以我们获得了一种可以随机产生物体的方法

    int minY = target->getContentSize().height / 2;
    int maxY = visibleSize.height - target->getContentSize().height / 2;
    int rangeY = maxY - minY;
    int actualY = (CCRANDOM_0_1() * rangeY) + minY;
    target->setPosition(Point(visibleSize.width + target->getContentSize().width / 2, actualY));
    this->addChild(target,0);

我们可以重复调用这段代码从而不断的随机产生精灵,注意有一点就是此
时会产生随机值为0的点,为了避免这种情况,需要在产生的数后面加min值

4.acion move
ScaleTo and ScaleBy

ScaleTo scaleto=ScaleTo::create(2.8f,0.4f,1.0f);
ScaleBy * scaleby = ScaleBy::create(2.8f, 0.4f, 1.0f);
最后需要一个精灵利用runAction执行这些动作
sprite->runAction(scaleto/scaleby);
这两个函数的create函数包含三个参数:第一个为动作执行时间,第二个为x轴拉伸倍数,第三个
为y轴拉伸倍数。每个数后面要加f后缀。
ScaleTo & ScaleBy区别是:ScaleTo不管你原先是否对精灵进行拉伸,
只是在原精灵的基础上拉伸指定倍数,ScaleBy是考虑到原来对精灵的拉伸,把原来精灵拉伸的倍数
也算到拉伸动画的倍数里面去。

MoveTo and MoveBy

MoveTo继承于MoveBy,两个函数的参数都是(float duration, const Vec2& deltaPosition),
第一个参数代表动作执行的时间,第二个是一个坐标,对于MoveBy()是以精灵当前坐标移动的,
MoveTo()是指移动到该坐标点。
code:
auto ActionMove=MoveTo::create(duration,point(x,y));
ActionMove->runAction(ActionMove);

Sequence and Spawn

Sequence也是继承actionInteval的类,它和Spawn都可以有多个参数,都是已经定义过的action
,最后一个参数为NULL,代表参数结束。区别是Sequence()是顺序执行这些动作,而Spawn()
是同时执行这些动作
code
“`c++
MoveBy * moveby = MoveBy::create(2.2f, Point(40, 20));
//创建一个弹跳的动作
JumpBy * jumpby = JumpBy::create(3.0f, Point(50, 1), 100, 1);
//创建一个旋转动作
RotateBy * rotateby = RotateBy::create(2.5f, 220, 10);

///创建组合动作将动作组合起来

//顺序执行

Action * action = Sequence::create(moveby, jumpby, rotateby, NULL);

//一起执行
Action * action = Spawn::create(moveby, jumpby, rotateby, NULL);
target1->runAction(action);

“`

GlobalZOrder & LocalZOder

在一开始的addChild()函数中提到的第二个参数即ZOrder问题:首先,对于LocalZOrder
简单的说,它关联到一个scene graph,而这个东西采用中序遍历访问所有的节点,所以值大的点
后被渲染,而在addchild函数中的就是LocalZOrder.而对于GlobalZOrder不赋值时默认为0,
当精灵的GlobalZOrder的值都为0时默认采用scene graph顺序渲染。这里可以使用setGlobalZOrder
和setLocalZOrder来单独设置该精灵的ZOrder值。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值