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

Android游戲引擎libgdx使用教程8:相機和觀察點

移動開發 Android
上一節中講了libgdx引擎框架總觀,本節講講相機和觀察點。相機也可以成為觀察者,最簡單的例子就是魂斗羅。玩家操作角色前進,后退,跳躍等,顯示的世界(就是后面的背景)會不停變化。其實就是相機的觀察點(視角)的改變引起的。

上一節中講了libgdx引擎框架總觀,本節講講相機和觀察點。

相機也可以成為觀察者,最簡單的例子就是魂斗羅。

[[91329]]

玩家操作角色前進,后退,跳躍等,顯示的世界(就是后面的背景)會不停變化。其實就是相機的觀察點(視角)的改變引起的。

也許游戲的世界(背景地圖)很大,比如10240*480,而設備的分辨率是800*480。現在游戲的角色在地圖的最左側,那么它的觀察點就是(400,240)。

隨著角色的向前移動,觀察點也變化,通常是y值變大。

角色后退時y值變小。角色跳躍時,x值變化。(其實地圖可能要稍微高一點,比如500,這樣角色的跳躍才會有效果)。

可以說相機是游戲開發的一個基本組件。而Libgdx的Stage類中就默認包含了一個Camera。

Camera類按照功能而言也有很多種,最常用的是OrthographicCamera(正投影相機),Stage中默認Camera的實現類為該類。

 OrthographicCamera實現以下功能:

1. 移動和旋轉鏡頭

2. 放大和縮小

3. 改變觀察點(視角)

4. 窗體和世界的點的轉化

相機的***好處就是無需手動操作矩陣就可以移動游戲世界,所有的矩陣投影和觀察點運算就是對開發者隱藏的。

相機的使用一般配合著mesh。mesh繪制一個矩形區域,然后將地圖貼圖在其上。

接下來的例子將使用一張圖:

Android游戲引擎libgdx使用教程8:相機和觀察點

大小2048*2048

代碼如下:

  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.Mesh;     
  6. import com.badlogic.gdx.graphics.OrthographicCamera;     
  7. import com.badlogic.gdx.graphics.Texture;     
  8. import com.badlogic.gdx.graphics.VertexAttribute;     
  9. import com.badlogic.gdx.graphics.VertexAttributes;     
  10. import com.badlogic.gdx.graphics.VertexAttributes.Usage;     
  11. import com.badlogic.gdx.math.Rectangle;     
  12. public class FirstGame implements ApplicationListener {     
  13. private OrthographicCamera cam;     
  14. private Texture texture;     
  15. private Mesh mesh;     
  16. private Rectangle glViewport;     
  17. @Override     
  18. public void create() {     
  19. //創建一個靜態的,由兩個三角形構成的4個頂點的矩形     
  20. //矩形分為3*2塊。網格有3個位置參數(x,y,z)     
  21. //網格的位置屬性有兩個值     
  22. mesh = new Mesh(true46new VertexAttribute(     
  23. VertexAttributes.Usage.Position, 3"attr_Position"),     
  24. new VertexAttribute(Usage.TextureCoordinates, 2,     
  25. "attr_texCoords"));     
  26. texture = new Texture(Gdx.files.internal("img/xk.jpg"));     
  27. //設置對應的邊點     
  28. //以***個為例-2048f,-2048f,0是位置參數,因為是二維的,所以Z值為0     
  29. //0,1對應頂點坐標     
  30. mesh.setVertices(new float[] { -2048f, -2048f, 001, 2048f, -2048f,     
  31. 011, 2048f, 2048f, 010, -2048f, 2048f, 000 });     
  32. //設置索引,這個有點糾結,看文章詳解     
  33. mesh.setIndices(new short[] { 012230 });     
  34. float WIDTH = Gdx.graphics.getWidth();     
  35. float HEIGHT = Gdx.graphics.getHeight();     
  36. cam = new OrthographicCamera(WIDTH, HEIGHT);     
  37. cam.position.set(WIDTH / 2, HEIGHT / 20);     
  38. glViewport = new Rectangle(00, WIDTH, HEIGHT);     
  39. }     
  40. @Override     
  41. public void dispose() {     
  42. }     
  43. @Override     
  44. public void pause() {     
  45. // TODO Auto-generated method stub     
  46. }     
  47. @Override     
  48. public void render() {     
  49. GL10 gl = Gdx.graphics.getGL10();     
  50. // 相機移動     
  51. gl.glClear(GL10.GL_COLOR_BUFFER_BIT);     
  52. gl.glViewport((int) glViewport.x, (int) glViewport.y,     
  53. (int) glViewport.width, (int) glViewport.height);     
  54. cam.update();     
  55. cam.apply(gl);     
  56. // 貼圖     
  57. gl.glActiveTexture(GL10.GL_TEXTURE0);     
  58. gl.glEnable(GL10.GL_TEXTURE_2D);     
  59. texture.bind();     
  60. mesh.render(GL10.GL_TRIANGLES);     
  61. }     
  62. @Override     
  63. public void resize(int width, int height) {     
  64. // TODO Auto-generated method stub     
  65. }     
  66. @Override     
  67. public void resume() {     
  68. // TODO Auto-generated method stub     
  69. }     
  70. }   

注意這一句:

mesh.setIndices(new short[] { 0, 1, 2, 2, 3, 0 });

這是設置索引,我用一張圖來說明。

Android游戲引擎libgdx使用教程8:相機和觀察點

圖片分享:

0,1,2是指右上角的三角形
而2,3,0是左下角的三角形

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

2013-12-04 13:30:45

Android游戲引擎libgdx教程

2013-12-06 10:31:14

Android游戲引擎libgdx教程

2013-12-04 16:28:29

Android游戲引擎libgdx教程

2013-12-06 09:59:53

Android游戲引擎libgdx教程

2013-12-04 17:27:10

Android游戲引擎libgdx教程

2013-12-06 10:35:28

Android游戲引擎libgdx教程

2013-12-06 10:22:42

Android游戲引擎libgdx教程

2013-12-04 16:07:27

Android游戲引擎libgdx教程

2013-12-04 17:14:57

Android游戲引擎libgdx教程

2013-12-04 16:21:02

Android游戲引擎libgdx教程

2011-07-18 10:53:09

2011-07-18 11:07:12

iPhone 游戲 引擎

2011-07-18 12:29:10

2011-07-18 11:39:58

iPhone 游戲 引擎

2011-07-18 11:23:29

iPhone 游戲 動畫

2014-06-03 09:35:19

Javalibgdx

2011-12-12 13:58:11

TinyCoiOSAndroid

2014-07-15 10:34:14

Android游戲引擎

2012-04-25 22:52:40

2014-07-17 11:10:19

Android開源游戲引擎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美中文 | 欧美亚洲视频 | 国产精品高清在线 | 先锋av资源网 | 在线观看国产视频 | 日日摸夜夜添夜夜添特色大片 | 亚洲精品片 | 国产资源一区二区三区 | 中文字幕在线二区 | 国产成人一区二区三区精 | 午夜精品久久久 | 欧美午夜精品 | 久久国产婷婷国产香蕉 | 国产精品99久久久精品免费观看 | 亚洲免费观看视频 | 国产一区二区欧美 | 丁香六月激情 | 日本一区二区三区在线观看 | 91国内在线观看 | 精品免费国产视频 | 精品国产一区探花在线观看 | 免费视频一区 | 一级毛片色一级 | 精品欧美一区二区在线观看视频 | 国产欧美精品 | 99视频在线播放 | 亚洲一级视频在线 | 精品精品 | 成人中文字幕在线观看 | 欧美日韩综合视频 | 国产1区 | 亚洲午夜精品在线观看 | 欧美精品一区二区三区在线 | 国产精品视频久久久久 | 精品视频一区二区 | 国产精品美女一区二区 | 日韩成人精品在线观看 | 国产成人精品一区二区 | 日韩欧美在线视频 | 久久这里有精品 | 亚洲国产成人精品久久 |