-------------------------------------------------------------2015-1-16--------------------------------------------------------
Cocos2d-x项目创建:
路径:H:\AGame_Dev\Cocos2d-x\cocos2d-x-3.2\tools\cocos2d-console\bin
命令:cocos new 项目名 -p 包名
-l 语言(cpp/lua/js)
-d 保存路径
ProgressTimer-进度条
类:ProgressTimer
TYPE:BAR/RADIAl 线性/时钟
auto
proTimer
=
CCProgressTimer
::
create
(
Sprite
::
create
(
"Test.jpg"
));
proTimer
->
setType
(
ProgressTimer
::
Type
::
BAR
);
proTimer
->
setPosition
(
Vec2
(
visibleSize
.
width
/
2
,
visibleSize
.
height
/
2
));
proTimer
->
setPercentage
(
0.0f
);
proTimer
->
setBarChangeRate
(
Vec2
(
1
,
0
));
//用来设置进度条动画方向的,(1,0)表示横方向,(0,1)表示纵方向。
proTimer
->
setMidpoint
(
Vec2
(
0.5
,
0.5
));
auto
proTo
=
ProgressFromTo
::
create
(
5
,
0
,
100
);
proTimer
->
runAction
(
RepeatForever
::
create
(
proTo
));
this
->
addChild
(
proTimer
);
配合setPercentage或ProgressTo等方法改变进度
proTimer
->
setMidpoint
(
Vec2
(
0.5
,
0.5
));
是设置进度条的起始点,不同变化类型设置不同,在横向变化中只需要设置第一个参数表示x轴的变化位置
在radial类型中一般设置为(0.5,0.5)。
BAR:
RADIAL:
-------------------------------------------------------------2015-1-17--------------------------------------------------------
Action: 瞬时动作与延时动作
一看基本就知道怎么用,注意四个动作——行拆分、列拆分、%序列
地图:
TileMap
-------------------------------------------------------------2015-1-23--------------------------------------------------------
C++ 函数宏
可以带参数的宏(替换),cocos2d-x中常见了create宏函数,C++中宏只能是一条语句,故用“\”换行符换行
#define
CREATE_FUNC
(__TYPE__) \
static
__TYPE__* create() \
{ \
__TYPE__ *pRet =
new
__TYPE__(); \
if
(pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return
pRet; \
} \
else
\
{ \
delete
pRet; \
pRet =
NULL
; \
return
NULL
; \
} \
}
-------------------------------------------------------------2015-1-24--------------------------------------------------------
Sence(场景)
场景本身没有意义,可以理解为一个空壳,向其中添加精灵、层、菜单后才有意义;3.0版本后可以创建物理场景即一个物理世界。
第一次显示场景:Director::getInstance()->runwithScene(Scene*)
切换场景: Director::getInstance()->replaceScene(Scene*)
切换特效: Director::getInstance()->replaceScene(TransitonJumpZoom(float duriation,Scene* xxx::creatSence))
特效:还有许多种,要用的时候再去选择
压栈: Director::getInstance()->pushSence()——暂停当前场景并保存于内存中,显示新场景
出栈: Director::getInstance()->popSence()——恢复栈顶场景,销毁当前场景
注:由于Sence占内存空间比较大,一般不用压栈、出栈,改用向当前层添加新Layer!
Lyaer(层):
无法独立于场景而存在,一个场景可添加多个Layer而又不相互影响,比如:背景层与人物层,背景层移动人物层不动
Sprite(精灵):
精灵仅用于图片的表现。在游戏开发中,英雄、敌人等对象(Class)一般包含Sprite成员用于图像显示,若该对象还有攻击力、血量等属性,也可用成员变量表示
Menu(菜单)
类似于Sence本身无意义,用于包含MenuItemXXX,可点击;
注意在结尾要传NULL参数
auto
valStr =
Value
(
"我是Value字符串"
);
Label
* label =
Label
::create(valStr.asString().c_str(),
"Arial"
, 30);
// 会乱码
auto
menuItemLabel =
MenuItemLabel
::create(label);
auto
menu =
Menu
::create(menuItemLabel,
NULL
);
//一定要写NULL
Value:
是Cocos2d-x提供的数据类,可以存放所以基本数据类型,还有int、float、stiring之间了类型转换功能(x.asxXX)
Vector(队列):
是Cocos2d-x提供的类,用于同一类型变量的顺序存放,但并不是数据结构里的队列
Vector
<
Label
*> vec;
vec.pushBack(
Label
::create(
"labelNo.1"
,
"Airal"
, 30));
vec.pushBack(
Label
::create(
"labelNo.2"
,
"Airal"
, 30));
vec.insert(0,
Label
::create(
"labelNo.3"
,
"Airal"
, 30));
//插入任意位置
Label
* zero = vec.at(1);
//取出后再取1就为NULL
zero->setPosition(200, 200);
this
->addChild(zero, 1);
Label
* front = vec.front();
//队列中第一个元素,取出后再取就为NULL
front->setPosition(300, 300);
this
->addChild(front,1);
-------------------------------------------------------------2015-1-25--------------------------------------------------------
音乐播放:
//背景音乐播放,只适用于播放时间较长的音乐
CocosDenshion::
SimpleAudioEngine
::getInstance()->playBackgroundMusic(
"D:\\KuGou\\爸爸去哪儿 - 么么哒.mp3"
,
false
);
//效果音播放
CocosDenshion::
SimpleAudioEngine
::getInstance()->playEffect(
"D:\\KuGou\\music.mp3"
);
预加载是为了减少加载规模较大的文件时的等待时间,进行提前加载,proloadxXX();
-------------------------------------------------------------2015-1-26--------------------------------------------------------
CosoStudio2.x版本在Cosos2d-x3.3中的使用
【教程】CocosStudio2.x发布的资源在2d-x中的使用简介
动作MoveTo/By、ScaleTo/By
MoveTo是直接移动到指定点,MoveBy是在当前的坐标上分别在X、Y方向上加上指定点的分量
ScaleTo是直接变为原始大小的多少倍,ScaleBy是在当前倍数下进行缩放(当前0.5倍,By4.0f后就是2倍)基数是原始大小
卡牌翻转效果:
auto
scaleTo =
ScaleTo
::create(3.0f, -1.0f, 1.0f);
贝塞尔曲线(BezierTo/By) p79
Spawn——让动作一起执行
Sequence——让动作按顺序执行 参数都要以NULL结尾
动作监听——lambde函数
lambde属于C++,相当于匿名内部类
格式:[&/=](){}
;
[ ]——表示外部变量
无法在lambde函数内部使用
[&]——表示将外部作用域中的变量采用
引用的方式在lambde函数体{}内部使用;
[=]——表示将外部作用域中的变量采用
拷贝的方式在lambde函数体{}内部使用;
[=,&xiaoRuo]——表示xiaoRuo变量采用引用的方式,其余拷贝;
监听实现——scaleTo结束时触发lambde
auto
scaleBy =
ScaleBy
::create(3.0f, -1.0f, 1.0f);
auto
lamFunc = [&](){
auto
lab =
Label
::create(
"Lambde函数!"
,
"宋体"
, 30);
lab->setPosition(
Vec2
(500, 500));
this
->addChild(lab);
};
auto
callFun =
CallFunc
::create(lamFunc);
auto
sequence =
Sequence
::create(scaleBy, callFun,
NULL
);
picture->runAction(sequence);
触摸事件监听:
-------------------------------------------------------------2015-2-2--------------------------------------------------------
大量精灵绘制
auto-batching——自动批处理,可大幅减少绘制批次。条件:
1、属于同一张图片(纹理、混合函数ID、shader都相同)
2、在最终绘制队列中连续
控制绘制顺序的三个变量:
GlobalZOrder>localZOrder>orderOfArrival
GlobalZOrder与localZOrder数值越大越先被绘制,而orderOfArrival则相反;
动画的创建:
动画——多张连续图片的快速切换
1、为每一张图片创建SpriteFrame对象
1.1
SpriteFrame
* pic =
SpriteFrame
::create(StringUtils::format(
"girl%d.png"
,i),
Rect
(0,0,100,100));
1.2(推荐)
SpriteFrameCache * cache = SpriteFrameCache ::getInstance();cache->addSpriteFramesWithFile( "girls.plist" , "girls.png" );SpriteFrame * pic2 = cache->getSpriteFrameByName( "xxx.png" );
2、将每一个SpriteFrame加入队列中
Vector
<
SpriteFrame
*> vec;
vec.pushBack(pic2);
3、创建Animation
Animation
*
animation =
Animation
::createWithSpriteFrames(vec);
4、创建Animate
Animate
* animate =
Animate
::create(animation);
Animate也是Action直接run;
-------------------------------------------------------------2015-2-3--------------------------------------------------------
问题:在TiledMap中一个图层的瓦片图片只能来自一个瓦片集(一张图片),否则只会显示后添加瓦片集的瓦片图形
解决方法:新创建一个图层,然后添加其它瓦片集的瓦片
--------