博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CCScaleTo与CCScaleBy比较
阅读量:4214 次
发布时间:2019-05-26

本文共 2645 字,大约阅读时间需要 8 分钟。

Cocos2d-x中提供了CCScaleToCCScaleBy两个拉伸动作,虽然两个都是拉伸动作,但是功能上还是有差别的,下面解释一下他们的区别。

CCScaleTocreate函数:

1
2
3
4
5
6
7
8
9
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两个方向上设置拉伸值而已。

CCScaleBycreate函数:

1
2
3
4
5
6
7
8
9
<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是将精灵原来的拉伸值乘上相应的倍数。

 

对于纯文字的说明,想必大家可能不太明白,而且也会觉得很烦躁,毕竟我也是实现派,总喜欢用实例来说明和自己动手实践,所以我们还是通过下面的例子来说明吧。

创建一个名为ScaleActionCocos2d-x项目后,我们修改HelloWorldScene.cpp里面init()函数的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
}

这时候我们可以先看一下运行效果:

然后我们修改上面的代码,加入两个动作:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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,我也是个初学者,所以希望大家能够一起交流,共同进步。谢谢。

原文地址:

转载地址:http://ztsmi.baihongyu.com/

你可能感兴趣的文章
编写苹果游戏中心应用程序(翻译 1.5 在游戏中心验证本地玩家)
查看>>
编写苹果游戏中心应用程序(翻译 1.6 获取本地玩家的信息)
查看>>
编写苹果游戏中心应用程序(翻译 1.7 在游戏中心添加朋友)
查看>>
编写苹果游戏中心应用程序(翻译 1.8 获取本地玩家的好友信息)
查看>>
WebGL自学教程《OpenGL ES 2.0编程指南》翻译——勘误表
查看>>
WebGL自学教程——WebGL示例:12. 要有光
查看>>
WebGL自学教程——WebGL示例:13.0 代码整理
查看>>
WebGL自学教程——WebGL示例:14.0 代码整理
查看>>
恶心的社会
查看>>
中国式危机公关9加1策略(第五章 慎用信息控制策略)
查看>>
展现自己的人生智慧
查看>>
原子性-synchronized 修饰的四种方式
查看>>
共享变量在线程中的可见性问题分析
查看>>
volatile具体使用场景
查看>>
线程安全性-有序性
查看>>
并发的优势与风险
查看>>
单例模式讨论
查看>>
编写一个初始化之后,不可修改的集合(比如:Map、List、Set等不可变对象)
查看>>
Java 开发四张技术栈图
查看>>
ThreadLocal在实际项目中的应用
查看>>