AndEngine引擎学习之绘制直线

   上午搭建了下AndEngine的环境,运行起来了demo,看起来感觉很不错。这里写了个demo,凡事都要重基础开始学习,在学习android的绘图过程中也是,从如何绘制直线,矩形等到复杂的图像。这里做下笔记哈。

1、创建完android项目,引入AndEngine的项目类库,

 

 

2、创建Activity并继承SimpleBaseGameActivity,重载onCreateEngineOptions() ,onCreateResources(),onCreateScene()。

activity的执行顺序是onCreateEngineOptions()  -> onCreateResources()->onCreateScene()。

以下是运行的log:

 

 

3、完整代码:

 

  
  
  
  
  1. package com.xzw.drawline; 
  2.  
  3. import java.util.Random; 
  4.  
  5. import org.andengine.engine.camera.Camera; 
  6. import org.andengine.engine.options.EngineOptions; 
  7. import org.andengine.engine.options.ScreenOrientation; 
  8. import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy; 
  9. import org.andengine.entity.primitive.Line; 
  10. import org.andengine.entity.scene.Scene; 
  11. import org.andengine.entity.scene.background.Background; 
  12. import org.andengine.entity.util.FPSLogger; 
  13. import org.andengine.opengl.vbo.VertexBufferObjectManager; 
  14. import org.andengine.ui.activity.SimpleBaseGameActivity; 
  15.  
  16. import android.os.Bundle; 
  17. import android.app.Activity; 
  18. import android.util.DisplayMetrics; 
  19. import android.util.Log; 
  20. import android.view.Menu; 
  21.  
  22. public class MainActivity extends SimpleBaseGameActivity { 
  23.      
  24.     private static final String TAG = "MainActivity"
  25.      
  26.     //定义随机数常量 
  27.     private static final long RANDOM_SEED = 1234567890; 
  28.     private static final int LINE_COUNT = 10; //绘制10条 
  29.        
  30.     //设置屏幕的显示大小 
  31.     /*private static final int CAMERA_WIDTH = 720; 
  32.     private static final int CAMERA_HEIGHT = 480;*/ 
  33.      
  34.     private static  int camera_width = 720; 
  35.     private static  int camera_height = 480; 
  36.      
  37.    
  38.      
  39.     /** 
  40.      * 创建引擎的选项(这里我的理解是初始化过程,和activity的onCreate一样) 
  41.      */ 
  42.     @Override 
  43.     public EngineOptions onCreateEngineOptions() { 
  44.         Log.i(TAG, "--onCreateEngineOptions()--"); 
  45.         //初始化屏幕显示区域的大小。 
  46.         setSceenDisplay(); 
  47.          
  48.         /** 
  49.          * 该类即我们常说的游戏摄像机,在AndEngine的Camera有两种作用, 
  50.          * 一是用以调节屏幕的显示区域,二是利用HUD类实际绘制游戏屏幕于手机之上。 
  51.          */ 
  52.         final Camera camera = new Camera(0, 0, camera_width, camera_height); 
  53.          
  54.         return new EngineOptions(true,  
  55.                 ScreenOrientation.LANDSCAPE_FIXED,  
  56.                 new RatioResolutionPolicy(camera_width, camera_height), 
  57.                 camera); 
  58.     } 
  59.  
  60.     @Override 
  61.     protected void onCreateResources() {  
  62.         Log.i(TAG, "--onCreateResources()--"); 
  63.     } 
  64.     /** 
  65.      * 创建场景 
  66.      */ 
  67.     @Override 
  68.     protected Scene onCreateScene() { 
  69.         Log.i(TAG, "--onCreateScene()--"); 
  70.         this.mEngine.registerUpdateHandler(new FPSLogger()); 
  71.         /** 
  72.          * 场景容器,作用类似于LGame中的Screen, 
  73.          * 能够将某一特定场景作为游戏模块进行调用 
  74.          * ,我们可以利用它来切换当前游戏的画面与触摸屏监听, 
  75.          * 切换方法是利用Engine.setScene。 
  76.          */ 
  77.         final Scene scene = new Scene(); 
  78.          
  79.         //设置背景,使用RGB的方式进行设置 
  80.         scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f)); 
  81.          
  82.         final Random random = new Random(RANDOM_SEED); 
  83.          
  84.         //顶点缓存对象管理器(ps:这个是我自己翻译的,具体是啥意思,请大牛们帮我解释下) 
  85.         final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager(); 
  86.          
  87.         for(int i = 0;i<LINE_COUNT;i++){ //绘制十条直线 
  88.              
  89.             final float x1 = random.nextFloat()*camera_width; 
  90.             final float x2 = random.nextFloat()*camera_width; 
  91.             final float y1 = random.nextFloat()*camera_height; 
  92.             final float y2 = random.nextFloat()*camera_height; 
  93.              
  94.             //直线显示宽度 
  95.             final float lineWidth = random.nextFloat() * 5; 
  96.              
  97.             //创建直线的实例。 
  98.             final Line line = new Line(x1,y1,x2,y2,lineWidth,vertexBufferObjectManager); 
  99.              
  100.             //设置直线的颜色 
  101.             line.setColor(random.nextFloat(),random.nextFloat(),random.nextFloat()); 
  102.             //将直线添加到场景 
  103.             scene.attachChild(line); 
  104.              
  105.         } 
  106.          
  107.         return scene; 
  108.     } 
  109.  
  110.       
  111.     /** 
  112.      * 初始化界面大小设置 
  113.      */ 
  114.     private void  setSceenDisplay(){ 
  115.         DisplayMetrics dm = new DisplayMetrics(); 
  116.         getWindowManager().getDefaultDisplay().getMetrics(dm); 
  117.         camera_width = dm.widthPixels; 
  118.         camera_height = dm.heightPixels; 
  119.     } 
  120.       
  121.    

真机运行效果:

 

如果你使用虚拟机运行的话会报:java.lang.IllegalArgumentException: No EGLConfig found!的错误。

所以只能使用真机。

以上就是创建一个简单的AndEngine的引擎的实现过程。初学请大牛们多多指教。

 

 

 

你可能感兴趣的:(绘图,游戏引擎,AndEngine)