編輯:Android開發實例
前一章中,我們創建了游街場景,這一章中,我們開始最重要的一章,創建游戲世界,期待已久的box2d物理引擎也要登場了!
之前所做的,都是在游戲場景中畫出一些靜態圖片。不能多物理場景進行模擬。接下來就要創建一個模擬的世界。我們的游戲就將在這個世界中進行模擬。在創建游戲世界之前要確定已經引入了最新版本的jbox2d。 但前jbox2d的最新版本為2.1.2。接下來的代碼都是針對2.1.2進行開發的。
需要添加一些變量
- //添加一個世界需要的變量--->>>
- private final float RATE = 30; //屏幕到現實世界的比例 30px:1m;為了能夠真實的模擬現實世界,在jbox2d中,所有的單位都是以米為標准的。所以需要設定一個屏幕到現實世界的比例。在屏幕中30像素代表現實世界中的1米。
- private World world; //物理世界
- private Vec2 gravity;// 聲明一個重力向量對象
- private float timeStep = 1f / 60f;// 物理世界模擬的的頻率
- private int iterations = 10;// 迭代值,迭代越大模擬越精確,但性能越低
- 然後再MainView構造方法中對變量進行初始化。
- // --添加一個物理世界--->>
- gravity = new Vec2(0f, 10f); // 模擬顯示世界的重力 橫向重力為0,縱向重力為10
- world = new World(gravity, true); // 為游戲世界添加重力,並且使世界處於睡眠狀態,當物體進行改變時,在喚醒世界。這樣可以很好的節省系統資源。
通過以上的代碼,已經模擬出了一個游戲世界。
游戲世界是由各種各樣的物體組成的,下面介紹如何創建一個物體。分為以下六步。
下面介紹一些剛體。以下是百度百科的解釋:在任何力的作用下,體積和形狀都不發生改變的物體叫做剛體(Rigid body)。在物理學內,理想的剛體是一個固體的,尺寸值有限的,形變情況可以被忽略的物體。不論有否受力,在剛體內任意兩點的距離都不會改變。在運動中,剛體上任意一條直線在各個時刻的位置都保持平行。
下面創建一個方法CreateFloorBody()。用來創建地面。
此時已經創建了世界。但是這個世界是無限延伸的,為了更好的模擬現實世界。接下來需要為這個世界添加大地。
四個參數分別為:x軸位置,y軸位置,寬度,高度
- public Body createBorderBody(float x,float y,float width,float height) {
- PolygonShape ps = new PolygonShape();//創建形狀
- ps.setAsBox(width/2/RATE, height/2/RATE);//形狀為一個矩形
- FixtureDef fd = new FixtureDef();//創建夾具
- fd.shape = ps;//為夾具綁定形狀
- fd.density = 0;//設置密度,當密度為0時,這個物體為靜止狀態。
- fd.friction = 0.8f;//設置摩擦力
- fd.restitution = 0.3f;//設置恢復力
- BodyDef bd = new BodyDef();//創建剛體
- bd.position.set((x+width/2)/RATE, (y+height/2)/RATE);//創建剛體范圍
- bd.type = BodyType.STATIC;//設置剛體類型,設置為靜態剛體
- Body body = world.createBody(bd);//創建物體並制定剛體
- body.createFixture(fd);//為物體制定夾具
- return body;
- }
方法有了,接下來就要定義地面變量
private Body floorBody;
在surfaceCreated方法中創建floorBody物體
floorBody = CreateFloorBody(0, ScreenH-FLOOR_HEIGHT, gameWidth, FLOOR_HEIGHT);
此時第一個物體創建完成。有了大地,模擬的世界就更加真實了。此時運行環境還不能看出任何效果。但是,我們的游戲世界確確實實的存在了。
不要著急,我們會在下一章節中創建世界中的物體----》發射器。
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
1. UiObejct.getFromParent()的用法:從這個名字就知道,就是從當前對象的父對象中查找想要的子對象,該子對象和當前對象應該是同一層級。 如
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放