cocos2d-x 泡泡小程序

今天分享的這個小程序所有人都不陌生,就是小時候電腦的泡泡屏保。

廢話不多說先來效果演示。

http://www.hanxiaobai.cn/wp-content/uploads/2018/05/

(ps:本視頻沒有激情澎湃的bgm所以無需打開聲音,如果你還是執(zhí)意要打開請無視室友打呼嚕的聲音 _!)。

看完了low low的效果演示估計已經(jīng)不會再有多少人往下看了 ,因為確實so easy,但是我要告訴你們的是,我并沒有使用任何物理引擎?。。《亲约菏智玫呐鲎矙z測?。?! 。。。。。。好吧雖然這也沒有技術(shù)難度,但我還是要堅持我臭不要臉的吹逼精神繼續(xù)往下說。

先說大致思路吧,每創(chuàng)建一個泡泡就扔到實體池中,實體池存放著所有的實體,然后每一幀都判斷任意兩個實體間會不會發(fā)生碰撞以及會不會撞壁,如果有碰撞就改變泡泡運行軌跡。(具體怎么改變往下看,嘿嘿??)。

先從實體池開始說吧,這個其實和什么SpriteFrameCache,xxxxxxCache 道理一樣用了單例模式,用來存放所有的泡泡,以及處理泡泡之間的碰撞的方法。

這里我具體說明一下碰撞檢測的方法:

發(fā)生碰撞的無非就是泡泡與手機(jī)屏幕邊的碰撞,或者泡泡與泡泡之間的碰撞這兩種情況。實體池中用一個vector容器存放了所有的泡泡,用迭代器來遍歷這些泡泡查看哪些發(fā)生了碰撞。如何判斷是否發(fā)生碰撞呢,先說和屏幕邊的檢測方式,圓形與屏幕邊的距離不能小于或等于半徑。(這里可能會有人問為什么還要小于,等于的時候不就已經(jīng)碰撞了嗎?舉個例子說明,比如泡泡運動的速度為一幀2個像素,碰撞檢測也是毎幀判斷一次,那么會出現(xiàn)某一幀泡泡已經(jīng)越過了屏幕1個像素,碰撞檢測才開始進(jìn)行判斷,那么就已經(jīng)晚了。)這里還有一個要注意的地方,我先寫一個偽代碼好便于說明。

if(泡泡圓心到屏幕邊的距離 <= 泡泡的半徑){

泡泡向反方向進(jìn)行運動;

//這里實際寫代碼并不是這么簡單,但這里要說明的問題和它無關(guān)所以先簡單寫。

}

這樣寫會發(fā)生什么樣的事情呢,當(dāng)泡泡已經(jīng)越過屏幕邊的時候,我們的碰撞檢測發(fā)現(xiàn)到了這一情況,并讓它反方向運動,還OK,但是當(dāng)下一幀泡泡即使反方向運動了卻還是沒來得及完全脫離屏幕邊框呢,這時我們愛管閑事的碰撞檢測小兄弟又來了:“你碰撞了,快給我反向運動!” 就這樣反反復(fù)復(fù),這個泡泡就會在屏幕邊上鬼畜起來。那應(yīng)該怎么辦呢,對!在判斷條件上再多加點約束,改成這樣 泡泡圓心到屏幕邊的距離小于半徑 && 泡泡向著該邊方向運動 。這回就完全ok了。

接下來該考慮泡泡們之間的碰撞檢測了,遍歷過程就是,每兩個泡泡之間都做一次檢測,檢測條件就是,兩個泡泡的圓心距小于兩個泡泡的半徑和就是發(fā)生碰撞了,當(dāng)然同理與屏幕的檢測方式,還需要判斷兩個泡泡運動方向是不是相對的。

(PS:如何判斷運動方向呢?我在泡泡類中設(shè)置了兩個屬性分別是,X軸運動速度(左負(fù)右正)和Y軸運動速度(上正下負(fù)),然后就用這兩個量去判斷就ok了)

大道理我也不會講去問自己的初中物理老師吧如果還有聯(lián)系的話,嘿嘿傲嬌臉,我就直接上圖了。

1.png

左邊是撞壁前,右邊是撞壁后。

2.png

這個是泡泡之間的碰撞(紅色是初始XY軸速度方向,藍(lán)色是碰撞后改變的,綠色是初始運動方向,黃色是碰撞后運動方向)。

看到這里你們就應(yīng)該懂了在判斷碰撞后如何改變運動方向了吧。其實就是哪軸的速度方向被檢測到了有碰撞發(fā)生就變成相反數(shù)就ok了。

(這塊可能有人會問運動方向怎么辦難道還有再算一下?不用的,泡泡運動就用MoveBy這個類創(chuàng)建就行了)。

okok,這個小程序就講到這把,還有不明白的歡迎來搔,希望能和喜歡游戲開發(fā)的童鞋們一起多多交流。_

最后附上我的源代碼

代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)據(jù)鏈路層使用的信道有以下兩種類型: ①點對點信道,一對一的點對點通信方式 ②廣播信道,一對多的廣播通信方式,復(fù)雜...
    dmmy大印閱讀 3,495評論 0 3
  • 下午值班時和同事聊起孩子的學(xué)習(xí),我說希望孩子學(xué)習(xí)更好點,能夠進(jìn)入年級前十名將來考個重本。 她說,你當(dāng)初怎么沒考...
    白丁2009閱讀 610評論 1 0
  • 又到了高考,去年今天這樣的中午,大概睡不了這么安然。 我是復(fù)讀過的孩子,不是想以過來人的身份說很多。只是希望有人看...
    瀟悅源閱讀 255評論 0 2
  • 上大學(xué)以來,陸陸續(xù)續(xù)有過幾個追求者,(其實追求者也算不上,因為我實在沒感受到是在追我),先不論他們的行為,從他們幾...
    果安安閱讀 815評論 0 0

友情鏈接更多精彩內(nèi)容