CCScaleTo与CCScaleBy比较

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://my.oschina.net/sel/blog/177024

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值