碰撞球小游戏开发总结
?最近有空的時候自己用java開發了一個小游戲,也算是彌補自己對這方面的空白。其實游戲開發中考慮的東西大部分都一樣,比如碰撞檢測,背景位移,計分,生命值計算等。在開發碰撞球的過程中,對android中的SurfaceView跟Rect與RectF有了進一層的認識。
預覽圖
?
?
?
1.基本組成:
?游戲比較簡單,主要角色對象分為三類,如下圖所示,Brike,Ball,Staff.
?
Brike:抽象類,因為需要存在兩種不同的磚塊,它們既存在相同的屬性值,也存在不同的方法與屬性。RedBrike(紅磚)與WhiteBrike(白磚);
?
Ball:為運動時的球。
?
Staff:為以下接球的桿
?
BG:使用SurfaceView繪制的背景
?
?
2:技術點
?
1.圖像位移
游戲制作過程中,如果讓圖片動起來是一件很重要的事情。其實主要是依靠二點,一個是SurfaceView的不停繪制,一個是動畫本身對象坐標值的改變.例如在上述中,如何讓我們的球動起來,這里我們在Ball類中存在一個方法,
public?void?fly()?{
float?tempX?=?x?+?velocity_x;
float?tempY?=?y?+?velocity_y;
if?(needfly(tempX,?tempY))?{
x?=?tempX;
y?=?tempY;
float?v?=?(float)?Math.sqrt(velocity_x?*?velocity_x?+?velocity_y
*?velocity_y);
bmpIndexf?=?bmpIndexf?+?Constant.K?*?v;
bmpIndex?=?(int)?(bmpIndexf)?%?ballpics.length;
}
}
在主視圖中啟動一個循環線程來執行上述動作,然后SurfaceView去繪制,自然就達到了移動的效果,背景移動也是一樣,通過更改背景繪制坐標值來達到背景移動的目的。
?
?2.碰撞檢測
?
游戲中,我們常常需要處理2個物體中間的碰撞事件,例如我要制作一款飛機大戰的游戲,如何才能知道飛出去的子彈擊中了敵軍的對象呢??在游戲中,我對球與磚與桿的碰撞檢測是使用RectF與Rect來完成的。Ball中的x,y軸坐標值為圓心點的坐標值,碰撞檢測的時候,是用(x+r,y),(x-r,y),(x,y+r),(x,y-r)與Staff或者Brike中的RectF對象來比對,如果Recf.contans(Point)?為true的話,我們可以認為兩者存在碰撞的事件。
?
3.矩陣
Matrix?m1?=?new?Matrix();//?平移矩陣
m1.setTranslate(x?+?Constant.X_OFFSET,?y?+?Constant.Y_OFFSET);
Matrix?m2?=?new?Matrix();//?旋轉矩陣
m2.setRotate(angel,?rotateX,?rotateY);
Matrix?mz?=?new?Matrix();//?綜合矩陣
mz.setConcat(m1,?m2);
?這里處理的意思,在于球的角度變化,一旦存在碰撞的事件,那么球則以(180-angel)的方式反射出去。
4.關卡設計
????主繪制類中定義失敗與勝利的方法,在Ball碰撞檢測中判斷,如果當前Ball的生命值為0,并且Ball的個數為0。則判斷失敗,如果Brike集合為0,則進入下一關,只需將所有的Brike集合充值即可,至于如何設計關卡難度,當然是見仁見智了。
?
游戲還存在一些問題,比如使用canvas繪制的時候,有時候對象會丟失canvas對象。一個簡單的游戲基本上包含上述元素,安卓中使用Java來做游戲的效果并不理想,不過用來學習SurfaceView的使用還是蠻不錯的。
下面給出源碼(可以直接運行)。
http://download.csdn.net/detail/zjfengdou30/8207195
總結
以上是生活随笔為你收集整理的碰撞球小游戏开发总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会计准则中计算机软件费用摊销,财务软件累
- 下一篇: 渗透技巧之403绕过_指纹识别