在画Sprite之前, 最好可以先理解下一些类似 Texture相关的基础类, 这里先给几个链接,以后整理了再自己写吧。
也感谢在学习中帮助过我的blog
matim-dev | 依赖 新的GLES2-AnchorCenter | http://www.matim-dev.com/tutorials.html |
cping1982 | 因为是老的AndEngine 很多结构都改变了,回调方法什么也改变了,但是基本理解还是一样的 | http://blog.csdn.net/cping1982/article/ |
要画一个Sprite
首先要 读取对应的 图片资源, AndEngine和libgdx是一样的, 对应的资源都是放在android的assets文件夹中
我们做的步骤:
1 设置对应的path(assets的子目录)
个人放在assets下的 gfx/face/
onCreateResources()
2 开创一个对应的BitmapTextureAtlas, 将TextureRegion画上去。
3 将对应的TextureRegion做成一个 Sprite, 画到Scene上面去
读取图片资源 (对应的TextureOptions.BILINEAR以后再去)
protected void onCreateResources() {
// TODO Auto-generated method stub
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/face/");//设置对应的目录
this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 32, 32, TextureOptions.BILINEAR);
this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "face_box.png", 0, 0);//显示对应的区域
this.mBitmapTextureAtlas.load();
}
将对应的用资源的Sprite画到Scene上去,
protected Scene onCreateScene() {
// TODO Auto-generated method stub
final Scene scene = new Scene();
scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));
/* Calculate the coordinates for the face, so its centered on the camera. */
final float centerX = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
final float centerY = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;
this.mFaceToRemove = new Sprite(centerX, centerY, this.mFaceTextureRegion, this.getVertexBufferObjectManager());
this.mFaceToRemove2 = new Sprite(20, 20, this.mFaceTextureRegion, this.getVertexBufferObjectManager());
scene.attachChild(this.mFaceToRemove);
scene.attachChild(this.mFaceToRemove2);
scene.setOnSceneTouchListener(this);
return scene;
}
对应的 Listener 让本类实现 IOnSceneTouchListener 接口, 复写onSceneTouchEvent方法
@Override
public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {
if(this.mFaceToRemove == null) {
return false;
}
final EngineLock engineLock = this.mEngine.getEngineLock();
engineLock.lock();
/* Now it is save to remove the entity! */
pScene.detachChild(this.mFaceToRemove);
this.mFaceToRemove.dispose();
this.mFaceToRemove = null;
engineLock.unlock();
return true;
}
建立了2个Sprite, 点击屏幕,得到响应, 可以消去一个Sprite