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.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.sprite.Sprite;
import org.andengine.entity.sprite.batch.DynamicSpriteBatch;
import org.andengine.entity.sprite.batch.SpriteBatch;
import org.andengine.entity.util.FPSLogger;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.region.TextureRegion;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.color.Color;
import android.util.DisplayMetrics;
/**
* 使用SpriteBatch批量绘制Sprite
*/
public class SpriteBatchActivity extends SimpleBaseGameActivity
{
private static int winWidth = 854;
private static int winHeight = 480;
//图片纹理区域
private BitmapTextureAtlas mBitmapTextureAtlas;
private TextureRegion mTextureRegion;
@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()
{
//设置图片的路径
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("images/");
mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 32, 32, TextureOptions.DEFAULT);
//后面两个参数是指该纹理加载到纹理区域上的什么位置
mTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mBitmapTextureAtlas, this, "face_box.png", 0, 0);
//真正加载
mBitmapTextureAtlas.load();
}
@Override
protected Scene onCreateScene()
{
this.mEngine.registerUpdateHandler(new FPSLogger());
Scene scene = new Scene();
//颜色:真实值/255
scene.setBackground(new Background(new Color(0.6f,0.8f,0.6f)));
final float centerX = (winWidth - mTextureRegion.getWidth()) / 2;
final float centerY = (winHeight - mTextureRegion.getHeight()) / 2;
final Sprite sprite1 = new Sprite(-50, 0, mTextureRegion, this.getVertexBufferObjectManager());
final Sprite sprite2 = new Sprite(-50, 150, mTextureRegion, this.getVertexBufferObjectManager());
//缩放原来的3倍
sprite1.setScale(3);
//精灵中心为轴顺时针方向旋转50度
sprite1.setRotation(50);
/**
* SpriteBatch的使用,我们知道精灵无非是一个纹理和他对应范围的组合;
* 那精灵族可以直观的把它看成同一纹理对应多个范围的形式。我们可以通过draw方法在其中增加新的显示范围,包括定义其大小方向等等,
* 但是mTexture是不能改变的,相当于同一张图片渲染了多次。
* 可以使用SpriteBatch批量绘制Sprite,
* SpriteBatch又分为静态的和动态的,把SpriteBatch设想为画布,
* 动态的无需在初始化的时候指定范围,而是根据每个Sprite自身的参数绘制,
* 当需要渲染的时候他会回调onUpdateSpriteBatch让程序更新当时情况设置。
*
* 静态的必须要指定每个Sprite在画布中的绘制位置,长宽,比例,旋转等参数,
* 添加完成之后一定要提交,这样才能完成渲染,动态的提交写如begin方法里面,我们可以不管。
* 最后,要把SpriteBatch添加到Scene中。
*/
//动态的精灵族
SpriteBatch dynamicSpriteBatch = new DynamicSpriteBatch(mBitmapTextureAtlas,2,this.getVertexBufferObjectManager())
{
/**
* 该方法是一直在循环执行的
*/
@Override
protected boolean onUpdateSpriteBatch()
{
draw(sprite1);
draw(sprite2);
return true;
}
};
//静态精灵组
SpriteBatch staticSpriteBatch = new SpriteBatch(mBitmapTextureAtlas, 2, this.getVertexBufferObjectManager());
//后面的颜色是精灵的背景色
staticSpriteBatch.draw(mTextureRegion, 20, 20, mTextureRegion.getWidth(), mTextureRegion.getHeight(), -45, 1, 1, 1, 1);
staticSpriteBatch.draw(mTextureRegion, 20, 120, mTextureRegion.getWidth(), mTextureRegion.getHeight(), 45, 1, 1, 1, 0.3f);
//添加完成之后一定要提交,这样才能完成渲染,动态的提交写如begin方法里面,我们可以不管
staticSpriteBatch.submit();
//设置整组精灵的初始位置
dynamicSpriteBatch.setPosition(centerX, centerY);
scene.attachChild(dynamicSpriteBatch);
scene.attachChild(staticSpriteBatch);
return scene;
}
/**
* 设置屏幕大小
*/
private void setScreenDisplay()
{
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
winWidth = outMetrics.widthPixels;
winHeight = outMetrics.heightPixels;
}
}
相关推荐
### AndEngine分析之三——AsyncTask与BaseActivity深入解析 #### 一、AsyncTask概述 在AndEngine项目中,为了实现界面更新等操作时避免主线程阻塞的问题,使用了`AsyncTask`来处理后台任务。`AsyncTask`提供了一...
BaseGameActivity 是 AndEngine 框架中一个关键的组件,它是游戏的基础,负责管理游戏的引擎和SurfaceView。它继承自 BaseActivity,并实现了 IGameInterface 接口。 BaseGameActivity 的主要作用是: 1. 创建...
在Android游戏开发中,AndEngine是一个非常流行的2D游戏引擎,它允许开发者创建高质量的图形和交互式体验。本文将探讨如何在AndEngine中实现后台加载资源,同时展示一个使用AsyncTask来处理加载过程的示例。 在...
4. **动画处理**:AndEngine提供动画系统,支持帧动画和精灵动画,使角色和游戏元素的动作更加流畅。 5. **用户输入处理**:通过监听触摸事件,开发者可以控制游戏角色的行为,例如移动、跳跃等。 6. **音频管理**...
用andEngine最新的代码,然后用javadoc和easychm工具将它做成了chm格式的帮助文档,现在传到了上面,有需要的朋友可以下载
在AndEngine这个强大的2D游戏开发引擎中,精灵(Sprite)是核心的视觉元素之一,它代表了游戏画面中的一个可移动或可交互的对象。在这个主题中,我们讨论的是一个已经封装好的AndEngine动画精灵类,它使得创建和管理...
首先,AndEngine中的精灵是2D游戏中的基本元素,它可以是一个静态图像或动态图像序列,通常用于表示游戏中的角色、道具或其他可视化对象。精灵由`Sprite`类表示,包含了一个纹理坐标、尺寸以及在屏幕上的位置。创建...
在AndEngine这个强大的2D游戏开发引擎中,精灵(Sprite)和场景(Scene)的坐标系统是两个独立的体系,理解和有效地在它们之间进行坐标转换是实现动态游戏元素的关键。让我们深入探讨一下这个主题。 首先,...
2. **精灵和纹理管理**:AndEngine提供了精灵(Sprite)和纹理(Texture)类,便于开发者管理游戏中的静态或动态图像,如角色、背景和动画效果。 3. **物理引擎集成**:通过Box2D物理引擎的集成,AndEngine可以实现...
AndEngine 2013-3-12 最新Jar包,直接拉进项目libs即可,可查看源代码
##摘要以下是andEngine和andEnginePhysicsBox2DExtension的可编译就绪源代码集,仅在Android Studio中使用。 JNI本机扩展已被编译并包含在内,而所需要做的只是开始编写您的游戏。 这是我们的游戏《 Dot!Panic》的...
AndEngine 2013-2月 最新Example,直接导入Eclipse即可,API15, 环境 Android 4.0.3
5. **精灵批处理(SpriteBatch)**:AndEngine支持精灵批处理,允许一次性绘制多个精灵,进一步提高渲染效率。通过`SpriteBatch`,开发者可以在一次OpenGL调用中绘制所有精灵,减少了GPU交互次数。 6. **纹理管理**...
5. **纹理加载**:为了加载和管理非Tiled的图片资源,类可能依赖于自定义的`ITextureLoadManager`接口和`TextureUtils`工具类,以便于在运行时动态加载和卸载纹理。 6. **碰撞检测**:由于继承自BaseRectangle,...
AndEngine是一款针对Android平台开发2D游戏的开源引擎,它以简单易用和高效著称。这个Demo是AndEngine官方网站提供的示例集合,用于帮助开发者更好地理解和学习如何使用AndEngine来构建游戏。以下是对AndEngine及其...
AndEngine的SpriteBatch和ParticleSystem类能很好地实现这些效果。 3. **物理模拟**:虽然游戏规则相对简单,但鱼的移动和碰撞效果可能需要物理引擎来实现,以增加游戏的真实感。 4. **分数系统与游戏逻辑**:捕获...
这个毕业设计项目的核心是利用AndEngine的技术实现动态精灵(Sprite)的动画效果,通过将多张小图片组合成一张大图片,然后在运行时分割和动态加载,以达到流畅的动画效果。 一、AndEngine简介 AndEngine是一款开源...
5. **物理模拟**:利用Box2D或AndEngine内置的物理引擎,演示如何实现物理效果,如重力、碰撞反弹等。 6. **用户输入处理**:如何响应触摸事件,实现角色移动、跳跃等操作。 7. **音频管理**:包含背景音乐和音效的...
物理引擎在AndEngine中扮演着重要角色,特别是对于需要动态模拟的游戏。AndEngine支持Box2D物理引擎的集成,可以创建可碰撞的物体,实现重力、弹性等物理效果。通过Body、Fixture和Joint等Box2D对象,你可以创建复杂...