植物大戰(zhàn)僵尸課件_第1頁
植物大戰(zhàn)僵尸課件_第2頁
植物大戰(zhàn)僵尸課件_第3頁
植物大戰(zhàn)僵尸課件_第4頁
植物大戰(zhàn)僵尸課件_第5頁
已閱讀5頁,還剩81頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

北京傳智播客教育植物大戰(zhàn)僵尸講師:曹睿北京傳智播客教育植物大戰(zhàn)僵尸北京傳智播客教育

大綱框架核心SurfaceView+SurfaceHolder+ThreadCocos2d-android游戲引擎圖形引擎Cocos2DGraphic

聲音引擎CocosDenshion

植物vs僵尸北京傳智播客教育

大綱框架核心框架核心SurfaceViewSurfaceView是View的子類,等同于TextView、ImageView等一系列控件。核心功能可以通過子線程進(jìn)行界面的繪制.繪制需要注意的內(nèi)容:所有SurfaceView和SurfaceHolder.Callback的方法都應(yīng)該在UI線程里調(diào)用,一般來說就是應(yīng)用程序主線程。渲染線程所要訪問的各種變量應(yīng)該作同步處理。由于surface可能被銷毀,它只在SurfaceHolder.Callback.surfaceCreated()和SurfaceHolder.Callback.surfaceDestroyed()之間有效,所以要確保渲染線程訪問的是合法有效的surfaceSurfaceHolder對象獲?。篠urfaceView.getHolder();用于管理Surface,核心的內(nèi)容是Callback接口,我們需要依據(jù)繪圖中提到的注意內(nèi)容確保Callback中的方法是在UI線程中調(diào)用。Callback的調(diào)用:使用SurfaceHolder.addCallback(Callbackcallback)方法進(jìn)行調(diào)用Thread框架核心SurfaceView界面的繪制在子線程(Thread)中繪制界面繪制的周期 SurfaceHolder.Callback.surfaceCreated()——

SurfaceHolder.Callback.surfaceDestroyed()

一個周期的繪制步驟SurfaceHolder鎖定界面:SurfaceHolder.lockCanvas();圖像繪制(繪制一個矩形,說明當(dāng)前的坐標(biāo)系統(tǒng))SurfaceHolder解除界面鎖定:SurfaceHolder.unlockCanvasAndPost(Canvascanvas);繪制內(nèi)容的量決定著繪制時間,在一個時間段內(nèi)繪制的次數(shù)越多那么用戶的體驗(yàn)越好。關(guān)于幀率FPS即FramesperSecond,中文翻譯為每秒顯示幀數(shù),俗稱幀率。多用于影視制作和游戲。由于人類眼睛的特殊生理結(jié)構(gòu),如果所看畫面顯示的速率在29.97時候,就會認(rèn)為是連貫的,這也就是為什么電影膠片是一格一格拍攝出來,然后快速播放的。而對游戲,一般來說,第一人稱射擊游戲比較注重FPS的高低,如果FPS<30的話,游戲會顯得不連貫。所以有一句有趣的話:“FPS(指FPS游戲)重在FPS(指幀率)。

代碼的改進(jìn),屏蔽掉draw時出現(xiàn)異常的情況界面的繪制在子線程(Thread)中繪制界面小案例模擬射擊類小游戲?qū)崿F(xiàn)步驟:①創(chuàng)建自定義的SurfaceView—-GameUI②使GameUI實(shí)現(xiàn)SurfaceHolder.Callback接口③使GameUI實(shí)現(xiàn)Runnable接口完成界面繪制工作④將Activity中setContentView參數(shù)修改為GameUI對象小案例模擬射擊類小游戲案例分析抽取共性圖片坐標(biāo)繪制自己的方法游戲元素小人移動的方法用戶點(diǎn)擊屏幕時產(chǎn)生一個笑臉笑臉移動的方法按鍵:需要設(shè)置按壓之后的圖片判斷用戶是否點(diǎn)擊方向按鍵,處理點(diǎn)擊效果案例分析抽取共性案例總結(jié)如果在現(xiàn)有的基礎(chǔ)上繼續(xù)開發(fā),需要完善那些功能功能一:游戲界面的切換切換方式一:進(jìn)行Activity之間切換切換方式二:在SurfaceView中完成不同界面的切換 ①需要將當(dāng)前界面需要顯示的內(nèi)容進(jìn)行統(tǒng)一管理,就像在電影放映時會將當(dāng)前場景顯示的內(nèi)容放置到一張膠片上。 ②同時電影放映時需要有人控制膠片的切換。功能二:元素動作處理速度變化快的動作(顯示、隱藏)有一個執(zhí)行時間的動作(移動、跳躍等)功能三:游戲聲音處理(音樂、音效)其他功能……這些工作是否已經(jīng)有人幫我們干了?案例總結(jié)如果在現(xiàn)有的基礎(chǔ)上繼續(xù)開發(fā),需要完善那些功能Cocos2d-android游戲引擎什么是游戲引擎

游戲引擎是指一些已編寫好的可編輯游戲系統(tǒng)或者一些交互式實(shí)時圖像應(yīng)用程序的核心組件。這些系統(tǒng)為游戲設(shè)計(jì)者提供各種編寫游戲所需的各種工具,其目的在于讓游戲設(shè)計(jì)者能容易和快速地做出游戲程式而不用由零開始。Cocos2d家族 cocos2d是一個開源的游戲開發(fā)框架,利用它可以非常容易的開發(fā)2D游戲。包括以下成員Cocos2d-xCocos2d-iphoneCocos2d-androidCocos2D-html5本質(zhì)區(qū)別:開發(fā)的語言不一樣:Cocos2d-x使用c++、Cocos2d-iphone使用Object-C共同點(diǎn):api名字基本一致我們?yōu)槭裁匆褂胏ocos2d一款開源的,跨平臺,輕量級的2D游戲引擎。性能良好廣泛的社區(qū)支持擁護(hù)很多成功案例。比如捕魚達(dá)人,三國塔防、植物大戰(zhàn)僵尸、保衛(wèi)蘿卜等使用MIT授權(quán)協(xié)議??梢宰杂墒褂?,修改源碼,不需要像GPL一樣公開源碼,可以商用Cocos2d-android游戲引擎什么是游戲引擎架構(gòu)架構(gòu)架構(gòu)說明Cocos2DGraphic圖形引擎CocosDenshionAudio聲音引擎物理引擎Box2dChipmunkLua腳本庫架構(gòu)說明Cocos2DGraphic圖形引擎圖形引擎Cocos2DGraphic圖形引擎Cocos2DGraphic圖形引擎說明CCDirector(導(dǎo)演)引擎的控制者,控制場景的切換,游戲引擎屬性的設(shè)置CCScene(場景)場景類,例如游戲的閃屏,主菜單,游戲主界面等。CCLayer(布景)圖層類,每個圖層都有自己的觸發(fā)事件,該事件只能對其擁有的元素有效,而圖層之上的元素所包含的元素,是不受其事件管理的CCSprite(人物)精靈類,界面上顯示的最小單元CCNode引擎中最重要的元素,所有可以被繪制的東西都是派生于此。它可以包含其它CCNode,可以執(zhí)行定時器操作,可以執(zhí)行CCAction。CCAction(動作)動作類,如平移、縮放、旋轉(zhuǎn)等動作圖形引擎說明CCDirector(導(dǎo)演)CCDirectorCCGLSurfaceView

引擎中SurfaceView的子類,實(shí)現(xiàn)了SurfaceHolder.Callback接口,但并未實(shí)現(xiàn)Runnable接口。存在問題:1、繪制界面的線程是誰?2、該線程是如何啟動的?CCDirector的作用界面的繪制工作是由GLThread來完成,而GLThread的開啟是在CCDirector的attachInView方法中完成的。管理場景CCSceneCCDirectorCCGLSurfaceViewCCDirector主要方法摘要:對象的獲取:sharedDirector()取得對象啟動繪圖線程attachInView()連接SurfaceView場景的管理runWithScene()運(yùn)行場景replaceScene()替換場景生命周期onResume()進(jìn)入運(yùn)行狀態(tài)onPause()暫停end()結(jié)束屏幕切換setDeviceOrientation()設(shè)置橫屏豎屏setScreenSize(480,320)設(shè)置屏幕分辨率,高于設(shè)置的分辨率時,引擎會自動適配,引擎將屏幕水平方向分成480份,垂直方向分成320份,代碼中使用的數(shù)值是相對于這些進(jìn)行計(jì)算的幀率設(shè)置setDisplayFPS(true)顯示fps幀率。幀率的顯示需要添加fps_images.png圖片到assets文件夾下setAnimationInterval(1.0f/60)設(shè)置幀率,每秒刷新60次CCDirector主要方法摘要:CCScene場景CCScene目前該類沒有什么具體的功能,它只是作為一個項(xiàng)目中需要展示內(nèi)容的根節(jié)點(diǎn)存在。CCScene場景CCSceneCCLayer圖層或布景調(diào)用addChild(CCNodechild)方法添加精靈可以在CCLayer下添加CCLayer(類似VIewGroup)可以在CCLayer上處理用戶的TouchEvents事件。使用方法:寫一個Layer繼承CCLayer,處理自身的onTouch事件。注意事項(xiàng):需要設(shè)置setIsTouchEnabled(true)讓你的Layer可以接受到Touch事件。CCLayer圖層或布景CCSprite(精靈)原點(diǎn)當(dāng)前的坐標(biāo)系統(tǒng),規(guī)定屏幕的左下角為坐標(biāo)原點(diǎn)。通過sprite.getPosition()獲得當(dāng)前加載的精靈的坐標(biāo)值。錨點(diǎn)(anchorpoint)CCSprite顯示時需要設(shè)置錨點(diǎn)信息,默認(rèn)為(0.5f,0.5f),即將CCSprite圖片的中間點(diǎn)作為圖片在當(dāng)前坐標(biāo)系統(tǒng)中的基準(zhǔn)點(diǎn),通過sprite.getAnchorPoint()獲取當(dāng)前精靈的錨點(diǎn)信息。錨點(diǎn)的設(shè)置:setRelativeAnchorPoint(false)時錨點(diǎn)為(0,0)或者調(diào)用setAnchorPoint指定相關(guān)信息,當(dāng)調(diào)用setAnchorPoint時setRelativeAnchorPoint方法無效CCSprite(精靈)原點(diǎn)CCSprite主要方法摘要錨點(diǎn)setRelativeAnchorPoint(booleanrelative)設(shè)置描點(diǎn),默認(rèn)值為true,當(dāng)設(shè)置錨點(diǎn)為(0,0)時使用falsesetAnchorPoint(floatx,floaty)設(shè)置錨點(diǎn)指定值,重載方法setAnchorPoint(CGPointanchor),CGPoint封裝了x、y信息坐標(biāo)setPosition(floatx,floaty)設(shè)置精靈的坐標(biāo)信息鏡像setFlipX(true)在x軸上的鏡像,setFlipY(true)在y軸上的鏡像,目標(biāo)是為了重用圖片資源添加精靈addChild(CCNodechild)Addsachildtothecontainerwithz-orderas0。依據(jù)添加順序決定顯示循序,即后添加的顯示在最前端。addChild(CCNodechild,intz)Addsachildtothecontainerwithaz-order。值越大顯示的優(yōu)先級越高。addChild(CCNodechild,intz,inttag)Addsachildtothecontainerwithzorderandtag。Tag指定精靈的id,默認(rèn)值是-1。透明度setOpacity(int)0-255之間,值越小越透明,反之越不透明CCSprite主要方法摘要CCSprite點(diǎn)擊事件分析CCSprite對象是否被點(diǎn)擊的判斷依據(jù)

在前面講解的小例子中,我們了解到,判斷是否用戶點(diǎn)擊了某些按鈕的圖片,是依據(jù)用戶點(diǎn)擊屏幕上的坐標(biāo)來完成的。在cocos2d中我們也需要依據(jù)用戶點(diǎn)擊屏幕的坐標(biāo)來判斷到底是哪個CCSprite對象被點(diǎn)擊了。但是由于在cocos2d中已經(jīng)將坐標(biāo)系統(tǒng)進(jìn)行調(diào)整了,所以當(dāng)判斷是否被點(diǎn)擊時需要將兩個坐標(biāo)系進(jìn)行統(tǒng)一。另外,由于每個精靈只對應(yīng)一個坐標(biāo)值,所以當(dāng)判斷CCSprite對象是否被點(diǎn)擊時,需要獲取整個CCSprite對象在屏幕上覆蓋的范圍,這需要結(jié)合錨點(diǎn)信息,同時獲取到CCSprite對象的寬度和高度。特別需要說明的是:處理用戶的觸摸事件是在CCLayer中。CCSprite點(diǎn)擊事件分析CCSprite對象是否被點(diǎn)擊的CCSprite點(diǎn)擊事件處理實(shí)現(xiàn)步驟創(chuàng)建類MyCCLayer繼承CCLayer類,重寫用戶觸屏事件的處理方法@OverridepublicbooleanccTouchesBegan(MotionEventevent){ returnsuper.ccTouchesBegan(event);}@OverridepublicbooleanccTouchesEnded(MotionEventevent){ returnsuper.ccTouchesEnded(event);}@OverridepublicbooleanccTouchesMoved(MotionEventevent){ returnsuper.ccTouchesMoved(event);}轉(zhuǎn)換屏幕坐標(biāo)到cocos2d坐標(biāo)系 調(diào)用CCNode.convertTouchToNodeSpace(MotionEventevent),將event中封裝的用戶點(diǎn)擊坐標(biāo)信息轉(zhuǎn)換成CGPoint對象判斷CGPoint對象是否在CCSprite對象的范圍之內(nèi)CCSprite點(diǎn)擊事件處理實(shí)現(xiàn)步驟判斷CGPoint對象是否在CCSprite對象的范圍之內(nèi)判斷思想獲取到當(dāng)前CCSprite對象,利用getChildByTag(int)計(jì)算這個CCSprite對象所占據(jù)屏幕的矩形范圍,CCNode.getBoundingBox()方法可以獲取到CCSprite對象占用的矩形范圍,這些信息封裝在CGRect信息中。判斷用戶的觸摸點(diǎn)是否包含在CGRect中,利用CGRect的方法containsPoint進(jìn)行判斷特別注意:如果讓CCLayer能處理用戶觸屏事件需要設(shè)置當(dāng)前的CCLayer.setIsTouchEnabled(true);判斷CGPoint對象是否在CCSprite對象的范圍之內(nèi)判CCLayer小結(jié)使用方法:創(chuàng)建類MyCCLayer繼承CCLayer類處理用戶觸摸事件用于管理CCSprite,控制CCSprite的添加和刪除CCLayer小結(jié)CCAction對于一個游戲來說,動作是非常重要的,好的動作可以使游戲的可玩性大大提高,在cocos2d引擎中有一個動作類,CCAction是動作類的基類,動作是定義在節(jié)點(diǎn)(CCNode)上的,以節(jié)點(diǎn)為目標(biāo),主要分為兩類瞬時動作和延時動作CCAction對于一個游戲來說,動作是非常重要的,好的動CCIntervalAction(延時動作)Cocos2d提供的基本延時類動作都提供了ActionTo和ActionBy兩種(七種):ActionTo是指動作結(jié)束的狀態(tài),也就是動作的終點(diǎn)。ActionBy是指動作執(zhí)行的狀態(tài),也就是動作的執(zhí)行過程。常用的延時動作類包括:移動動作:CCMoveBy

CCMoveTo縮放動作:CCScaleBy

CCScaleTo旋轉(zhuǎn)動作:CCRotateBy

CCRotateTo跳躍動作:CCJumpBy

CCJumpTo貝賽爾曲線動作:CCBezierBy

CCBezierTo淡入淡出動作:CCFadeBy

CCFadeIn

CCFadeOut……CCIntervalAction(延時動作)Cocos2d提CCIntervalAction(基本動作)位置變動移動(move)彈跳(jump)貝塞爾曲線運(yùn)動(bezier)漸快(EaseIn)漸慢(EaseOut)先漸快后漸慢特效,先緩沖再加速正弦曲線速度變化定點(diǎn)變動縮放(Scale)旋轉(zhuǎn)(Rotate)顏色漸變動作(Tint)閃爍(Blink)播放序列幀CCIntervalAction(基本動作)位置變動CCIntervalAction(組合動作)按順序執(zhí)行動作同時執(zhí)行要被執(zhí)行的動作間歇動作(中間暫停指定時間)CCIntervalAction(組合動作)按順序執(zhí)行動作CCAction——移動移動(CCMoveBy與CCMoveTo)創(chuàng)建對象:利用CCMoveBy(To).action(floatduration,CGPointpos)。參數(shù)說明:duration持續(xù)時間,pos代表目標(biāo)點(diǎn)不同點(diǎn):①CCMoveBy指定的CGPoint是相對坐標(biāo)即相對于當(dāng)前的需要移動的精靈。CCMoveTo指定CGPoint是絕對坐標(biāo)。②CCMoveBy將reverse()方法進(jìn)行了處理,而CCMoveTo返回null值。當(dāng)我們需要實(shí)現(xiàn)精靈的反復(fù)移動時使用CCMoveBy將很輕松的完成。應(yīng)用場景:如游戲過關(guān)后會有一個箭頭反復(fù)提示你前進(jìn)的路線。首先我們需要使用CCSequence將一組移動的效果添加到一起,實(shí)現(xiàn)單次往返,再利用CCRepeatForever實(shí)現(xiàn)反復(fù)動作。CCAction——移動移動(CCMoveBy與CCMoveCCAction——彈跳彈跳(CCJumpBy與CCJumpTo)創(chuàng)建對象:CCJumpBy(To).action(floattime,CGPointpos,floatheight,intjumps)參數(shù)說明:time代表持續(xù)時間,pos代表目標(biāo)點(diǎn),height代表跳躍的高度,jumps代表跳動次數(shù)區(qū)別:CCJumpBy將reverse()方法進(jìn)行了處理,可以用于實(shí)現(xiàn)重復(fù)動作;應(yīng)用場景:CCAction——彈跳彈跳(CCJumpBy與CCJumpCCAction——貝塞爾曲線運(yùn)動貝塞爾曲線運(yùn)動(CCBezierBy)創(chuàng)建對象:CCBezierBy(To).action(floatt,CCBezierConfigc)參數(shù)說明:t代表持續(xù)時間,c曲線參數(shù),CCBezierConfig.controlPoint_1起始點(diǎn)、CCBezierConfig.controlPoint_2頂點(diǎn)、CCBezierConfig.endPosition終點(diǎn)應(yīng)用場景:子彈,pvz中屋頂關(guān)卡CCAction——貝塞爾曲線運(yùn)動貝塞爾曲線運(yùn)動(CCBeCCAction——漸快漸快(CCEaseIn)對象創(chuàng)建:CCEaseIn.action(CCIntervalActionaction,floatrate)參數(shù)說明:action被控制的動作,rate加速度,如果為1就勻速了漸慢:CCEaseOut與CCEaseIn參數(shù)一致,動作相反CCAction——漸快漸快(CCEaseIn)CCAction——縮放縮放(CCScaleBy與CCScaleTo)創(chuàng)建對象:CCScaleBy(To).action(floatt,floats)參數(shù)說明:t代表持續(xù)時間,s代表縮放比例區(qū)別:CCScaleBy將reverse()方法進(jìn)行了處理,可以用于實(shí)現(xiàn)重復(fù)動作應(yīng)用場景:心跳CCAction——縮放縮放(CCScaleBy與CCScaCCAction——旋轉(zhuǎn)旋轉(zhuǎn)(CCRotateBy與CCRotateTo)創(chuàng)建對象:CCRotateBy(To).action(floatt,floata)參數(shù)說明:t代表持續(xù)時間,a代表旋轉(zhuǎn)角度區(qū)別:①CCScaleBy將reverse()方法進(jìn)行了處理,可以用于實(shí)現(xiàn)重復(fù)動作;②CCRotateTo以最便捷的方式旋轉(zhuǎn)到指定角度,如旋轉(zhuǎn)角度為300時,使用CCRotateTo來實(shí)現(xiàn)的話會逆時針旋轉(zhuǎn)60度應(yīng)用場景:進(jìn)度條旋轉(zhuǎn)、旗子的左右擺動等特別注意:旋轉(zhuǎn)動作是沿著錨點(diǎn)完成的,所以需要結(jié)合錨點(diǎn)統(tǒng)一協(xié)調(diào)旋轉(zhuǎn)動作CCAction——旋轉(zhuǎn)旋轉(zhuǎn)(CCRotateBy與CCRoCCAction——顏色漸變動作顏色漸變動作(CCTintBy與CCTintTo)創(chuàng)建對象:CCTintBy(To).action(floatt,ccColor3Bc)參數(shù)說明:t:時間間隔,c:RGB三色值封裝對象區(qū)別:①CCTintBy對reverse()方法實(shí)現(xiàn);②CCTintBy需要設(shè)置的RGB三色值是相對值,即相對于當(dāng)前的RGB值進(jìn)行變動。應(yīng)用場景CCAction——顏色漸變動作顏色漸變動作(CCTintCCAction——閃爍閃爍(CCBlink)對象創(chuàng)建:CCBlink.action(floatt,intb)參數(shù)說明:t間隔時間,b閃爍次數(shù)CCAction——閃爍閃爍(CCBlink)CCAction——播放序列幀CCAction——播放序列幀CCAction——連續(xù)動作連續(xù)動作CCSequence對象創(chuàng)建:CCSequence.actions(CCFiniteTimeActionaction1,CCFiniteTimeAction...actions)對象說明:用于按順序執(zhí)行一連串動作CCAction——連續(xù)動作連續(xù)動作CCSequenceCCAction——并發(fā)動作并發(fā)動作CCSpawn對象創(chuàng)建:CCSpawn.actions(CCFiniteTimeActionaction1,CCFiniteTimeAction...params)參數(shù)說明:指定一連串動作同時觸發(fā),如在跳躍過程中執(zhí)行一個旋轉(zhuǎn)動作。CCAction——并發(fā)動作并發(fā)動作CCSpawnCCAction——間歇動作間歇動作(CCDelayTime)對象創(chuàng)建:CCDelayTime.action(floatt)參數(shù)說明:t停止時間CCAction——間歇動作間歇動作(CCDelayTime即時動作(CCInstantAction)瞬時動作:就是不需要時間,馬上就完成的動作。Cocos2d提供以下瞬時動作:放置–Place效果類似于node.Position=ccp(x,y)。之所以作為一個動作來實(shí)現(xiàn)是為了可以與其他動作形成一個連續(xù)動作。隱藏–Hide效果類似于[nodesetVisible:NO].之所以作為一個勱作來實(shí)現(xiàn)是為了可以與其他動作形成一個連續(xù)動作。顯示–Show效果類似于[nodesetVisible:YES].之所以作為一個動作來實(shí)現(xiàn)是為了可以與其他動作形成一個連續(xù)動作。可見切換–ToggleVisibility即時動作(CCInstantAction)瞬時動作:就是不需CCAction——顯示隱藏可見性(CCHide與CCShow)對象創(chuàng)建:調(diào)用action方法即可,無參數(shù)CCAction——顯示隱藏可見性(CCHide與CCShoCCAction——無限動作無限動作CCRepeatForever無限制的執(zhí)行一個延時動作,通常用于連續(xù)執(zhí)行一連串的重復(fù)動作,這些動作多放置在CCSequence中進(jìn)行定義。CCAction——無限動作無限動作CCRepeatForeCocosDenshionAudio聲音引擎SoundEngine處理聲音聲音類型:音樂和音效可以從長短上來做區(qū)分,音樂一般用于游戲的背景聲音,音效主要是短小的聲音,如植物發(fā)射子彈,僵尸吃植物時發(fā)出的聲音聲音控制,如播放、暫停、聲音大小調(diào)節(jié)、靜音通過緩存音樂和音效文件來提高聲音處理的效率CocosDenshionAudio聲音引擎SoundEn小案例故事情景: 在一個九曲十八彎的小路上,一個僵尸冒著大雪前行。最后雪停了,僵尸高興的跳起了騎馬舞。小案例故事情景:案例分析元素分析地圖(Tiled繪圖工具)僵尸飄雪的場景背景音樂切換案例分析元素分析游戲地圖制作地圖制作工具:Tiled繪圖工具圖層:展示整體效果塊層:依據(jù)塊劃分圖片后,整張圖片會變成一個塊層塊:塊層中的一個單元對象層:單獨(dú)一層,放置一些指定的對象游戲地圖制作地圖制作游戲地圖加載加載:CCTMXTiledMap.tiledMap(name);添加到當(dāng)前顯示層,存在問題:無法進(jìn)行圖片的移動用戶的touch事件處理:setIsTouchEnabled(true);CCTMXTiledMap.touchMove(MotionEventevent,CCTMXTiledMaptiledMap);存在問題:地圖移動獲取圖片大小,設(shè)置圖片位置為寬高的一半設(shè)置錨點(diǎn)為0.5,0.5游戲地圖加載加載:CCTMXTiledMap.tiledMa對象層加載對象層功能保存著僵尸需要移動的點(diǎn)的坐標(biāo)信息加載<objectgroupname="road"width="13"height="6"><objectx="26"y="80"/></objectgroup> CCTMXTiledMap.objectGroupNamed(StringgroupName);獲取到CCTMXObjectGroup對象,該對象的objects字段中存儲著對象層中元素信息,對該集合進(jìn)行遍歷,獲取其中保存的坐標(biāo)信息。對象層加載對象層功能僵尸動作移動規(guī)則:僵尸需要按照點(diǎn)的先后順序進(jìn)行連續(xù)移動實(shí)現(xiàn)方式:方案一:每次移動都創(chuàng)建一個動作,按順序添加到CCSequence中方案二:遞歸方案三:執(zhí)行回調(diào)動作(CCCallFunc),在動作執(zhí)行完成后立即執(zhí)行的動作。通過反射調(diào)用一個指定的方法,方法里面完成后續(xù)相關(guān)動作行走過程中播放序列幀利用CCAnimate動作來完成CCAnimation中指定的一組圖片的播放CCAnimationanim=CCAnimation.animation("",0.2f,frames);//在初始化時完成frames的處理privateArrayList<CCSpriteFrame>frames;//添加序列幀frames=newArrayList<CCSpriteFrame>();for(inti=1;i<=7;i++){ //CCSpriteitem=CCSprite.sprite(String.format("z_1_0%d.png",i));//應(yīng)對十以內(nèi)

CCSpriteitem=CCSprite.sprite(String.format("z_1_%02d.png",i));//應(yīng)對百以內(nèi)

CCSpriteFrameframe=item.displayedFrame(); frames.add(frame);}CCAnimateanimate=CCAnimate.action(anim);僵尸動作移動規(guī)則:僵尸需要按照點(diǎn)的先后順序進(jìn)行連續(xù)移動粒子系統(tǒng)——飄雪場景什么是粒子系統(tǒng) 粒子系統(tǒng)表示三維計(jì)算機(jī)圖形學(xué)中模擬一些特定的模糊現(xiàn)象的技術(shù),而這些現(xiàn)象用其它傳統(tǒng)的渲染技術(shù)難以實(shí)現(xiàn)的真實(shí)感的gamephysics。經(jīng)常使用粒子系統(tǒng)模擬的現(xiàn)象有火、爆炸、煙、水流、火花、落葉、云、霧、雪、塵、流星尾跡或者象發(fā)光軌跡這樣的抽象視覺效果等等。實(shí)現(xiàn)步驟:CCParticleSystemsystem=CCParticleSnow.node();system.setTexture(CCTextureCache.sharedTextureCache().addImage("f.png"));this.addChild(system,1);自定義效果:制作工具ParticleDesigner,使用工具將效果導(dǎo)出成.plist文件CCParticleSystemps=CCParticleSystemPoint.particleWithFile("f.plist");ps.setPosition(0,winSize.height);addChild(ps);粒子系統(tǒng)——飄雪場景什么是粒子系統(tǒng)游戲暫停處理處理游戲暫停思路當(dāng)前的主CCLayer處于暫停狀態(tài),處于暫停狀態(tài)的CCLayer無法接收到用戶的觸摸事件在主CCLayer暫停之前需要啟動另外一個CCLayer顯示,除提示玩家游戲已經(jīng)暫停外,如果玩家需要切換到游戲界面需要點(diǎn)擊當(dāng)前的CCLayer中的按鈕完成繼續(xù)游戲的處理。注意:1、該暫停用CCLayer必須添加到與主CCLayer相同的parent下,不能再主CCLayer繼續(xù)添加2、點(diǎn)擊完成時需要清除當(dāng)前顯示的CCLayer核心方法:onEnter()——游戲繼續(xù)

onExit()——游戲暫停游戲暫停處理處理游戲暫停思路植物vs僵尸界面構(gòu)成歡迎界面(界面展示logo等信息)主界面(游戲模式選擇)對戰(zhàn)界面植物vs僵尸界面構(gòu)成歡迎界面背景音樂播放背景音樂機(jī)音效的預(yù)加載 創(chuàng)建BaseLayer,管理各個界面用到的公共信息,在BaseLayer中利用SoundEngine加載背景音樂,同時加載按鈕的點(diǎn)擊音效,由于這些資源只需要加載一次,所以在靜態(tài)代碼塊中完成。圖片資源加載Logo展示進(jìn)度條處理版本信息加載更新版本獲取歡迎界面背景音樂播放菜單界面CCMenu菜單使用調(diào)用CCMenumenu=CCMenu.menu();獲取CCMenu對象。通過給menu添加CCMenuItem完成菜單項(xiàng)的添加。CCMenuItem菜單項(xiàng)調(diào)用CCMenuItemitem=CCMenuItemSprite.item(CCSprite.sprite(resPath+“start_adventure_default.png”),CCSprite.sprite(resPath+“start_adventure_press.png”),this,“onClick”);創(chuàng)建菜單項(xiàng)參數(shù)說明:第一個參數(shù)為按鈕默認(rèn)顯示的內(nèi)容,第二個參數(shù)為點(diǎn)擊時顯示的內(nèi)容,第三個參數(shù)指定目標(biāo)對象(利用反射調(diào)用指定對象的方法),第四個參數(shù)為調(diào)用的方法名(查看代碼,該方法需要傳遞一個Object的參數(shù))菜單界面CCMenu菜單使用對戰(zhàn)地圖展示植物選擇開始游戲?qū)?zhàn)處理對戰(zhàn)地圖展示地圖展示展示對戰(zhàn)界面(展示時間:一秒鐘)獲取展示僵尸點(diǎn)位信息添加展示用僵尸,伴隨著序列幀的播放平移地圖,顯示展示用僵尸地圖展示展示對戰(zhàn)界面(展示時間:一秒鐘)地圖加載和僵尸展示利用CCTMXTiledMap處理地圖,地圖無需處理拖動設(shè)置錨點(diǎn)為中心位置設(shè)置坐標(biāo)為地圖的中心解析地圖中僵尸位置信息CCTMXTiledMap.objectGroupNamed(StringgroupName)獲取指定名稱的CCTMXObjectGroup獲取CCTMXObjectGroup中objects信息,獲取到分別以x和y為key存儲的點(diǎn)位信息在這些點(diǎn)中任選部分點(diǎn)展示僵尸(僵尸原地不動的動作幀播放),對創(chuàng)建好的僵尸需要保存到一個容器當(dāng)中,當(dāng)?shù)貓D移動到對戰(zhàn)界面時這些僵尸需要被銷毀地圖加載和僵尸展示利用CCTMXTiledMap處理地圖,地界面展示順序?qū)?zhàn)地圖展示后停頓1秒動作的載體:地圖移動到僵尸展示界面動作的載體:地圖1秒鐘后展示所有植物和植物選擇框動作的載體:已選和可選容器實(shí)現(xiàn)方式:在地圖的系列動作后添加CCCallFunc也可以利用CCCallFuncND指定參數(shù)在同一個方法中完成一系列動作界面展示順序?qū)?zhàn)地圖展示后停頓1秒植物選擇顯示兩個容器玩家已選植物容器準(zhǔn)備玩家已有植物信息玩家已有植物容器玩家選擇植物選擇植物的處理取消植物的處理植物選擇顯示兩個容器植物信息加載封裝展示用植物唯一標(biāo)示:預(yù)加載部分植物信息,模擬用戶已有植物,每種植物均分配一個唯一標(biāo)示信息,創(chuàng)建bean對象時需要指定該標(biāo)示信息圖片:顯示植物的圖片當(dāng)用戶選擇后需要在原地留有一個灰色的圖片消耗陽光數(shù)預(yù)加載部分植物信息構(gòu)造中指定標(biāo)示信息,設(shè)置圖片錨點(diǎn)(0,0),背景圖改變透明度(100)植物信息加載封裝展示用植物植物選擇處理步驟:判斷用戶touch點(diǎn)在可選容器中還是已選容器中在可選容器中需要判斷是否點(diǎn)擊的是“一起搖滾吧”當(dāng)點(diǎn)擊可選容器中的植物時,需要循環(huán)當(dāng)前可選容器中的植物信息,判斷那個植物被點(diǎn)擊,將點(diǎn)擊的植物移動到已選容器中,目標(biāo)點(diǎn)需要依據(jù)已選容器中信息判斷在已選容器中判斷那個植物被點(diǎn)擊,點(diǎn)擊植物移動到保留的初始點(diǎn)在被點(diǎn)擊植物后面的植物需要進(jìn)行前移一個位置的動作植物選擇處理步驟:開始游戲“一起搖滾”點(diǎn)擊,但此時并沒有真正的開啟游戲,需要限制用戶操作已選植物判斷限制用戶選擇植物個數(shù)向日葵檢查清理展示用僵尸清理玩家已有植物容器對用戶已選植物容器進(jìn)行處理移動地圖到對戰(zhàn)界面播放一組序列幀(準(zhǔn)備……安放……植物……)將播放序列幀精靈清除真正游戲開始,傳遞信息到游戲控制類地圖(對戰(zhàn)layer)+玩家選擇植物開始游戲“一起搖滾”點(diǎn)擊,但此時并沒有真正的開啟游戲,需要限對戰(zhàn)處理戰(zhàn)場劃分將整個對戰(zhàn)地圖劃分為五個行戰(zhàn)場,以行為單位處理業(yè)務(wù),當(dāng)一個行戰(zhàn)場業(yè)務(wù)處理完成后,整個對戰(zhàn)地圖對戰(zhàn)業(yè)務(wù)完成戰(zhàn)場元素對戰(zhàn)處理戰(zhàn)場劃分對戰(zhàn)基本元素BaseElement繼承CCSprite處理內(nèi)容:創(chuàng)建:通過構(gòu)造指定元素圖片信息基本動作消亡(死亡監(jiān)聽)包含的內(nèi)容:產(chǎn)物、僵尸、植物對戰(zhàn)基本元素BaseElement繼承CCSprite產(chǎn)物包括子彈、陽光、金幣信息處理內(nèi)容:通過構(gòu)造指定元素圖片信息產(chǎn)物包括子彈、陽光、金幣信息產(chǎn)物——子彈子彈類型:豌豆(一個或多個)、其他類型屬性:傷害值、移動速度方法:移動產(chǎn)物——子彈子彈類型:豌豆(一個或多個)、其他類型僵尸處理內(nèi)容:構(gòu)造傳遞資源圖片屬性記錄僵尸運(yùn)動的起點(diǎn)和終點(diǎn)攻擊力、移動速度、生命值動作處理攻擊、被攻擊、移動僵尸處理內(nèi)容:植物處理內(nèi)容植物分類:生產(chǎn)、攻擊、防御植物屬性:生命值、所處的行列號、射程(塊數(shù))將所有植物的錨點(diǎn)定義在(0.5f,0)被攻擊處理(可以在當(dāng)前類中完成)對生命值進(jìn)行減少操作,減少依據(jù)傳遞的參數(shù)信息,當(dāng)生命值小于等于零時,銷毀植物植物處理內(nèi)容植物——防御植物處理內(nèi)容:大生命值堅(jiān)果:生命值:200原地?fù)u擺植物——防御植物處理內(nèi)容:大生命值植物——生產(chǎn)植物處理內(nèi)容:生產(chǎn)功能(每隔一個時間段觸發(fā)),產(chǎn)品包括:陽光、金幣向日葵:生命值:100生產(chǎn)功能:開啟定時任務(wù),每隔5秒生產(chǎn)一個陽光植物——生產(chǎn)植物處理內(nèi)容:生產(chǎn)功能(每隔一個時間段觸發(fā)),產(chǎn)植物——攻擊植物處理內(nèi)容:建立存儲子彈的集合攻擊方式:創(chuàng)建攻擊用子彈監(jiān)聽子彈的消亡當(dāng)子彈消亡時需要從集合中清除植物——攻擊植物處理內(nèi)容:產(chǎn)物——陽光生成方式:由生產(chǎn)植物創(chuàng)建(向日葵、陽光菇)系統(tǒng)生成依據(jù)陽光數(shù)量多少進(jìn)行劃分(大小)動作處理:基本動作:圍繞中心點(diǎn)旋轉(zhuǎn)移動動作:指定起始點(diǎn)、頂點(diǎn)和終點(diǎn)陽光收集:利用集合保存生成陽光,當(dāng)被用戶收集或到時自動從集合中清除保存陽光總數(shù),當(dāng)用戶收集時數(shù)量變化產(chǎn)物——陽光生成方式:產(chǎn)物——普通豌豆基本配置速度:60攻擊力:100移動動作:移動的起始點(diǎn)植物,終點(diǎn)地圖邊緣,如果這之間存在僵尸則遇到僵尸消失產(chǎn)物——普通豌豆基本配置初級僵尸——基本動作構(gòu)造處理:無參構(gòu)造——用于展示僵尸種類有參構(gòu)造——指定起始點(diǎn)和終點(diǎn)僵尸圖片確定屬性處理:設(shè)置生命值(100)、攻擊力(10)、移動速度(10)幀動作處理:基本動作、移動、攻擊、被攻擊(移動中死亡、攻擊中死亡)初級僵尸——基本動作構(gòu)造處理:初級僵尸——行走計(jì)算完成移動的時間利用公式:t=s/v計(jì)算僵尸當(dāng)前的位置到移動的終點(diǎn)的距離利用設(shè)置好的速度值(10),完成移動動作當(dāng)僵尸移動到終點(diǎn)時觸發(fā)gameover移動過程中伴隨著行走序列幀的播放初級僵尸——行走計(jì)算完成移動的時間初級僵尸——攻擊記錄僵尸攻擊狀態(tài),當(dāng)僵尸已經(jīng)處于攻擊狀態(tài)時不觸發(fā)再次攻擊如果僵尸未處于攻擊狀態(tài)時修改攻擊狀態(tài)記錄攻擊目標(biāo)停止當(dāng)前所有動作開啟攻擊動作持續(xù)殺傷開啟定時任務(wù),每隔0.5秒完成一次減血操作每次減血前判斷當(dāng)前攻擊目標(biāo)的生命值當(dāng)生命值大于零時,調(diào)用被攻擊目標(biāo)的被攻擊方法,傳遞當(dāng)前僵尸的攻擊力當(dāng)生命值小于零時停止攻擊定時任務(wù)修改攻擊狀態(tài)停止攻擊動作開啟行走動作初級僵尸——攻擊記錄僵尸攻擊狀態(tài),當(dāng)僵尸已經(jīng)處于攻擊狀態(tài)時不初級僵尸——被攻擊判斷生命值,當(dāng)生命值大于零時減少生命值,依據(jù)傳遞的攻擊力數(shù)值進(jìn)行處理當(dāng)生命值小于零時停止僵尸的所有動作播放僵尸腦袋掉下來的序列幀,之后播放慢慢趴在地上的序列幀,最后僵尸銷毀。如果此時將死在攻擊植物,需要停止攻擊植物的定時任務(wù)。初級僵尸——被攻擊判斷生命值,當(dāng)生命值大于零時攻擊植物——豌豆射手基本屬性生命值100攻擊方式普通攻擊植物:生產(chǎn)豌豆設(shè)置豌豆的基本參數(shù)調(diào)用豌豆的移動方法將豌豆添加到當(dāng)前的CCLayer中添加豌豆到豌豆射手的子彈集合中當(dāng)生產(chǎn)出的豌豆沒有消失前,攻擊植物不會再創(chuàng)建豌豆建立子彈與植物的監(jiān)聽關(guān)系,當(dāng)子彈消亡時需要將子彈從植物的集合中清除攻擊植物——豌豆射手基本屬性對戰(zhàn)業(yè)務(wù)戰(zhàn)場控制對戰(zhàn)邏輯處理交由游戲控制類完成GameContorller初始化行戰(zhàn)場,為每個行戰(zhàn)場指定一個行號控制僵尸的添加處理用戶的添加植物操作陽光數(shù)管理每一獨(dú)立的行戰(zhàn)場由FightLine進(jìn)行管理僵尸攻擊植物植物攻擊僵尸對戰(zhàn)業(yè)務(wù)戰(zhàn)場控制游戲控制——添加僵尸僵尸行進(jìn)路線加載添加僵尸到行戰(zhàn)場在行戰(zhàn)場中創(chuàng)建一個集合,用于存儲添加到當(dāng)前行中的僵尸戰(zhàn)場控制

溫馨提示

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

最新文檔

評論

0/150

提交評論