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