如果使用截屏,需要修改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;
}
}
相关推荐
2. **矩形的绘制**:矩形可以使用Rectangle类创建,它需要宽度、高度、左上角坐标和颜色。例如: ```java Rectangle rectangle = new Rectangle(x, y, width, height, color, getVertexBufferObjectManager()); ``` ...
与LibGDX相比,AndEngine更专注于2D游戏的开发,而LibGDX则是一个更全面的游戏框架,支持2D和3D游戏。 AndEngine的核心特性包括: 1. **基于OpenGL ES 2.0**:AndEngine利用OpenGL ES 2.0图形库,提供硬件加速的2D...
将AndEngine与Box2D结合,开发者可以创建具有真实感的物理交互游戏。 在AndEngine的最新源码中,我们可能发现以下几个关键的知识点: 1. **模块化设计**:AndEngine通常分为多个模块,如基本的图形渲染模块、精灵...
AndEngine是一款专为Android平台设计的游戏开发框架,它简化了2D游戏的创建过程,让开发者无需深入理解底层图形库,就能快速构建出高质量的移动游戏。本示例旨在介绍如何利用AndEngine进行游戏开发,通过实例化引擎...
AndEngine是一款开源的2D游戏开发引擎,专为Android平台设计。它简化了在Android设备上构建高质量2D游戏的过程,提供了丰富的图形处理、物理引擎和动画功能。在这个"andengine2.0开发的小游戏"中,我们可以看到作者...
AndEngine是一款专为Android平台设计的2D游戏开发框架,它提供了一套高效、易用的API,使得开发者能够快速构建各种2D游戏。AndEngine源码的分析和理解对于想要深入学习Android游戏开发的人来说至关重要。 1. **...
AndEngine-GLES2是一款专为Android平台设计的开源2D游戏引擎,它为开发者提供了高效且易用的工具,用于创建各种2D游戏。这款引擎以其简洁的API和丰富的功能而受到开发者的欢迎,尤其值得一提的是,曾经风靡全球的...
AndEngine是一款专为Android平台设计的2D游戏开发引擎,由Nathan Greno开发并维护。这个引擎以其轻量级、高效能和易用性而受到开发者们的青睐,特别是对于那些希望快速创建2D游戏或者没有太多图形编程经验的开发者来...
AndEngine是一款开源的游戏开发引擎,专门针对Android平台设计,它简化了2D游戏的开发流程,使得开发者可以更专注于游戏的创意和逻辑。Box2D是物理模拟库,广泛用于创建真实感的2D物理效果,如碰撞检测、重力等。...
AndEngine游戏引擎是一款高效、开源的Android游戏开发框架,它基于OpenGL ES,使得开发者可以直接进行图形硬件加速的游戏编程。这个框架极大地简化了Android平台上2D游戏的开发过程,提供了丰富的功能,让开发者能够...
Andengine是一款专为Android平台设计的游戏开发引擎,它基于OpenGL ES,提供了丰富的图形渲染和物理模拟功能,使得开发者能够快速创建2D游戏。Andengine的jar包是其核心库,包含了实现游戏逻辑、动画效果、碰撞检测...
AndEngine是一款专为Android平台设计的游戏开发框架,它基于OpenGL ES 1.1或2.0,提供了一套高效、易用的2D游戏开发工具。这个“andengine 中文”压缩包包含的是AndEngine的中文文档,对于想要在Android上进行游戏...
AndEngine的源码在github上托管[2]。 高效 AndEngine主要使用Java语言开发,但在大运算量的耗时功能时,AndEngine使用了C/C++本地代码进行开发。比如物理引擎或者音频处理。作为用户,你只需要关注Java端就可以了...
AndEngine是一款专为Android平台设计的游戏开发引擎,它简化了2D游戏的创建过程,让开发者无需深入理解底层图形库,就能快速构建游戏。本入门篇将带你了解AndEngine的基本概念、架构以及如何开始你的第一个AndEngine...
AndEngine的源码在github上托管[2]。 高效 AndEngine主要使用Java语言开发,但在大运算量的耗时功能时,AndEngine使用了C/C++本地代码进行开发。比如物理引擎或者音频处理。作为用户,你只需要关注Java端就可以了...
AndEngine是一款开源的游戏开发引擎,专门用于Android平台,它简化了2D游戏的开发过程,提供了丰富的图形渲染功能。这个压缩包包含的是AndEngine的核心库文件`andengine.jar`以及2013年的最新版本,这表明它可能包含...
AndEngine是一款开源的、免费的2D游戏开发引擎,专为Android平台设计。这款引擎以其简单易用的API和高效性能而受到许多初级和中级游戏开发者喜爱。AndEngine的中文文档是开发者学习和掌握该引擎的重要资源,尤其对于...
AndEngine是一款专为Android平台设计的游戏开发框架,它允许开发者使用Java语言进行2D游戏的开发,无需深入了解底层图形库,极大地简化了游戏制作过程。AndEngine以其高效、易用和社区活跃而受到众多独立开发者和...
AndEngine提供了多种碰撞检测方法,其中一种是基于矩形的碰撞检测,即Rectangle-to-Rectangle碰撞检测。这种检测方式简单高效,适用于大多数非精确碰撞需求。当两个矩形实体的边界相交时,我们可以认为这两个实体...
在Android游戏开发中,andEngine是一个非常受欢迎的2D游戏引擎,它提供了丰富的功能和简单易用的API,使得开发者可以快速构建出高质量的游戏。在本篇内容中,我们将深入探讨如何在andEngine中利用SVG(Scalable ...