本文共 2645 字,大约阅读时间需要 8 分钟。
Cocos2d-x中提供了CCScaleTo和CCScaleBy两个拉伸动作,虽然两个都是拉伸动作,但是功能上还是有差别的,下面解释一下他们的区别。
CCScaleTo的create函数:
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两个方向上设置拉伸值而已。
CCScaleBy的create函数:
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是将精灵原来的拉伸值乘上相应的倍数。
对于纯文字的说明,想必大家可能不太明白,而且也会觉得很烦躁,毕竟我也是实现派,总喜欢用实例来说明和自己动手实践,所以我们还是通过下面的例子来说明吧。
创建一个名为ScaleAction的Cocos2d-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/