成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android游戲引擎libgdx使用教程9:libgdx中Box2d的用法

移動開發 Android
在游戲開發中難免會需要模擬現實情況,一般常見的就是模擬物理世界。比如物體碰撞,車輛前進,物體下落等。也許有人會覺得原來有實現過一些效果沒有看到用什么物理知識呢。

在游戲開發中難免會需要模擬現實情況,一般常見的就是模擬物理世界。

比如物體碰撞,車輛前進,物體下落等。也許有人會覺得原來有實現過一些效果沒有看到用什么物理知識呢。

在我看來引入物理引擎并不是必須的,但是這樣可以讓游戲更逼真。物理引擎的話首選Box2d,但是它是C++寫的,直接用不方便。

在Android游戲開發中使用物理引擎一般有三個比較好的選擇:

1.JBox2d

Box2d的Java移植版本,速度有點慢。不過對于不熟悉C++的朋友而言這個可以拿來看看原理。

2.Havok

這個就不多說了,我怎么沒有用過。

3.Libgdx

libgdx用了jni封裝了box2d,速度和易用性都不錯。

下面我們來看看一個示例,原來沒有接觸過box2d的朋友最好先找資料看看。

代碼如下:

  1. package com.cnblogs.htynkn.listener;   
  2. import com.badlogic.gdx.ApplicationListener;    
  3. import com.badlogic.gdx.Gdx;    
  4. import com.badlogic.gdx.graphics.GL10;    
  5. import com.badlogic.gdx.graphics.OrthographicCamera;    
  6. import com.badlogic.gdx.math.Vector2;    
  7. import com.badlogic.gdx.physics.box2d.Body;    
  8. import com.badlogic.gdx.physics.box2d.BodyDef;    
  9. import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;    
  10. import com.badlogic.gdx.physics.box2d.CircleShape;    
  11. import com.badlogic.gdx.physics.box2d.World;    
  12. import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;   
  13. public class DemoGame implements ApplicationListener {   
  14. protected OrthographicCamera camera;    
  15. protected Box2DDebugRenderer renderer; // 測試用繪制器    
  16. private World world;   
  17. @Override    
  18. public void create() {    
  19. camera = new OrthographicCamera(4832);    
  20. camera.position.set(0150);    
  21. renderer = new Box2DDebugRenderer();    
  22. world = new World(new Vector2(0, -9.8f), true); // 一般標準重力場    
  23. BodyDef bd = new BodyDef(); //聲明物體定義    
  24. bd.position.set(2f, 2f);    
  25. bd.type=BodyType.DynamicBody;    
  26. Body b = world.createBody(bd); //通過world創建一個物體    
  27. CircleShape c = new CircleShape(); //創建一個形狀(圓)    
  28. c.setRadius(1f); //設置半徑    
  29. b.createFixture(c, 1f); //將形狀和密度賦給物體    
  30. }   
  31. @Override    
  32. public void dispose() {    
  33. renderer.dispose();    
  34. world.dispose();   
  35. renderer = null;    
  36. world = null;    
  37. }   
  38. @Override    
  39. public void pause() {    
  40. // TODO Auto-generated method stub   
  41. }   
  42. @Override    
  43. public void render() {    
  44. world.step(Gdx.app.getGraphics().getDeltaTime(), 33);    
  45. GL10 gl = Gdx.app.getGraphics().getGL10();    
  46. gl.glClear(GL10.GL_COLOR_BUFFER_BIT);    
  47. camera.update();    
  48. camera.apply(gl);    
  49. renderer.render(world, camera.combined);    
  50. }   
  51. @Override    
  52. public void resize(int width, int height) {    
  53. // TODO Auto-generated method stub   
  54. }     
  55. @Override    
  56. public void resume() {    
  57. // TODO Auto-generated method stub   
  58. }        
  59. }   

我們先創建了一個世界,重力為9.8,方向朝下。

然后聲明了一個物體定義,物體為動態物體(就是可以動那種),如果創建一個圓形,將形狀賦給物體。

然后調用進行模擬

world.step(Gdx.app.getGraphics().getDeltaTime(),3,3);

效果如下: 

其實用法什么沒有大的區別。libgdx并沒有AABB那個類,要這只邊界的話用

world.QueryAABB(callback,lowerX,lowerY,upperX,upperY)

就行了。

形狀的話其實有很多,圓形,方形,矩形,多邊形,可以具體參考Box2d的幫助文件。

有人覺得使用box2d很復雜,很難和現有的東西聯系起來。其實我覺得box2d用著很方便,特別是和Stage聯系起來很方便。

用Body.setUserData(userData)

將Actor的名字賦給Body,然后在繪制時用

Stage.findActor(name)

改變actor的位置和狀體就行了。

寫在最后:

這里想說幾個問題:

1.Box2d是一個物理引擎,不是一個游戲引擎。它模擬物理世界和法則,但是你的圖像繪制什么的都是自己處理。

2.Box2d的單位是米,秒。注意單位換算,不推薦直接用1像素=1米,這樣有些東西會很奇怪的,比例看情況,用個30,,50就行了。

3.Stage的坐標是左下角,Box2d一般是重心,注意變化。

4.調試的時候可以用Box2DDebugRenderer,可以清楚看到邊界和重心。

責任編輯:閆佳明 來源: jizhuomi
相關推薦

2013-12-04 13:30:45

Android游戲引擎libgdx教程

2013-12-06 10:31:14

Android游戲引擎libgdx教程

2013-12-04 17:27:10

Android游戲引擎libgdx教程

2013-12-06 09:59:53

Android游戲引擎libgdx教程

2013-12-04 16:07:27

Android游戲引擎libgdx教程

2013-12-04 16:28:29

Android游戲引擎libgdx教程

2013-12-06 10:12:49

Android游戲引擎libgdx教程

2013-12-04 16:21:02

Android游戲引擎libgdx教程

2013-12-04 17:14:57

Android游戲引擎libgdx教程

2013-12-06 10:35:28

Android游戲引擎libgdx教程

2014-06-03 09:35:19

Javalibgdx

2011-07-18 11:07:12

iPhone 游戲 引擎

2012-05-09 11:47:15

HTML5游戲開發Easel.js

2011-05-31 15:45:38

Android 游戲引擎 開源

2011-07-27 13:57:36

iPhone 游戲 Cocos2d

2011-07-18 12:29:10

2011-07-18 11:39:58

iPhone 游戲 引擎

2011-07-18 11:23:29

iPhone 游戲 動畫

2022-06-14 07:51:10

Godot游戲引擎

2011-07-18 10:53:09

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本亚洲欧美 | 精品久久久久久久久久久 | 亚洲激情在线观看 | 一级毛片中国 | 色五月激情五月 | 国产精品视频观看 | 亚洲欧美视频 | 99热这里都是精品 | 国产精品久久久久一区二区 | 中文字幕av网址 | 黄色片免费看 | 看av片网站 | www精品| 国产精品国产 | 热99视频 | 国产精品欧美一区二区 | 欧产日产国产精品国产 | 一级黄色片毛片 | 亚洲午夜精品一区二区三区他趣 | 成人av一区二区三区 | 97成人在线 | 欧美黄色片在线观看 | 国产999精品久久久久久绿帽 | 国产高清精品在线 | 欧美成人免费在线视频 | 欧美精品一区二区三区在线四季 | 最新国产福利在线 | 麻豆av电影网 | 亚洲一区中文字幕 | 色接久久| 99爱国产| 久久久久亚洲精品 | 欧美8一10sex性hd | 久久久久国产精品人 | 国产欧美日韩久久久 | 欧美一级欧美一级在线播放 | 国产精品久久福利 | 日韩一区二区三区在线 | 成人精品视频免费 | 亚洲中国字幕 | 米奇7777狠狠狠狠视频 |