Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲引擎libgdx使用教程8:相機和觀察點

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

編輯:Android游戲開發

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

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

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

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

       也許游戲的世界(背景地圖)很大,比如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

       代碼如下:

Java代碼
  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(true, 4, 6, new 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, 0, 0, 1, 2048f, -2048f,    
  31. 0, 1, 1, 2048f, 2048f, 0, 1, 0, -2048f, 2048f, 0, 0, 0 });    
  32. //設置索引,這個有點糾結,看文章詳解    
  33. mesh.setIndices(new short[] { 0, 1, 2, 2, 3, 0 });    
  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 / 2, 0);    
  38. glViewport = new Rectangle(0, 0, 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是左下角的三角形

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved