知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?
Cocos2dx實(shí)現(xiàn)翻牌效果(CCScaleTo與CCOrbitCamera兩種
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):102
開端在網(wǎng)上找解決的辦法找了良久,根本上就是一種解決籌劃,就是用CCOrbitCamera這個Action類來模仿實(shí)現(xiàn)翻牌的效不雅。
然則我在應(yīng)用的效不雅中始終不如人意。
用CCOrbitCamera類實(shí)現(xiàn)倒是能實(shí)現(xiàn),然則如不雅將牌移動到左上、左下或者其他不在屏幕中間的地位那這個效不雅就不可了,翻牌的地位就缺點(diǎn)了,類似3D的了。
找了半天終于知道是什么原因了,Cocos2dX瑯綾擎有如許的一句話,
CCDirector::sharedDirector()->setProjection(kCCDirectorProjection3D);
就是這個3D,Cocos2DX支撐透視投影和正交投影兩種模式,于是乎我把kCCDirectorProjection3D改成kCCDirectorProjection2D,對了,有感到了。
如許一設(shè)置翻牌的動作就不是3D感了,就是正常的┞封種翻牌的感到了。
然則項(xiàng)目中其他的圖片出現(xiàn)懂得齒,這就不克不及忍了。
在用了很多辦法都不克不及清除鋸齒的時刻我測驗(yàn)測驗(yàn)到去讀Cocos2dx關(guān)于設(shè)置setProjection函數(shù)的內(nèi)容,看是否可以或許將鋸齒避免,讓翻改變得天然。
最終我掉敗了,確切照樣太菜了不可。
我于是找替代籌劃來實(shí)現(xiàn)翻牌的動作,就找到了CCScaleTo來實(shí)現(xiàn),這過程確切照樣比較艱辛。
下面我把兩種籌劃的關(guān)鍵代碼都貼出來,便利大年夜家看看吧。
1. 起首照樣用CCOrbitCamera類實(shí)現(xiàn)翻牌的效不雅(我封裝成了一個函數(shù))。
這瑯綾擎有個-90,-360是扭轉(zhuǎn)的角度,可以本身測驗(yàn)測驗(yàn)改了看會有什么效不雅。
void HelloWorld::showObtAniUseScaleTo(CCSize visibleSize) { if (m_pCardFront != NULL){ this->removeChild(m_pCardFront); } if (m_pCardBack != NULL){ this->removeChild(m_pCardBack); } // 加載牌的┞俘反兩面 m_pCardFront = CCSprite::create("CardFront.png"); m_pCardBack = CCSprite::create("CardBack.png"); // 把牌反轉(zhuǎn)了 m_pCardFront->setFlipX(true); m_pCardFront->setPosition(ccp(visibleSize.width/2-100,visibleSize.height/2+100)); m_pCardBack->setPosition(ccp(visibleSize.width/2-100,visibleSize.height/2+100)); this->addChild(m_pCardFront,5); this->addChild(m_pCardBack,5); // 動畫序列(延時,隱蔽,延時,隱蔽) CCSequence *pBackSeq = CCSequence::create(CCDelayTime::create(0.5f),CCHide::create(),CCDelayTime::create(0.5f),CCHide::create(),NULL); CCScaleTo* pScaleBack = CCScaleTo::create(1.2f,-1,1); CCSpawn* pSpawnBack = CCSpawn::create(pBackSeq,pScaleBack,NULL); m_pCardBack->runAction(pSpawnBack); // 動畫序列(延時,顯示,延時,顯示) CCSequence *pFrontSeq = CCSequence::create(CCDelayTime::create(0.5f),CCShow::create(),CCDelayTime::create(0.5f),CCShow::create(),NULL); CCScaleTo* pScaleFront = CCScaleTo::create(1.2f,-1,1); CCSpawn* pSpawnFront = CCSpawn::create(pFrontSeq,pScaleFront,NULL); m_pCardFront->runAction(pSpawnFront); }
下面是運(yùn)行的效不雅圖:
因?yàn)轫?xiàng)目須要實(shí)現(xiàn)翻牌的效不雅,所以本身在完成的過程中將這篇文┞仿寫下來,想想照樣認(rèn)為有點(diǎn)艱辛。
[img]http://img.blog.csdn.net/20150106165133718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGluZ2hxYWxleA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
[img]http://img.blog.csdn.net/20150106165220109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGluZ2hxYWxleA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
就是如許由后頭翻轉(zhuǎn)到正面,但留意,在“3D模式”下,position是設(shè)置在屏幕中心才會有這個效不雅,如不雅設(shè)置在其他地位就不是這個效不雅了,可以本身嘗嘗。
如不雅設(shè)置成2D模式就不會有這個情況了,然則不知道你本身的項(xiàng)目圖片會不會出現(xiàn)鋸齒,出現(xiàn)鋸齒的情況我沒有找到解決的辦法。
2. 用CCScaleTo實(shí)現(xiàn)的翻轉(zhuǎn)
就是因?yàn)橛袖忼X的情況出現(xiàn)我又沒解決到,所以我在需找替代籌劃,于是乎找到了CCScaleTo來實(shí)現(xiàn)。
下面是關(guān)鍵的代碼:
這里重要就是要先把牌的┞俘面setFlipX(true)這個函數(shù)來翻轉(zhuǎn)一下,然后再繞Y軸模仿個扭轉(zhuǎn)出來,如不雅照樣不怎么清跋扈還請看官本身寫代碼嘗嘗效不雅。
void HelloWorld::showObtAniU搜刮引擎優(yōu)化rbitCamera( CCSize visibleSize ) { if (m_pCardFront != NULL){ this->removeChild(m_pCardFront); } if (m_pCardBack != NULL){ this->removeChild(m_pCardBack); } // 加載牌的┞俘反兩面 m_pCardFront = CCSprite::create("CardFront.png"); m_pCardBack = CCSprite::create("CardBack.png"); /*m_pCardFront->setPosition(ccp(visibleSize.width/2-100,visibleSize.height/2+100)); m_pCardBack->setPosition(ccp(visibleSize.width/2-100,visibleSize.height/2+100));*/ m_pCardFront->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); m_pCardBack->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); this->addChild(m_pCardFront,5); this->addChild(m_pCardBack,5); // 動畫序列(延時,顯示,延時,隱蔽) CCSequence *pBackSeq = CCSequence::create(CCDelayTime::create(0.5f),CCShow::create(),CCDelayTime::create(0.5f),CCHide::create(),NULL); //持續(xù)時光、半徑初始值、半徑增量、仰角初始值、仰角增量、離x軸的偏移角、離x軸的偏移角的增量 CCOrbitCamera *pBackCamera = CCOrbitCamera::create(1.0f, 1, 0, 0, -90, 0, 0); CCSpawn* pSpawnBack = CCSpawn::create(pBackSeq,pBackCamera,NULL); m_pCardBack->runAction(pSpawnBack); // 動畫序列(延時,隱蔽,延時,顯示) CCSequence *pFrontSeq = CCSequence::create(CCDelayTime::create(0.5f),CCHide::create(),CCDelayTime::create(0.5f),CCShow::create(),NULL); CCOrbitCamera *pLandCamera = CCOrbitCamera::create(1.2f, 1, 0, 0, -360, 0, 0); CCSpawn* pSpawnFront = CCSpawn::create(pFrontSeq,pLandCamera,NULL); m_pCardFront->runAction(pSpawnFront); }膳綾擎的注釋寫得比較詳盡了,其實(shí)不難,就是后頭顯示的時刻把正面隱蔽,正面顯示了把后頭隱蔽,就是這么個事。
CCScaleTo參數(shù)的設(shè)置重要就是為了繞Y來扭轉(zhuǎn),具體的各類情況也可以本身嘗嘗效不雅,實(shí)踐是考驗(yàn)真諦的獨(dú)一標(biāo)準(zhǔn)嘛,可以設(shè)置成(1,1),(1,-1)等等嘗嘗效不雅。
好了,差不多就是如許一個情況。
可以本身嘗嘗寫個HelloWord調(diào)效不雅,加深印象。
相關(guān)案例查看更多
相關(guān)閱讀
- 百度快速排名
- 搜索引擎優(yōu)化
- 昆明軟件公司
- 迪慶小程序開發(fā)
- 云南軟件定制
- 百度小程序開發(fā)
- 網(wǎng)絡(luò)公司
- 網(wǎng)站建設(shè)專業(yè)品牌
- 網(wǎng)站搭建
- 做小程序被騙
- 云南小程序開發(fā)課程
- 汽車報(bào)廢管理系統(tǒng)
- 報(bào)廢車管理系統(tǒng)
- 云南做百度小程序的公司
- 云南小程序開發(fā)費(fèi)用
- 汽車拆解系統(tǒng)
- 汽車拆解管理軟件
- 云南網(wǎng)站建設(shè)特性
- 網(wǎng)站制作哪家好
- 小程序開發(fā)公司
- painter
- 微信小程序
- 汽車回收管理
- 跳轉(zhuǎn)小程序
- 支付寶小程序被騙
- 云南小程序定制
- flex
- 網(wǎng)站建設(shè)選
- 云南網(wǎng)站制作哪家好
- 汽車回收系統(tǒng)