游戲開發(fā)平臺(tái)Cocos2D-x中的動(dòng)作特效與動(dòng)畫課件_第1頁
游戲開發(fā)平臺(tái)Cocos2D-x中的動(dòng)作特效與動(dòng)畫課件_第2頁
游戲開發(fā)平臺(tái)Cocos2D-x中的動(dòng)作特效與動(dòng)畫課件_第3頁
游戲開發(fā)平臺(tái)Cocos2D-x中的動(dòng)作特效與動(dòng)畫課件_第4頁
游戲開發(fā)平臺(tái)Cocos2D-x中的動(dòng)作特效與動(dòng)畫課件_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

游戲開發(fā)平臺(tái)Cocos2D-xocos2d-X中的動(dòng)作特效與動(dòng)畫2019/3/8xxxxxxxxxx1游戲開發(fā)平臺(tái)Cocos2D-xocos2d-X中的動(dòng)作特效與2019/3/8xxxxxxxxxx2

Cocos2D-x的基礎(chǔ)類,包括節(jié)點(diǎn)類CCNode、導(dǎo)演類CCDirector、場(chǎng)景類CCScene、布景層、CCLayer和精靈類CCSprite等。這些類都是構(gòu)成游戲畫面的基本元素。 但是游戲不僅是由靜態(tài)畫面構(gòu)成的,更多時(shí)候,游戲是動(dòng)態(tài)效果的呈現(xiàn),所以動(dòng)作、特效和動(dòng)畫是游戲區(qū)別于應(yīng)用的特點(diǎn),又是決定游戲質(zhì)量的關(guān)鍵一環(huán)。 因此,決定一個(gè)二維游戲引擎的好壞的重要因素是引擎對(duì)動(dòng)作、特效和動(dòng)畫的支持程度。2019/3/8xxxxxxxxxx2 Cocos2D-x的動(dòng)作類2019/3/8xxxxxxxxxx3Cocos2D-x的動(dòng)作類CCAction并不是一個(gè)在屏幕中顯示的對(duì)象,動(dòng)作必須要依托于CCNode類及它的子類的實(shí)例才能發(fā)揮作用。C0C0S2D-x的動(dòng)作包括位置移動(dòng)、跳躍,甚至是對(duì)象顏色的漸變。CCAction類繼承于對(duì)象類CCObject,有三個(gè)子類:有限時(shí)間動(dòng)作、跟隨、移動(dòng)速度,其中有限時(shí)間動(dòng)作分為瞬時(shí)動(dòng)作(CCActionlnstant)和延時(shí)動(dòng)作(CCActionlnterval)。動(dòng)作類2019/3/8xxxxxxxxxx3Cocos2D-CCAction的主要函數(shù)2019/3/8xxxxxxxxxx4CCAction的主要函數(shù)2019/3/8xxxxxxxx2019/3/8xxxxxxxxxx5CCAction的子類CCFiniteTimeAction分為瞬時(shí)動(dòng)作(CCActionlnstant)和延時(shí)動(dòng)作bCCActionlnterval)2019/3/8xxxxxxxxxx5CCAction的子類移動(dòng)動(dòng)作2019/3/8xxxxxxxxxx6VoidActionMove::onEnter(){ActionsDemo::onEnter();centerSprites(3);CCSizes=CCDirector::sharedDirector()->getWinSize();CCActionlnterval*actionTo=CCMoveTo::create(2,CCPointMake(s.width-40,s.height-40));CCActionlnterval*actionBy=CCMoveBy::create(2,CCPointMake(80,80));CCActionlnterval*actionByBack=actionBy->reverse;);_tamara->runAction(actionTo);_grossini->runAction(CCSequence::create(actionBy,actionByBack,NULL));_kathia->runAction(CCMoveTo::create(1,CCPointMake(40,40)));}以上分別定義了CCMoveTo和CCMoveBy的實(shí)例。之前已經(jīng)說過CCMoveBy是MoveTo的子類,CCMoveTo是移動(dòng)到目標(biāo)位置,而CCMoveB>.是次目前位置的基礎(chǔ)上移之到目標(biāo)位置。 創(chuàng)建函數(shù)create的第一個(gè)參數(shù)是時(shí)間,第二個(gè)參數(shù)是位置對(duì)象。動(dòng)作調(diào)用reverse函數(shù)會(huì)返回另外一個(gè)動(dòng)作,使這個(gè)動(dòng)作倒置,而精靈類實(shí)例在調(diào)用runAction函數(shù)時(shí)也會(huì)有不同,m_grossini精靈使用的就是動(dòng)作序列CCSequence。CCSequence動(dòng)作序列的定義由多個(gè)動(dòng)作構(gòu)成,create函數(shù)中以NULL參數(shù)作結(jié)尾,效果是作為參數(shù)傳入的動(dòng)作會(huì)頤序執(zhí)行。移動(dòng)動(dòng)作2019/3/8xxxxxxxxxx6VoidA縮放動(dòng)作2019/3/8xxxxxxxxxx7VoidActionScale::onEnter(){ActionsDemo::onEnter();centerSprites(3);CCActionlnterval*actionTo=CCScaleTo::create(2.Of,0.5f);CCActionlnterval*actionBy=CCScaleBy::create(2.Of/l.Of,lO.Of);CCActionlnterval*actionBy2=CCScaleBy::create(2.Of,5.Of,l.Of};m_grossini->runAction(actionTo);m_tamara->runAction(CCSequence::create(actionBy,actionBy->reverse(),NULL));m_kathia->runAction(CCSequence::create(actionBy2,actionBy2->reverse(),NULL));}以上分別定義了CCScaleTo和CCScaleBy的實(shí)例。之前已經(jīng)說過CCScaleBy是CCScaleTo的子類,CCScaleTo是縮放到相應(yīng)比例,CCScaleBy是在目前基礎(chǔ)上變化相應(yīng)的縮放比例。create函數(shù)可以使用兩個(gè)參數(shù)或者三個(gè)參數(shù)。兩個(gè)參數(shù)的第一個(gè)參數(shù)是時(shí)間間隔,第二個(gè)參數(shù)是縮放比例。三個(gè)參數(shù)的第一個(gè)參數(shù)是時(shí)間間隔,第二個(gè)參數(shù)是x軸縮放比例,第三個(gè)參數(shù)是y軸縮放比例??s放動(dòng)作2019/3/8xxxxxxxxxx7VoidAc扭曲動(dòng)作2019/3/8xxxxxxxxxx8VoidActionSkew::onEnter(){ActionsDemo::onEnter();centerSprites(3);CCActionlnterval*actionTo=CCSkewTo::create(2,37.2f,-37.2f);CCActionlnterval*actionToBack=CCSkewTo::create(2,0,0);CCActionlnterval*actionBy=CCSkewBy::create(2,O.Of,-90.Of);CCActionlnterval*actionBy2=CCSkewBy::create(2,45.Of,45.0f);CCActionlnterval*actionByBack=actionBy->reverse();m_tamara->runAction(CCSequence::create(actionTo,actionToBack,NULL));M_grossini->runAction(CCSequence::create(actionBy,actionByBack,NULL));m_kathia->runAction(CCSequence::create(actionBy2,actionBy2->reverse(),NULL));}以上分別定義了CCSkewTo和CCSkewBy是實(shí)例。之前已經(jīng)說過CCSkewBy是CCSkewTo的子類。二者關(guān)系和之前類似,以By結(jié)尾的參數(shù)是相對(duì)于目前值的過程量,以To結(jié)尾的參數(shù)是絕對(duì)的參數(shù),不管現(xiàn)有狀態(tài)如何,直接設(shè)置為參數(shù)的這個(gè)值。三個(gè)參數(shù)的第一個(gè)參數(shù)是時(shí)間間隔,第二個(gè)參數(shù)是x軸扭曲參數(shù),第三個(gè)參數(shù)是y軸扭曲參數(shù)。扭曲動(dòng)作2019/3/8xxxxxxxxxx8VoidAc旋轉(zhuǎn)動(dòng)作2019/3/8xxxxxxxxxx9voidActionRotate::onEnter(){ActionsDemo::onEnter();centerSprites(3);CCActionlnterval*actionTo=CCRotateTo::create(2,45);CCActionlnterval*actionTo2=CCRotateTo::create(2,-45);CCActionlnterval*actionToO=CCRotateTo::create(2,0);m_tamara->runAction(CCSequence::create(actionTo,actionToO,NULL));CCActionlnterval*actionBy=CCRotateBy::create(2,360);CCActionlnterval*actionByBack=actionBy->reverse();M_grossini->runAction(CCSequence::create(actionBy,actionByBack,NULL));m_kathia->runAction(CCSequence::create(actionTo2,actionToO->copy()->autorelease(),NULL));以上分別定義了CCRotateTo和CCRotateBy的實(shí)例。之前已經(jīng)說過CCRotateBy是CCRotateTo的子類,二者關(guān)系和之前類似。兩個(gè)參數(shù)的第一個(gè)參數(shù)是時(shí)間間隔,第二個(gè)參數(shù)是旋轉(zhuǎn)角度,這里的角度表示采用角度制。旋轉(zhuǎn)動(dòng)作2019/3/8xxxxxxxxxx9voidAct跳轉(zhuǎn)動(dòng)作2019/3/8xxxxxxxxxx10voidActionJump::onEnter()ActionsDemo::onEnter();centerSprites(3);CCActionlnterval*actionTo=CCJumpTo::create(2,CCPointMake(300,300),50,4);CCActionlnterval*actionBy=CCJumpBy::create(2,CCPointMake(300,0),50,4);CCActionlnterval*actionUp=CCJumpBy::create(2,CCPointMake(0,0),80,4);CCActionlnterval*actionByBack=actionBy->reverse();m_tamara->runAction(actionTo);m_grossini->runAction(CCSequence::create(actionBy,actionByBack,NULL));m_kathia->runAction(CCRepeatForever::create(actionUp));以上分別定義了CCJumpTo和CCJumpBy的實(shí)例。之前已經(jīng)說過CCJumpTo是CCJumpBy的子類,二者關(guān)系和之前類似。四個(gè)參數(shù)的第一個(gè)參數(shù)是時(shí)間間隔,第二個(gè)參數(shù)CCJumpTo的是目標(biāo)位置的絕對(duì)坐標(biāo),CCJumpBy的是相對(duì)于目前位置的相對(duì)坐標(biāo),第三個(gè)參數(shù)為跳躍高度,第四個(gè)參數(shù)是跳躍的次數(shù)。跳轉(zhuǎn)動(dòng)作2019/3/8xxxxxxxxxx10voidAc貝塞爾曲線動(dòng)作2019/3/8xxxxxxxxxx11voidActionBezier::onEnter()ActionsDemo::onEnter();CCSizes=CCDirector::sharedDirector()->getWinSize();centerSprites(3);ccBezierConfigbezier;bezier.controlPoint_l=CCPointMake(0,s.height/2);bezier.controlPoint_2=CCPointMake(300,-s.height/2);bezier.endPosition=CCPointMake(300,100);CCActionlnterval*bezierForward=CCBezierBy::create(3,bezier);CCActionlnterval*bezierBack=bezierForward->reverse();CCAction*rep=CCRepeatForever::create((CCActionlnterval*)CCSequence::create(bezierForward,bezierBack,NULL));m_tamara->setPosition(CCPointMake(80,160));ccBezierConfigbezier2;bezier2.controlPoint_1=CCPointMake(100,s.height/2);bezier2.controlPoint_2=CCPointMake(200,-s.height/2);bezier2.endPosition=CCPointMake(240,160);CCActionlnterval*bezierTol=CCBezierTo::create(2,bezier2);m_kathia->setPosition(CCPointMake(400,160));CCActionlnterval*bezierTo2=CCBezierTo::create{2,bezier2);m_grossini->runAction(rep);m_tamara->runAction(bezierTo1);m__kathia->runAction(bezierTo2);貝塞爾曲線動(dòng)作2019/3/8xxxxxxxxxx11voi2019/3/8xxxxxxxxxx12

ccBezierConfig的三個(gè)參數(shù)需要配置,前兩個(gè)是控制點(diǎn),最后一個(gè)是終點(diǎn)。其中終點(diǎn)在CCBezierTo和CCBezierBy兩個(gè)類中的運(yùn)行結(jié)果不同,依然是CCBezierTo的終點(diǎn)是絕對(duì)位置,而CCBezierBy是相對(duì)于目前位置的相對(duì)位置??刂泣c(diǎn)的設(shè)置分別控制在路徑上的高峰和低谷的位置。如果走的路徑與圖中方向一致,苧兩個(gè)控制點(diǎn)的縱坐標(biāo)設(shè)置為一正一負(fù)。控制點(diǎn)縱坐標(biāo)的正負(fù)決定是向下走還是向上絕對(duì)值決定移動(dòng)的幅度。而橫坐標(biāo)是橫坐標(biāo)方向的移動(dòng),該值對(duì)于CCBezierBy是相對(duì)于目前位置的相對(duì)位置,于CCBezierTo的終點(diǎn)是絕對(duì)位置。如果需要圖中曲線旋轉(zhuǎn)90度的路徑,就把兩個(gè)控制點(diǎn)的橫坐標(biāo)分別設(shè)置為一正一負(fù)即可,然后交換x軸和y軸的要求

CCBezierTo和CCBezierBy都是貝塞爾曲線動(dòng)作。create函數(shù)沒有什么區(qū)別,都是兩個(gè)參數(shù),第一個(gè)參數(shù)依然是動(dòng)作時(shí)間,第二個(gè)參數(shù)是貝塞爾曲線的配置系數(shù)。.貝塞爾曲線是應(yīng)用于二維圖形應(yīng)用程序的數(shù)學(xué)曲線,每一個(gè)頂點(diǎn)都有兩個(gè)控制點(diǎn),用于控制該頂點(diǎn)兩側(cè)曲線的弧度2019/3/8xxxxxxxxxx12ccBez淡入淡出動(dòng)作2019/3/8xxxxxxxxxx13VoidActionFade::onEnter(){ActionsDemo::onEnter();centerSprites(2);m_tamara->setOpacity(0);CCActionlnterval*actionl=CCFadeln::actionWithDuration(l.Of);CCActionlnterval*actionlBack=actionl->reverse();CCActionlnterval*action2=CCFadeOut::actionWithDuration(l.Of);CCActionlnterval*action2Back=action2->reverse();m_tamara->runAction(CCSequence::actions(actionl,actionlBack,NULL));m_kathia->runAction(CCSequence::actions(action2,action2Back/NULL));}std::StringActionFade::subtitle(){return"Fadeln/FadeOut";}這里需要說明的是,淡入首先要將不透明度設(shè)置為0。淡入淡出動(dòng)作2019/3/8xxxxxxxxxx13Void閃爍動(dòng)作2019/3/8xxxxxxxxxx14voidActionBlink::onEnter() ActionsDemo::onEnter(); centerSprites(2); CCActionlnterval*actionl=CCBlink::actionWithDuration(2,10);CCActionlnterval*action2=CCBlink::actionWithDuration(2,5);m_tamara->runAction(actionl); m_kathia->runAction(action2); }閃爍動(dòng)作2019/3/8xxxxxxxxxx14voidAc色值漸變動(dòng)作2019/3/8xxxxxxxxxx15voidActionTint::onEnter(){ActionsDemo::onEnter();centerSprites(2);CCActionlnterval*actionl=CCTintTo::actionWithDuration(2,255,0,255);CCActionlnterval*action2=CCTintBy::actionWithDuration(2,-127,-255,-127);CCActionlnterval*action2Back=action2->reverse();?m_tamara->runAction(actionl);m__kathia->runAction(CCSequence::actions(action2,action2Back/NULL))}以上分別定義了CCTintTo和CCTintBy的實(shí)例,第一個(gè)參數(shù)是動(dòng)作時(shí)間,后三個(gè)參數(shù)分別是顏色的R、G、B值。CCTintTo是直接設(shè)置色值,CCTintBy是在目前值上加上相應(yīng)的值。色值漸變動(dòng)作2019/3/8xxxxxxxxxx15void攝像機(jī)動(dòng)作類2019/3/8xxxxxxxxxx16第3章介紹了攝像機(jī)類CCCamera,動(dòng)作中也有一個(gè)攝像機(jī)動(dòng)作類CCOrbitCamera,它是攝像機(jī)環(huán)繞屏幕中心旋轉(zhuǎn)所形成的動(dòng)作。voidActionOrbit::onEnter(){ActionsDemo::onEnter();centerSprites(3);CCActionlnterval*orbit3=CCOrbitCamera::create(2,1,0,0,180,90,0);CCFiniteTimeAction*action3=CCSequence::create(orbit3,orbit3->reverse(),NULL);m_kathia->runAction(CCRepeatForever::create((CCActionlnterval*)actionl));m_tamara->runAction(CCRepeatForever::create((CCActionlnterval*)action2));m_grossini->runAction(CCRepeatForever::create((CCActionlnterval*)action3));CCActionlnterval*move=CCMoveBy::create(3,CCPointMake(100,-100));CCActionlnterval*move_back=move->reverse();CCFiniteTimeAction*seq=CCSequence::create(move,move_back,NULL);CCAction*rfe=CCRepeatForever::create((CCActionlnterval*)seq);m_kathia->runAction(rfe);m_tamara->runAction((CCAction*)(rfe->copy()->autorelease()));m_grossini->runAction((CCAction*)(rfe->copy()->autorelease()));}攝像機(jī)動(dòng)作類2019/3/8xxxxxxxxxx16第3章介攝像機(jī)動(dòng)作類2019/3/8xxxxxxxxxx17旋轉(zhuǎn)的坐標(biāo)描述采用了球坐標(biāo)。球坐標(biāo)采用球面半徑、與X軸夾角、與Z軸夾角這幾個(gè)值來描述坐標(biāo)點(diǎn)。攝像機(jī)動(dòng)作類CCOrbitCamera的創(chuàng)建函數(shù)create有7個(gè)參數(shù),第一個(gè)參數(shù)是動(dòng)作時(shí)間,第二、三個(gè)參數(shù)是起始的坐標(biāo)值中的半徑和過程中的坐標(biāo)值中的半徑,第四、五個(gè)參數(shù)是起始的坐標(biāo)值中的與z軸夾角和過程中的坐標(biāo)值中的與z軸夾角,第六、七個(gè)參數(shù)是起始的坐標(biāo)值中的與x軸夾角和過程中的坐標(biāo)值中的與x軸夾角。注意在使用攝像機(jī)旋轉(zhuǎn)時(shí),如果正在旋轉(zhuǎn)的這個(gè)節(jié)點(diǎn)后面還有其他節(jié)點(diǎn)的話,可能會(huì)出現(xiàn)旋轉(zhuǎn)的節(jié)點(diǎn)只有一部分顯示出來的這種情況。這時(shí)只需要關(guān)閉OpenGL的深度檢測(cè),獲得導(dǎo)演類并調(diào)用setDepthTest設(shè)置為false即可,如下面的代碼所示:CCDirector::sharedDirector()->setDepthTest(false)。攝像機(jī)動(dòng)作類2019/3/8xxxxxxxxxx17基本樣條動(dòng)作2019/3/8xxxxxxxxxx18在游戲中,有時(shí)會(huì)希望使用一些非常規(guī)軌跡能描述的運(yùn)動(dòng)軌跡,希望只是“告訴”游戲?qū)ο髱讉€(gè)離散的點(diǎn),游戲?qū)ο缶涂梢愿鶕?jù)這些離散的點(diǎn)模擬出相應(yīng)的路徑。當(dāng)然,有相應(yīng)的公式模擬出這條曲線,那就是基本樣條。Cocos2D-x中有沿基本樣條路徑移動(dòng)動(dòng)作類CCCardinalSplineTo和其子類實(shí)現(xiàn)這樣的功能其中CCCardinalSplineTo和CCCardinalSplineBy的關(guān)系與之前以“To”和“By”結(jié)尾的類類似,CCCatmullRomTo和CCCatmullRomBy也是這樣的。它們都是采用基本樣條的公式;不同的是,CCCatmullRomTo和CCCatmullRomBy的拉力系數(shù)是0.5,而之前的CCCardinalSplineTo和CCCardinalSplineBy的拉力系數(shù)是可以自定義的?;緲訔l動(dòng)作2019/3/8xxxxxxxxxx18在游戲中畫基本樣條路徑2019/3/8xxxxxxxxxx19VoidActionCardinalSpline::onEnter(){ActionsDemo::onEnter();this->centerSprites(2);CCSizes=CCDirector::sharedDirector()->getWinSize();CCPointArray*array=CCPointArray::create(20);array->addControlPoint(ccp(0,0));array->addControlPoint(ccp(s.width/2-30,0));array->addControlPoint(ccp(s.width/2-30,s.height-80));array->addControlPoint(ccp(0,s.height-80));array->addControlPoint(ccp(0,0));CCCardinalSplineBy*action=CCCardinalSplineBy::create(3,array,0);CCActionlnterval*reverse=action->reverse();CCFiniteTimeAction*seq=CCSequence::create(action,reverse,NULL);M_tamara->setPosition(ccp(50,50));M_tamara->runAction(seq);CCCardinalSplineBy*action2=CCCardinalSplineBy::create(3,array,1);CCActionlnterval*reverse2=action2->reverse();CCFiniteTimeAction*seq2=CCSequence::create(action2,reverse2,NULL);m_kathia->setPosition(ccp(s.width/2,50));m_kathia->runAction(seq2);M_pArray=array;array->retain();}首先定義一個(gè)點(diǎn)數(shù)組,把路徑的點(diǎn)放入點(diǎn)數(shù)組中。創(chuàng)建基本樣條動(dòng)作時(shí),3個(gè)參數(shù)分別是動(dòng)作時(shí)間、點(diǎn)數(shù)組、拉力系數(shù)。

CCCardinalSplineTo和CCCardinalSplineBy的區(qū)別是,由于第一個(gè)是絕對(duì)的,第二個(gè)是相對(duì)的,第二個(gè)定義點(diǎn)數(shù)組的時(shí)候,第一個(gè)點(diǎn)最好設(shè)置為(0,0),否則起始點(diǎn)會(huì)被忽略掉。可以重寫布景層的draw函數(shù)來把路徑畫出來。畫基本樣條路徑2019/3/8xxxxxxxxxx19Voi畫Catmull-Rom樣條路徑2019/3/8xxxxxxxxxx20voidActionCatmullRom::onEnter(){ActionsDemo::onEnter();this->centerSprites(2);CCSizes=CCDirector::sharedDirector()->getWinSize();m_tamara->setPosition(ccp(50,50));CCPointArray*array=CCPointArray::create(20);array->addControlPoint(ccp(0,0));array->addControlPoint(ccp(80,80));array->addControlPoint(ccp(s.width-80,80));array->addControlPoint(ccp(s.width-80,s.height-80));array->addControlPoint(ccp(80,s.height-80));array->addControlPoint(ccp(80,80));array->addControlPoint(ccp(s.width/2,s.height/2));CCCatmullRomBy*action=CCCatmullRomBy::create(3,array);CCFiniteTimeAction*reverse=action->reverse();CCFiniteTimeAction*seq=CCSequence::create(action,reverse,NULL);m_tamara->runAction(seq);CCPointArray*array2=CCPointArray:create(20);array2->addControlPoint(ccp(s.width/2,30));array2->addControlPoint(ccp(s.width-80,30));array2->addControlPoint(ccp(s.width-80,s.height-80));array2->addControlPoint(ccp(s.width/2,s.height-80));array2->addControlPoint(ccp(s.width/2,30));CCCatmullRomTo*action2=CCCatmullRomTo::create(3,array2);CCFiniteTimeAction*reverse2=action2->reverse();CCFiniteTimeAction*seq2=CCSequence::create(action2,reverse2,NULL);m_kathia->runAction(seq2);m__pArrayl=array;m_pArrayl->retain();m_pArray2=array2;m_pArray2->retain();CCCatmullRomTo和CCCatmullRomBy的用法和之前的那組類的用法一樣,只是不需要第三個(gè)拉力系數(shù)參數(shù)。它們的區(qū)別和之前的也是一樣的,也可以重寫布景層的draw函數(shù)來把路徑畫出來。畫Catmull-Rom樣條路徑2019/3/8xxxxxx緩沖動(dòng)作2019/3/8xxxxxxxxxx21在實(shí)現(xiàn)運(yùn)動(dòng)中,常常需要實(shí)現(xiàn)一些加速度或者減速度的效果。Cocos2D-x引擎為我們提供了相應(yīng)的實(shí)現(xiàn)接口,這樣就不用再用原來的公式計(jì)算方法來實(shí)現(xiàn)加減速度的效果。Ease系列的方法改變了運(yùn)動(dòng)的速度,但是并沒有改變總體時(shí)間。如果整個(gè)動(dòng)作持續(xù)5s,那么整個(gè)時(shí)間仍然會(huì)持續(xù)5s。這些動(dòng)作可以分成三類?!鮅nactions:action(開始的時(shí)候加速)?□Outactions:action(結(jié)束的時(shí)候加速)□InOutactions:action(開始和結(jié)束的時(shí)候加速)CCActionEase有很多子類,根據(jù)不同的緩沖公式來模擬加減速過程。緩沖動(dòng)作的具體內(nèi)容如下。1)指數(shù)緩沖:分別為EaseExponentialln、EaseExponentialOut、EaseExponentiallnOut。2)賽因緩沖:分別為EaseSineIn、EaseSineOut、EaseSineInOut。3)跳躍緩沖:分別為EaseBounceln、EaseBounceOut、EaseBouncelnOut。4)彈性緩沖:分別為EaseElasticIn、EaseElasticOut、EaseElasticInOut。5)回震緩沖:分別為EaseBackln、EaseBackOut、EaseBacklnOut。以上介紹的5種緩沖,加上基本的緩沖動(dòng)作,一共6種緩沖動(dòng)作,其定義如代碼清單4-15所示。緩沖動(dòng)作2019/3/8xxxxxxxxxx21在實(shí)現(xiàn)運(yùn)動(dòng)中緩沖動(dòng)作2019/3/8xxxxxxxxxx22//基本緩沖動(dòng)作CCEaseln::create((CCActionlnterval*)(move->copy()->autorelease()),2.5f);CCEaseOut::create((CCActionlnterval*)(move->copy()->autorelease()),2.5f);CCEaselnOut::create((CCActionlnterval*)(move->copy()->autorelease()),0.65f);//指數(shù)緩沖動(dòng)作CCEaseExponentialln::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseExponentialOut::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseExponentiallnOut::create((CCActionlnterval*)(move->copy()->autorelease()));//賽因緩沖動(dòng)作CCEaseSineln::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseSineOut::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseSinelnOut::create((CCActionlnterval*)(move->copy()->autorelease()));緩沖動(dòng)作2019/3/8xxxxxxxxxx22//基本緩沖緩沖動(dòng)作2019/3/8xxxxxxxxxx23//跳躍緩沖動(dòng)作CCEaseBounceln::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseBounceOut::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseBouncelnOut::create((CCActionlnterval*)(move->copy()->autorelease()));//彈性緩沖動(dòng)作CCEaseElasticIn::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseElasticOut::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseElasticInOut::create((CCActionlnterval*)(move->copy()->autorelease()),0.3f);//緩沖動(dòng)作CCEaseBackln::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseBackOut::create((CCActionlnterval*)(move->copy()->autorelease()));CCEaseBacklnOut::create((CCActionlnterval*)(move->copy()->autorelease()));第一個(gè)參數(shù)是要緩沖的動(dòng)作,其中基本緩沖動(dòng)作需要第二個(gè)參數(shù)是速率,彈性緩沖動(dòng)作需要第二個(gè)參數(shù)是震動(dòng)的周期,默認(rèn)值為0.3。緩沖動(dòng)作2019/3/8xxxxxxxxxx23//跳躍緩沖組合動(dòng)作2019/3/8xxxxxxxxxx24在游戲中,游戲?qū)ο笥袝r(shí)不是執(zhí)行一個(gè)動(dòng)作,有時(shí)是多個(gè)動(dòng)作的動(dòng)作序列,有時(shí)是同時(shí)執(zhí)行幾個(gè)動(dòng)作序列。這時(shí)候就需要使用組合動(dòng)作的方式將多個(gè)動(dòng)作或按序列組織,或合成在一起。1.CCSequence

定義一個(gè)動(dòng)作序列,可以使用動(dòng)作的CCArray數(shù)組;也可以把所有的動(dòng)作作為參數(shù)傳入create函數(shù)中,最后結(jié)尾參數(shù)使用NULL(空值)即可;還可以把兩個(gè)有限時(shí)間動(dòng)作按順序傳人create函數(shù)中。CCFiniteTimeAction*seq2=CCSequence::create(action2#reverse2,NULL);m_kathia->runAction(seq2);2.CCSpawn CCSpawn動(dòng)作是使被合成的動(dòng)作同時(shí)進(jìn)行。它的定義方法和動(dòng)作序列一致CCAction*action=CCSpawn::create(CCJumpBy::create(2,CCPointMake(300,0),50,4),CCRotateBy::create(2,720),NULL);m_grossini->runAction(action);組合動(dòng)作2019/3/8xxxxxxxxxx24在游戲中,游組合動(dòng)作2019/3/8xxxxxxxxxx253.CCRepeat和CCRepeatForever

除了以上兩個(gè)可以實(shí)現(xiàn)多個(gè)動(dòng)作的類外,還有可以使一個(gè)動(dòng)作重復(fù)播放的類,那就是CCRepeat和CCRepeatForever。二者都可以使動(dòng)作重復(fù)進(jìn)行,不同之處就是CCRepeat可以在第二個(gè)參數(shù)中定義重復(fù)次數(shù),而CCRepeatForever是一直重復(fù)的。CCActionInterval*rep2=CCRepeat::create((CCFiniteTimeAction*)(seq->copy()->autorelease()),10);m_kathia->runAction(rep2);CCAction*rep2=CCRepeatForever::create((CCActionlnterval*)(seq->copy()->autorelease()));m_kathia->runAction(rep2);組合動(dòng)作2019/3/8xxxxxxxxxx253.CCRe跟隨動(dòng)作2019/3/8xxxxxxxxxx26跟隨動(dòng)作CCFollow是一個(gè)節(jié)點(diǎn)跟隨另外一個(gè)節(jié)點(diǎn)的動(dòng)作。voidActionFollow::onEnter(){ActionsDemo::onEnter();centerSprites(1);CCSizes=CCDirector::sharedDirector()->getWinSize();m_grossini->setPosition(CCPointMake(-200,s.height/2));CCActionlnterval*move=CCMoveBy::create(2,CCPointMake(s.width*3,0));CCActionlnterval*move_back=move->reverse();CCFiniteTimeAction*seq =CCSequence::create(move,move_back,null);CCAction*rep =CCRepeatForever::create((CCActionlnterval*)seq);m_grossini->runAction(rep);this->runAction(CCFollow::create(m_grossinifCCRectMake(0,0,s.width*2-100,s.height)));}跟隨動(dòng)作2019/3/8xxxxxxxxxx26跟隨動(dòng)作CC可調(diào)整動(dòng)作速度2019/3/8xxxxxxxxxx27可調(diào)整速度動(dòng)作CCSpeed不是一個(gè)獨(dú)立的動(dòng)作,可以把它理解為是對(duì)目前動(dòng)作的一個(gè)“包裝”,經(jīng)過這個(gè)“包裝”以后,就可以實(shí)現(xiàn)“慢動(dòng)作”和“快進(jìn)”的效果。使用CCSpeed來處理很方便VoidSpeedTest::onEnter(){EaseSpriteDemo::onEnter();CCSizes=CCDirector::sharedDirector()->getWinSize();CCActionlnterval*junpl=CCJunpBy::create(4#CCPointMake(-s.width+80,0),100,4);CCActionlnterval*jump2=jumpl->reverse();CCActionlnterval*rotl=CCRotateBy::create(4,360*2);CCActionlnterval*rot2=rotl->reverse();CCFiniteTimeAction*seq3_l=CCSequence::create(jump2,jumpl,NULL);CCFiniteTimeAction*seq3_2=CCSequence::create(rotl,rot2,NULL);CCFiniteTimeAction*spawn=CCSpawn::create(seq3_1,seq3_2,NULL);CCSpeed*action=CCSpeed::create(CCRepeatForever::create((CCActionlnterva1*)spawn).1.Of);action->setTag(kTagActionl);CCAction*action2=(CCAction*)(action->copy()->autorelease());CCAction*action3=(CCAction*)(action->copy()->autorelease());action2->setTag(kTagActionl);action3->setTag(kTagActionl);m_grossini->runAction(action2);m_tamara->runAction(action3);m_kathia->runAction(action);this->schedule(schedule_selector(SpeedTest::altertime),1.Of);}voidSpeedTest::altertime(floatdt){CCSpeed*actionl=(CCSpeed*)(m_grossini->getActionByTag(kTagActionl))CCSpeed*action2=(CCSpeed*)(m_tamara->getActionByTag(kTagActionl));CCSpeed*action3=(CCSpeed*)(m_kathia->getActionByTag(kTagActionl));actionl->setSpeed(CCRAND0M_0_1()*2);action2->setSpeed(CCRAND0M_0_1()*2);action3->setSpeed(CCRAND0M_0_1()*2);}在onEnter函數(shù)中,就是定義普通動(dòng)作,并使用schedule,使得每1.0s調(diào)用altertime函數(shù)。在altertime函數(shù)中,通過getActionByTag獲得動(dòng)作,把它們視作CCSpeed,并使用setSpeed設(shè)置速度:設(shè)置1,是原速度;大于1,速度加快,小于1,速度減慢??烧{(diào)整動(dòng)作速度2019/3/8xxxxxxxxxx27可調(diào)整2019/3/8xxxxxxxxxx28動(dòng)作延時(shí)CCDelayTime就是動(dòng)作延后一段固定的時(shí)間,可以把它理解為一個(gè)“空動(dòng)作”,只有時(shí)間,沒有任何動(dòng)作。voidActionDelayTime::onEnter(){ActionsDemo::onEnter();alignSpritesLeft(1);CCActionlnterval*move=CCMoveBy::create(1,CCPointMake(150,0));CCFiniteTimeAction*action=CCSequence::create(move,CCDelayTime::create(2),move,NULL);m_grossini->runAction(action);}2019/3/8xxxxxxxxxx28動(dòng)作延時(shí)CCDela改變動(dòng)作執(zhí)行對(duì)象2019/3/8xxxxxxxxxx29CCTargetedAction類可以改變動(dòng)作的執(zhí)行對(duì)象。一般默認(rèn)的動(dòng)作執(zhí)行對(duì)象是調(diào)用mnAction的對(duì)象:有時(shí)候要自定義動(dòng)作執(zhí)行對(duì)象,這時(shí)候需要使用CCTargetedAction。VoidActionTargeted::onEnter(){ActionsDemo::onEnter();centerSprites(2);CCJumpBy*jumpl=CCJumpBy::create(2,CCPointZero,100,3);CCJumpBy*jump2=(CCJumpBy*)jumpl->copy()->autorelease();CCRotateBy*rotl=CCRotateBy::create(1,360);CCRotateBy*rot2=(CCRotateBy*)rotl->copy()->autorelease0;CCTargetedAction*tl=CCTargetedAction::create(m_cathia,jump2);CCTargetedAction*t2=CCTargetedAction::create(m_cathia,rot2);CCSequence*seq=(CCSequence*)CCSequence::create(junpl,tl,rotl,t2,NULL);CCRepeatForever*always=CCRepeatForever::create(seq);m_tamara->runAction(a1ways);}它的定義使用create函數(shù),第一個(gè)參數(shù)是執(zhí)行動(dòng)作的節(jié)點(diǎn),第二個(gè)參數(shù)是須執(zhí)行的動(dòng)作。這樣一來,雖然調(diào)用runAction的是m_tamara,但是執(zhí)行到tl和t2時(shí),執(zhí)行動(dòng)作的節(jié)點(diǎn)變?yōu)榱薽_kathia。改變動(dòng)作執(zhí)行對(duì)象2019/3/8xxxxxxxxxx29CC函數(shù)回調(diào)動(dòng)作2019/3/8xxxxxxxxxx30有時(shí)候某些動(dòng)作完成后,需要執(zhí)行一些數(shù)據(jù)上的處理,比如攻擊一個(gè)敵人,需要處理加減血等。其中CCCallFunc就是回調(diào)函數(shù),該回調(diào)的函數(shù)不含參數(shù)。CCCallFunc的回調(diào)函數(shù)以CCNode對(duì)象和數(shù)據(jù)作為參數(shù)?!癗”就是“Node”的意思;“D”就是“Data”的意思,數(shù)據(jù)可以是任何類型的。CCCallFuncO是以CCObject作為回調(diào)函數(shù)參數(shù)的,“0”就是“Object”的意思。voidActionSequence2::onEnter(){ActionsDemo::onEnter()alignSpritesLeft(1);m_grossini->setVisible(false);CCFiniteTimeAction*action=CCSequence::create(CCPlace::create(CCPointMake(200,200)),CCShow::create(),CCMoveBy::create(1,CCPointMake(100,0)),CCCallFunc::create(this,callfunc_selector(ActionSequence2::callbackl)),CCCallFuncN::create(this,califuncN_selector(ActionSequence2::callback2)),CCCallFuncND::create(this.callfuncNDselector(ActionSequence2::callback3),(void*)Oxbebabeba),NULL);m_grossini->runAction(action);}函數(shù)回調(diào)動(dòng)作2019/3/8xxxxxxxxxx30有時(shí)候某函數(shù)回調(diào)動(dòng)作2019/3/8xxxxxxxxxx31voidActionSequence2::callbackl(){CCSizes=CCDirector::sharedDirector()->getWinSize();CCLabelTTF*label=CCLabelTTF::create("callback1called","MarkerFelt",16);label->setPosition(CCPointMake(s.width/4*l,s.height/2));addChild(label);}voidActionSequence2::callback2(CCNode*sender){CCSizes=CCDirector::sharedDirector()->getWinSize();CCLabelTTF*label=CCLabelTTF::create(11callback2called","MarkerFelt",16);label->setPosition(CCPointMake(s.width/4*2,s.height/2));addChild(label);}voidActionSequence2::callback3(CCNode*sender,void*data){CCSizes=CCDirector::sharedDirector()->getWinSize();CCLabelTTF*label=CCLabelTTF::create("callback3called","MarkerFelt",16);label->setPosition(CCPointMake(s.width/4*3.s.height/2));addChild(label);}可以看到CCCallFunc、CCCallFuncN和CCCallFuncND的定義,第一個(gè)參數(shù)就是擁有回調(diào)函數(shù)的對(duì)象,第二個(gè)參數(shù)通過相應(yīng)選擇器獲得函數(shù)名稱,CCCallFuncND的最后一個(gè)參數(shù)就是數(shù)據(jù)對(duì)象,底下分別是三個(gè)函數(shù)的定義。函數(shù)回調(diào)動(dòng)作2019/3/8xxxxxxxxxx31可以看到過程動(dòng)作2019/3/8xxxxxxxxxx32很多時(shí)候,在進(jìn)入游戲之前都需要載人動(dòng)作,這時(shí)候需要一些動(dòng)作用來實(shí)現(xiàn)載入時(shí)的動(dòng)畫。Cocos2D-x提供了CCProgressTo和CCProgressFromTo來實(shí)現(xiàn)這個(gè)動(dòng)畫,但是執(zhí)行這種動(dòng)作的節(jié)點(diǎn)是CCProgressTimer。voidSpriteProgressToRadial:ronEnter(){SpriteDemo::onEnter();CCSizes=CCDirector::sharedDirector()->getWinSize();CCProgressTo*tol=CCProgressTo::create(2,100);CCProgressTo*to2=CCProgressTocreate(2,100);CCProgressTimer*left=CCProgressTimer::create(CCSprite::create(s_pPathSisterl));left->setType(kCCProgressTimerTypeRadial);addChild(left);left->setPosition:(CCPointMake(100,s.height/2));left->runAction(CCRepeatForever::create(tol));CCProgressTimer*right=CCProgressTimer::create(CCSprite::create(s_pPathBlock));right->setType(kCCProgressTimerTypeRadial);right->setReverseProgress(true);addChild(right);right->setPosition(CCPointMake(s.width-100,s.height/2));right->runAction(CCRepeatForever::create(to2));}首先是定義CCProgressTo或CCProgressFromTo。第一個(gè)參數(shù)都是動(dòng)作時(shí)間;CCProgressTo的第二個(gè)參數(shù)是結(jié)束時(shí)圖片顯示的百分比,CCProgressFromTo的第二個(gè)參數(shù)是開始時(shí)圖片顯不的百分比;CCProgressFromTo的第三個(gè)參數(shù)是結(jié)束時(shí)圖片顯示的百分比。

接下來是定義CCProgressTimer,傳人精靈對(duì)象來定義,通過調(diào)用setType函數(shù)來設(shè)置動(dòng)畫的類型:kCCProgressTimerTypeRadial是圓形掃描的動(dòng)畫,kCCProgressTimerTypeBar是直線掃描的動(dòng)畫。調(diào)用setReverseProgress函數(shù)設(shè)置正反的方向。kCCProgressTimerTypeBar類型的通過setBarChangeRate設(shè)置水平和豎直的變化量。

通過調(diào)用setxxxxxoint函數(shù)設(shè)置開始點(diǎn),(0,0)為左上,(1,1)為右下,其他點(diǎn)可以用浮點(diǎn)數(shù)來表示。過程動(dòng)作2019/3/8xxxxxxxxxx32很多時(shí)候,在動(dòng)作管理類2019/3/8xxxxxxxxxx33動(dòng)作管理類CCActionManager是一個(gè)管理所有動(dòng)作的單例,工作原理是:當(dāng)CCNode漢行runAction時(shí),該函數(shù)會(huì)把動(dòng)作通過動(dòng)作管理類的addAction函數(shù)將對(duì)象傳遞給JCActionManager的單例,該實(shí)例再把這個(gè)動(dòng)作添加到自己的動(dòng)作序列中。 動(dòng)作管理單例通過定時(shí)刷新自己的update方法,在這個(gè)方法中去調(diào)用行為序列中每個(gè)動(dòng)作的step(暫停的行為不會(huì)update),這些step方法再根據(jù)自身的完成進(jìn)度去update或是結(jié)東行為。 實(shí)際上是由動(dòng)作管理單例驅(qū)動(dòng)的每個(gè)動(dòng)作去更新自己的邏輯,而runAction方法只是將行為對(duì)象添加進(jìn)CCActionManager的待執(zhí)行隊(duì)列。當(dāng)節(jié)點(diǎn)被清除或是行為結(jié)束時(shí),動(dòng)作管理類會(huì)自動(dòng)將動(dòng)作從隊(duì)列中刪除,不需要程序員的管理。 一般情況下,不需要使用這個(gè)單例來管理動(dòng)作,可以使用CCNode類的stopAction、stopActionByTag和stopAllActions等函數(shù)來管理,但是有兩種情況需要使用CCActionManager類單例:□動(dòng)作的執(zhí)行者不是同一個(gè)節(jié)點(diǎn)?!跣枰獣和?重啟活動(dòng)時(shí)。動(dòng)作管理類2019/3/8xxxxxxxxxx33動(dòng)作管理類動(dòng)作管理類的主要函數(shù)2019/3/8xxxxxxxxxx34動(dòng)作管理類的主要函數(shù)2019/3/8xxxxxxxxxx342019/3/8xxxxxxxxxx35不要輕易使用動(dòng)作管理類,除非是不同動(dòng)作目標(biāo)和需要暫停/重啟動(dòng)作。這里的例子就是需要暫停/重啟動(dòng)作時(shí)使用VoidResumeTest::onEnter(){ActionManagerTest::onEnter();CCSizes=CCDirector::sharedDirector()->getWinSize();CCLabelTTF*1=CCLabelTTF::create("Grossinionlyrotate/scalein3seconds","Thonburi",16);addChild(1);l->setPosition(CCPointMake(s.width/2,245));CCSprite*pGrossini=CCSprite::create(s_pPathGrossini);addChild(pGrossini,0,kTagGrossini);pGrossini->setPosition(CCPointMake(s.width/2,s.height/2));pGrossini->runAction(CCScaleBy::create(2,2));CCDirector*pDirector=CCDirector::sharedDirector();pDirector->getActionManager()->pauseTarget(pGrossini);pGrossini->runAction(CCRotateBy::create(2,360));this->schedule(schedule—selector(ResumeTest::resumeGrossini).3.Of);}VoidResumeTest::resumeGrossini(floattime){this->unschedule(schedule—selector(ResumeTest::resumeGrossini));CCNode*pGrossini=getChildByTag(kTagGrossini);CCDirector*pDirector=CCDirector::sharedDirector();pDirector->getActionManager()->resumeTarget(pGrossini);}2019/3/8xxxxxxxxxx35不要輕易使用動(dòng)作管理網(wǎng)格動(dòng)作2019/3/8xxxxxxxxxx36網(wǎng)格動(dòng)作類似于特效,可以實(shí)現(xiàn)翻轉(zhuǎn)、抖動(dòng)、震蕩、水波紋等效果:基于網(wǎng)格實(shí)現(xiàn),首先來認(rèn)識(shí)網(wǎng)格Cocos2D-x中,網(wǎng)格類的基類CCGridBase有兩個(gè)子類,即CCGrid3D和CCTiledGrid3D。這兩個(gè)類的共同點(diǎn)是,網(wǎng)格的每個(gè)子塊都可以分離出來。網(wǎng)格沒有什么直接應(yīng)用的場(chǎng)合,只要明白CCGrid3D和CCTiledGrid3D,并且網(wǎng)格動(dòng)作是基于網(wǎng)格的即可。運(yùn)行網(wǎng)格動(dòng)作的節(jié)點(diǎn)好像被分成了大小相同的很多矩形,通過這些矩形的動(dòng)作形成整體動(dòng)作,這些矩形就好像形成了一個(gè)矩陣。16x12的網(wǎng)格將會(huì)運(yùn)行得非常快,但是效果并不是非常好。32x24的網(wǎng)格看起來會(huì)非常棒,但是在有些時(shí)候運(yùn)行起來不會(huì)太快。使用網(wǎng)格之前需要取消OpenGL的深度檢測(cè),調(diào)用如下語句:

CCDirector::sharedDirector()->setDepthTest(false)。網(wǎng)格動(dòng)作的使用和普通動(dòng)作一樣,可以使用mnAction來運(yùn)行動(dòng)作網(wǎng)格動(dòng)作2019/3/8xxxxxxxxxx36網(wǎng)格動(dòng)作類似清除網(wǎng)格2019/3/8xxxxxxxxxx37在使用網(wǎng)格時(shí),網(wǎng)格動(dòng)作結(jié)束后需要把網(wǎng)格清空voidTextLayer::checkAnim(floatdt){CCNode*s2=getChildByTag(kTagBackground);if(s2->number0fRunningActions()==0ScScs2->getGrid()!=NULL)s2->setGrid(NULL);}這段代碼首先獲得父節(jié)點(diǎn),然后檢測(cè)父節(jié)點(diǎn)是否還有動(dòng)作。如果沒有并且網(wǎng)格不為空,則調(diào)用setGrid函數(shù)并傳入空參數(shù)(NULL)便可清空網(wǎng)格。使用schedule—直檢測(cè)調(diào)用該函數(shù)就可以實(shí)現(xiàn)清空無動(dòng)作的節(jié)點(diǎn)網(wǎng)格。清除網(wǎng)格2019/3/8xxxxxxxxxx37在使用網(wǎng)格時(shí)動(dòng)畫2019/3/8xxxxxxxxxx38之前已經(jīng)介紹過一些方法讓你的節(jié)點(diǎn)“動(dòng)”起來,Cocos2D-x中還有一種動(dòng)作,就是動(dòng)畫類CCAnimate。要實(shí)現(xiàn)CCAnimate,還需要定義CCAnimation等類。我們來看關(guān)于動(dòng)畫的這些類。CCAnimationCache類是一個(gè)單例,用于緩存所有的動(dòng)畫和動(dòng)畫幀CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"dance");CCAnimationCache*animCache=CCAnimationCache::sharedAnimationCache();CCAnimation*normal=animCache->animationByName("dance11);首先通過sharedAnimationCache函數(shù)可以獲得動(dòng)畫緩存CCAnimationCache,通過addAnimation函數(shù)往動(dòng)畫緩存中加人動(dòng)畫,并給動(dòng)畫命名,然后通過動(dòng)畫緩存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論