CCScaleTo与CCScaleBy比较
来源:互联网 发布:vs2013写c语言步骤 编辑:程序博客网 时间:2024/05/18 03:41
http://my.oschina.net/sel/blog/177024
Cocos2d-x中提供了CCScaleTo和CCScaleBy两个拉伸动作,虽然两个都是拉伸动作,但是功能上还是有差别的,下面解释一下他们的区别。
CCScaleTo的create函数:
static
CCScaleTo* CCScaleTo::create(
float
duration ,
float
sx ,
float
sy);
/*
* duration是动作执行持续时间,单位为秒;
* sx是X方向的拉伸值(注意,是拉伸值!);
* sy是Y方向的拉伸值;
*/
对于一般精灵创建时,拉伸值是1.0f,所以如果sx的值为0.5f时,精灵完成动作后,水平方向的拉伸值就会变为0.5f;如果sx的值为2.0f时,精灵完成动作后,水平方向拉伸值就会变为2.0f。
如果精灵原来的拉伸值为2.0f时,对于sx的值为0.5f时,精灵完成动作后,水平方向的拉伸值就会变为0.5f;如果sx的值为2.0f时,精灵完成动作后,水平方向拉伸值就会变为2.0f。
总的来说,CCScaleTo动作实现的其实就是Sprite::setScale函数的内容,只不过它是一个动作,而且还可以从X,Y两个方向上设置拉伸值而已。
CCScaleBy的create函数:
<span></span> Static CCScaleBy* CCScaleBy::create(
float
duration ,
float
sx ,
float
sy);
/*
* duration是动作执行持续时间
* sx是X方向的拉伸倍数(注意,现在是倍数!);
* sy是Y方向的拉伸倍数;
*/
对于倍数的话,想必大家也就很容易明白。
如果原来精灵的拉伸值是2.0f,对于sx的值为0.5f的情况,那么完成动作后,水平拉伸值变为1.0f;对于sx的值为2.0f的情况,那么完成动作后,水平拉甚至变为4.0f。
总的来说就是,CCScaleBy是将精灵原来的拉伸值乘上相应的倍数。
对于纯文字的说明,想必大家可能不太明白,而且也会觉得很烦躁,毕竟我也是实现派,总喜欢用实例来说明和自己动手实践,所以我们还是通过下面的例子来说明吧。
创建一个名为ScaleAction的Cocos2d-x项目后,我们修改HelloWorldScene.cpp里面init()函数的代码如下:
bool
MyHelloWorldScene::init(){
bool
bRet=
false
;
do
{
CC_BREAK_IF(!CCLayer::init());
/*
* 创建第一个精灵,并将拉伸值设为2.0f
*/
CCSprite* sprite1=CCSprite::create(
"fly.png"
);
sprite1->setPosition(ccp(100,200));
sprite1->setScale(2.0f);
this
->addChild(sprite1);
/*
* 创建第二个精灵,拉伸值同样设为2.0f
*/
CCSprite*sprite2=CCSprite::create(
"fly.png"
);
sprite2->setPosition(ccp(400,200));
sprite2->setScale(2.0f);
this
->addChild(sprite2);
bRet=
true
;
}
while
(0);
return
bRet;
}
这时候我们可以先看一下运行效果:
然后我们修改上面的代码,加入两个动作:bool
MyHelloWorldScene::init(){
bool
bRet=
false
;
do
{
CC_BREAK_IF(!CCLayer::init());
/*
* 创建第一个精灵,并将拉伸值设为2.0f
*/
CCSprite* sprite1=CCSprite::create(
"fly.png"
);
sprite1->setPosition(ccp(200,200));
sprite1->setScale(2.0f);
this
->addChild(sprite1);
/*
* 创建第二个精灵,拉伸值同样设为2.0f
*/
CCSprite*sprite2=CCSprite::create(
"fly.png"
);
sprite2->setPosition(ccp(600,200));
sprite2->setScale(2.0f);
this
->addChild(sprite2);
/*
* 创建CCScaleTo动作
* 动作持续时间设为3秒
* X方向拉伸值变为1.5
* Y方向拉伸值变为1.5
*/
CCScaleTo*scaleTo=CCScaleTo::create(3.0f,1.5f,1.5f);
/*
* 创建CCScaleBy动作
* 动作持续时间为3秒
* X方向拉伸为原来的1.5倍
* Y方向拉伸为原来的1.5倍
*/
CCScaleBy*scaleBy=CCScaleBy::create(3.0f,1.5f,1.5f);
sprite1->runAction(scaleTo);
sprite2->runAction(scaleBy);
bRet=
true
;
}
while
(0);
return
bRet;
}
由运行效果大家就可以看得出CCScaleTo将精灵的拉伸值由原来的2.0f变为1.5f,所以大小就等于原来的四分之三了;而CCScaleBy是将2.0f乘上1.5倍,所以大小就变为原来的1.5倍了。
本文就到此为止了,对于Coco2d-x,我也是个初学者,所以希望大家能够一起交流,共同进步。谢谢。
- CCScaleTo与CCScaleBy比较
- CCScaleTo与CCScaleBy比较
- CCScaleTo 与 CCScaleBy
- cocos2dx之CCScaleBy,CCScaleTo
- Cocos2d-x游戏开发——图片伸缩CCScaleTo\CCScaleBy
- cocos2d-x中CCSaleTo与CCScaleBy的详细区别(附加代码)
- Cocos2dx实现翻牌效果(CCScaleTo与CCOrbitCamera两种方式)
- Cocos2dx实现翻牌效果(CCScaleTo与CCOrbitCamera两种方式)
- equals比较与等值比较
- WebWork2与Struts比较
- WebWork2与Struts比较
- C 与Java比较- -
- RegisterStartupScript与RegisterClientScriptBlock比较
- 比较SDO与DAO
- Session 与 ViewState 比较
- 索引分析与比较
- Spring与struts比较
- C++与Java比较
- C++学习笔记(三)STL简介(二)
- 中文Ubuntu里用户目录里的路径改成英文
- 大家刚上线的新站如何做好seo站内优化,我谈谈自己的看法!
- 链表的基本操作应用2---remove
- iOS学习网站和博客地址收集
- CCScaleTo与CCScaleBy比较
- 正则表达式练习——将文本中的日期格式化为标准格式
- httpQuery 强大的网络下载函数
- 使用用户定义数组访问表单输入
- 黑马程序员--java高级视频_io输入与输出
- 如何用STUN协议搭建跨网络监控环境
- CentOS 6.6 安装Nginx
- 微信开发-实现jsapi ticket
- 【机房重构】构造方法