`

(2)、andengine之Rectangle与ScreenCapture(矩形与截屏)

 
阅读更多

如果使用截屏,需要修改andengine源码中的org.andengine.entity.util.ScreenCapture类中的saveCapture方法:

修改后代码:

private static void saveCapture(final Bitmap pBitmap, final String pFilePath) throws FileNotFoundException {
  FileOutputStream out = null;
  try {
   File file = new File(pFilePath);
   if (!file.getParentFile().exists())
   {
      if(!file.getParentFile().mkdirs()){ //创建文件
                 throw new FileNotFoundException("create dir fail.");
              }
   }
   out = new FileOutputStream(pFilePath);
   pBitmap.compress(CompressFormat.PNG, 100, out);
  } catch (final FileNotFoundException e) {
   StreamUtils.flushCloseStream(out);
   Debug.e("Error saving file to: " + pFilePath, e);
   throw e;
  }
 }

然后重新打包,然后加到自己的项目中使用。

 

import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.Entity;
import org.andengine.entity.primitive.Rectangle;
import org.andengine.entity.scene.IOnSceneTouchListener;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.util.FPSLogger;
import org.andengine.entity.util.ScreenCapture;
import org.andengine.entity.util.ScreenCapture.IScreenCaptureCallback;
import org.andengine.input.touch.TouchEvent;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.FileUtils;
import org.andengine.util.color.Color;

import android.util.DisplayMetrics;
import android.widget.Toast;
/**
 * 创建有颜色的矩形
 */
public class RectangleActivity extends SimpleBaseGameActivity
{
 private static int winWidth = 854;
 private static int winHeight = 480;
 //每个矩形的大小
 private static final int RECTANGLE_WIDTH = 180;
 private static final int RECTANGLE_HEIGHT = 180;
 
 @Override
 public EngineOptions onCreateEngineOptions()
 {
  setScreenDisplay();
  Camera camera = new Camera(0, 0, winWidth, winHeight);
  EngineOptions engineOptions = new EngineOptions(
    true,
    ScreenOrientation.LANDSCAPE_FIXED,
    new RatioResolutionPolicy(winWidth, winHeight),
    camera);
  return engineOptions;
 }

 @Override
 protected void onCreateResources()
 {

 }
 /**
  * 创建场景
  */
 @Override
 protected Scene onCreateScene()
 {
  this.mEngine.registerUpdateHandler(new FPSLogger());
  Scene scene = new Scene();
  scene.setBackground(new Background(Color.BLACK));
  Rectangle rectangle1 = makeColorRectangle(0, 0, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.RED);
  Rectangle rectangle2 = makeColorRectangle(RECTANGLE_WIDTH, 0, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.YELLOW);
  Rectangle rectangle3 = makeColorRectangle(0, RECTANGLE_WIDTH, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.BLUE);
  Rectangle rectangle4 = makeColorRectangle(RECTANGLE_WIDTH, RECTANGLE_HEIGHT, RECTANGLE_WIDTH, RECTANGLE_HEIGHT, Color.WHITE);
  //居中显示
  Entity entity = new Entity((winWidth-2*RECTANGLE_WIDTH)/2, (winHeight-2*RECTANGLE_HEIGHT)/2);
  entity.attachChild(rectangle1);
  entity.attachChild(rectangle2);
  entity.attachChild(rectangle3);
  entity.attachChild(rectangle4);
  scene.attachChild(entity);
  //截屏(该代码要在截图场景的下面)
  final ScreenCapture screenCapture = new ScreenCapture();
  //加入截屏功能
  scene.attachChild(screenCapture);
  //场景触摸事件
  scene.setOnSceneTouchListener(new IOnSceneTouchListener()
  {
   @Override
   public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent)
   {
    if (pSceneTouchEvent.isActionDown())
    {
     screenCapture.capture(
       winWidth, winHeight,
       FileUtils.getAbsolutePathOnExternalStorage(RectangleActivity.this,"Screen_" + System.currentTimeMillis() + ".png"),
       new IScreenCaptureCallback()
       {
        /**
         * 截图成功
         */
        @Override
        public void onScreenCaptured(final String pFilePath)
        {
         RectangleActivity.this.runOnUiThread(new Runnable()
         {
          
          @Override
          public void run()
          {
           Toast.makeText(RectangleActivity.this, "截图成功:"+pFilePath, 3000).show();
          }
         });

        }
        /**
         * 截图失败
         */
        @Override
        public void onScreenCaptureFailed(final String pFilePath, final Exception pException)
        {
         RectangleActivity.this.runOnUiThread(new Runnable()
         {
          
          @Override
          public void run()
          {
           Toast.makeText(RectangleActivity.this, "截图失败:"+pFilePath, 3000).show();
           System.err.println("失败:"+pException.getMessage());
          }
         });

        }
       });
    }
    return true;
   }
  });
  return scene;
 }
 /**
  * 创建有颜色的矩形
  * @return
  */
 private Rectangle makeColorRectangle(float pX, float pY, float pWidth, float pHeight,Color pColor)
 {
  Rectangle rectangle = new Rectangle(pX, pY, pWidth, pHeight, getVertexBufferObjectManager());
  rectangle.setColor(pColor);
  return rectangle;
 }
 
 /**
  * 设置屏幕大小
  */
 private void setScreenDisplay()
 {
  DisplayMetrics outMetrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
  winWidth = outMetrics.widthPixels;
  winHeight = outMetrics.heightPixels;
 }
 

}

 

 

分享到:
评论

相关推荐

    android AndEngine游戏画直线、画矩形源码

    2. **矩形的绘制**:矩形可以使用Rectangle类创建,它需要宽度、高度、左上角坐标和颜色。例如: ```java Rectangle rectangle = new Rectangle(x, y, width, height, color, getVertexBufferObjectManager()); ``` ...

    andengine 安卓游戏2d引擎

    与LibGDX相比,AndEngine更专注于2D游戏的开发,而LibGDX则是一个更全面的游戏框架,支持2D和3D游戏。 AndEngine的核心特性包括: 1. **基于OpenGL ES 2.0**:AndEngine利用OpenGL ES 2.0图形库,提供硬件加速的2D...

    andengine 最新源码(具有box2D)

    将AndEngine与Box2D结合,开发者可以创建具有真实感的物理交互游戏。 在AndEngine的最新源码中,我们可能发现以下几个关键的知识点: 1. **模块化设计**:AndEngine通常分为多个模块,如基本的图形渲染模块、精灵...

    AndEngine游戏开发示例

    AndEngine是一款专为Android平台设计的游戏开发框架,它简化了2D游戏的创建过程,让开发者无需深入理解底层图形库,就能快速构建出高质量的移动游戏。本示例旨在介绍如何利用AndEngine进行游戏开发,通过实例化引擎...

    andengine2.0开发的小游戏

    AndEngine是一款开源的2D游戏开发引擎,专为Android平台设计。它简化了在Android设备上构建高质量2D游戏的过程,提供了丰富的图形处理、物理引擎和动画功能。在这个"andengine2.0开发的小游戏"中,我们可以看到作者...

    andengine源码及demo

    AndEngine是一款专为Android平台设计的2D游戏开发框架,它提供了一套高效、易用的API,使得开发者能够快速构建各种2D游戏。AndEngine源码的分析和理解对于想要深入学习Android游戏开发的人来说至关重要。 1. **...

    AndEngine-GLES2

    AndEngine-GLES2是一款专为Android平台设计的开源2D游戏引擎,它为开发者提供了高效且易用的工具,用于创建各种2D游戏。这款引擎以其简洁的API和丰富的功能而受到开发者的欢迎,尤其值得一提的是,曾经风靡全球的...

    AndEngine下载

    AndEngine是一款专为Android平台设计的2D游戏开发引擎,由Nathan Greno开发并维护。这个引擎以其轻量级、高效能和易用性而受到开发者们的青睐,特别是对于那些希望快速创建2D游戏或者没有太多图形编程经验的开发者来...

    andengine_box2d

    AndEngine是一款开源的游戏开发引擎,专门针对Android平台设计,它简化了2D游戏的开发流程,使得开发者可以更专注于游戏的创意和逻辑。Box2D是物理模拟库,广泛用于创建真实感的2D物理效果,如碰撞检测、重力等。...

    AndEngine游戏引擎JAR文件

    AndEngine游戏引擎是一款高效、开源的Android游戏开发框架,它基于OpenGL ES,使得开发者可以直接进行图形硬件加速的游戏编程。这个框架极大地简化了Android平台上2D游戏的开发过程,提供了丰富的功能,让开发者能够...

    Andengine的jar包

    Andengine是一款专为Android平台设计的游戏开发引擎,它基于OpenGL ES,提供了丰富的图形渲染和物理模拟功能,使得开发者能够快速创建2D游戏。Andengine的jar包是其核心库,包含了实现游戏逻辑、动画效果、碰撞检测...

    andengine 中文

    AndEngine是一款专为Android平台设计的游戏开发框架,它基于OpenGL ES 1.1或2.0,提供了一套高效、易用的2D游戏开发工具。这个“andengine 中文”压缩包包含的是AndEngine的中文文档,对于想要在Android上进行游戏...

    andengine 类代码组织图

    AndEngine的源码在github上托管[2]。 高效  AndEngine主要使用Java语言开发,但在大运算量的耗时功能时,AndEngine使用了C/C++本地代码进行开发。比如物理引擎或者音频处理。作为用户,你只需要关注Java端就可以了...

    AndEngine入门篇

    AndEngine是一款专为Android平台设计的游戏开发引擎,它简化了2D游戏的创建过程,让开发者无需深入理解底层图形库,就能快速构建游戏。本入门篇将带你了解AndEngine的基本概念、架构以及如何开始你的第一个AndEngine...

    AndEngine 类 组织图

    AndEngine的源码在github上托管[2]。 高效  AndEngine主要使用Java语言开发,但在大运算量的耗时功能时,AndEngine使用了C/C++本地代码进行开发。比如物理引擎或者音频处理。作为用户,你只需要关注Java端就可以了...

    andengine案例,jar包

    AndEngine是一款开源的游戏开发引擎,专门用于Android平台,它简化了2D游戏的开发过程,提供了丰富的图形渲染功能。这个压缩包包含的是AndEngine的核心库文件`andengine.jar`以及2013年的最新版本,这表明它可能包含...

    AndEngine 中文文档

    AndEngine是一款开源的、免费的2D游戏开发引擎,专为Android平台设计。这款引擎以其简单易用的API和高效性能而受到许多初级和中级游戏开发者喜爱。AndEngine的中文文档是开发者学习和掌握该引擎的重要资源,尤其对于...

    AndEngine最新Jar包

    AndEngine是一款专为Android平台设计的游戏开发框架,它允许开发者使用Java语言进行2D游戏的开发,无需深入了解底层图形库,极大地简化了游戏制作过程。AndEngine以其高效、易用和社区活跃而受到众多独立开发者和...

    AndEngine 碰撞检测

    AndEngine提供了多种碰撞检测方法,其中一种是基于矩形的碰撞检测,即Rectangle-to-Rectangle碰撞检测。这种检测方式简单高效,适用于大多数非精确碰撞需求。当两个矩形实体的边界相交时,我们可以认为这两个实体...

    andEngine之SVG文件的使用

    在Android游戏开发中,andEngine是一个非常受欢迎的2D游戏引擎,它提供了丰富的功能和简单易用的API,使得开发者可以快速构建出高质量的游戏。在本篇内容中,我们将深入探讨如何在andEngine中利用SVG(Scalable ...

Global site tag (gtag.js) - Google Analytics