1. 程式人生 > >【Android遊戲開發二十】物理遊戲之重力系統開發,讓你的遊戲變得有質有量!

【Android遊戲開發二十】物理遊戲之重力系統開發,讓你的遊戲變得有質有量!

原創,轉載務必在明顯處註明:

    今天群裡一哥哥說急需關於物理遊戲方面的資料,so~下午就隨手寫了一個簡單的圓形自由落體Demo,正好一起分享給大家學習下吧;

    先大概說一下,之前的文章中,給大家介紹過重力感測器,那麼和今天要說的重力系統,其實是一樣的!

    在重力感測器中,雖然我也實現了一個圓形會根據手機反轉的角度而擁有不同的速度,但是其內建加速度演算法都是Android os封裝好的,而今天我們要講的重力系統就是去模擬這個加速度,從而讓一個自由落體的圓形,感覺跟現實中的皮球一樣有質有量!下落的時候速度加快,反彈起來以後速度慢慢減下來~

OK,先上兩張截圖,然後簡單介紹之後進行講解:

                           

Demo:簡介:(咳咳、玩的有點H,狂點按鈕搞的滿屏都是 - -)

      當你點選模擬器任意按鍵的時候會隨機在螢幕上生成一個隨機大小、隨即顏色、隨即位置、不停閃爍的一個圓形,並且圓形都擁有重力,在做自由落體,當圓形觸到螢幕底部的時候會反彈,並且反彈的高度一次比一次低!

      這個例項中,為了好看,我沒有讓圓形最終慢到停下來,會一直在一個高度進行的反彈,下落;

還有一點:對於圓形當從一個高度自由落體的時候可能它在X座標系上沒有發生改變,當然這是在我們程式碼中,屬於理想狀態,因為現實生活中,一般X/Y座標系都會有變動,在此Demo中,我主要把垂直下落並且反彈的功能做出來了,關於水平的加速度我沒做,第一是因為和垂直的處理思路基本一致,第二點我沒時間 - -...

好了 不廢話!先介紹一下我自定義的圓形類:

MyArc.java


 

程式碼比較簡單主要講解下幾個備註:

備註1:

       估計有些同學看到這裡有點小暈,我解釋下,大家都知道自由落體的時候,速度是越來越快的,這是受到加速度的影響,所以這裡我們對原有的圓形y速度基礎上再加上加速度! 

備註2:

雖然加速度影響了圓形原有的速度,但是我們的加速度也不是恆定的,為了模擬真實球體的自由下落,這裡我們不僅對加速度增加了偏移量ACC,而且我們還要對其變化的規律進行模擬,讓下次的加速度偏移量成倍增加!所以為什麼要for迴圈的時候把加速度的值當成for迴圈的一個判定條件!

好了,下面來看我們SurfaceView!

 

OK,程式碼都很簡單,也很清晰! 稍微說一句:像MyArc裡面也有類似MysurfaceView中一樣的方法 logic() 以及draw()這樣是更好的管理我們的程式碼結構,清晰思路,讓該幹什麼的就去幹什麼,這樣省的亂~  

原始碼下載地址:

                           補充下://備註1 這裡!有的童鞋說for迴圈可以簡寫:這我就要提示各位童鞋了~

for (int i = 0; i < count; i++) { 

         vertical_speed += ACC;

} 

以上程式碼確實可以用一句來表示:

               vertical_speed +=ACC*count;     或者    vertical_speed  =vertical_speed + ACC*count;

但是要注意:因為我這裡變數都是浮點數,大家都知道對於浮點數有位數的限制,那麼我這裡用for來寫可以避免乘積,如果簡寫的形式會有造成得到的結果有差異!!!!所以要注意;

               還有千萬不要簡寫成 vertical_speed =(vertical_speed +ACC)*count; 這是錯誤的!