很短,但可以旋轉(zhuǎn)

說起來很不好意思,我竟然才知道cocos2dx 有OrbitCamera的這種接口(不是RotateTo),趕緊到testCpp里看了下,還真有,以前竟然沒注意到!我果然還是太單純了!
接口是醬紫的:
/** creates a OrbitCamera action with radius, delta-radius, z, deltaZ, x, deltaX */
static OrbitCamera* create(float t, float radius, float deltaRadius, float angleZ, float deltaAngleZ, float angleX, float deltaAngleX);
這參數(shù)多的讓我頭暈,到網(wǎng)上查了下意思,是用到了球坐標(biāo),參數(shù)分別是:旋轉(zhuǎn)的時(shí)間,起始半徑,半徑差,起始z角,旋轉(zhuǎn)z角差,起始x角,旋轉(zhuǎn)x角差。這解釋夠詳細(xì)了吧,可我還是沒全搞懂~~~~。沒辦法,自己創(chuàng)建了個(gè)小人來轉(zhuǎn)一轉(zhuǎn):
auto boy = Sprite::create("boy.png");
boy->setPosition(Point(300,300));
this->addChild(boy,2);
boy->runAction(OrbitCamera::create(2.0f,1,0,0,180,0,0));
更改參數(shù)反復(fù)運(yùn)行后找到了那么點(diǎn)門道:
第一個(gè)參數(shù)是旋轉(zhuǎn)時(shí)間這個(gè)就不用說了;radius起始半徑,只要大于0效果都一樣;deltaRadius半徑差是什么東東,沒看到啥門道來;angleZ起始Z角,就是看你要從哪個(gè)角度開始旋轉(zhuǎn)(水平方向的),deltaAngleZ旋轉(zhuǎn)Z角差,也就是要讓圖片旋轉(zhuǎn)幾度,360是一圈;至于起始X角和起始X角差,就是控制豎直方向的旋轉(zhuǎn)。
發(fā)現(xiàn)并沒有一個(gè)Y角差啥的,個(gè)人分析是x,y是處于一個(gè)平面,該平面垂直Z,所以X,Y旋轉(zhuǎn)的效果是一樣的。(如果你有更深入的看法,一定要告訴我?。。。?/strong>
下面就做個(gè)旋轉(zhuǎn)的例子吧:
本來是要做旋轉(zhuǎn)的卡牌,這樣起碼名字看起來高端大氣上檔次,但是考慮到?jīng)]有卡牌的素材(如果你有的話,請務(wù)必發(fā)給我一些),所以我就弄成旋轉(zhuǎn)的小人,我們都知道卡牌都有正面和反面,這樣轉(zhuǎn)才有旋轉(zhuǎn)的效果,所以我們的小人也該有正反,正面是boy圖片,背面就是girl的圖片??吹竭@里有人要吐槽了:boy背面怎么會(huì)是girl?你坑誰?我只想說:淡定點(diǎn)騷年,常言道,每個(gè)成功的男淫背后都靠著一個(gè)女人,所以,你別亂猜測我沒有boy的背面圖,我只是...反正別亂想。
流程如下:
1、創(chuàng)建boy和girl兩個(gè)精靈,初始位置要一樣,girl一開始要隱身。讓他倆同時(shí)開始旋轉(zhuǎn)!2s為1圈,即360°。
2、當(dāng)boy旋轉(zhuǎn)到90°時(shí),也就是0.5s后要隱身,girl顯示出來了;
3、girl旋轉(zhuǎn)1s,也就是180°后,girl隱身,boy顯示出來了。這樣一直轉(zhuǎn)下去。
下面看代碼實(shí)現(xiàn):
auto boy = Sprite::create("boy.png");
boy->setPosition(Point(300,300));
this->addChild(boy,2);
auto girl = Sprite::create("girl_1.png");
girl->setPosition(Point(300,300));
girl->setVisible(false);//一開始設(shè)置為不可見
this->addChild(girl,2);
auto seq1 = Sequence::create(DelayTime::create(0.5f),
Hide::create(),//0.5s后隱身,
DelayTime::create(1.0f),
Show::create(),//再過1s后現(xiàn)身
nullptr);
auto rotate1 = OrbitCamera::create(2.0f,1,0,0,360,0,0);
auto seq2 = Sequence::create(DelayTime::create(0.5f),
Show::create(),//0.5s后現(xiàn)身
DelayTime::create(1.0f),
Hide::create(),//再過1s后隱身
nullptr);
auto rotate2 = rotate1->clone();
boy->runAction(RepeatForever::create(Spawn::create(rotate1,seq1,nullptr)));
girl->runAction(RepeatForever::create(Spawn::create(rotate2,seq2,nullptr)));
恩,運(yùn)行如圖:


順便提下Show與Hide兩個(gè)接口,它倆類似我們熟知的FadeIn,F(xiàn)adeOut,讓對象隱身或者顯示。但Fade需要時(shí)間參數(shù),而Show,Hide不用。還是蠻好用的
就講到這里吧。
尊重原創(chuàng),轉(zhuǎn)載請注明來源:https://blog.csdn.net/star530/article/details/24836121