改变菜单选项的显示状态,就像是Android中的Button在被点击时,会改变其背景,起到增加用户交互性的作用!
AndEngine是提供菜单功能的,并且其弹出菜单功能可以简单实现暂停效果(并且是由触屏操作实现的,这个下次记录。。。)
要实现改变菜单显示状态其实是要将AndEngine中提供的两部分组合起来使用,一是改变菜单精灵的背景显示,二是实现菜单的选项按下的响应!
一,改变精灵的显示背景
精灵的父类Sprite本身是不支持改变其图片资源的,但是其子类TiledSprite是支持的,
public TiledSprite(final float pX, final float pY, final ITiledTextureRegion pTiledTextureRegion,
final VertexBufferObjectManager pVertexBufferObjectManager)
其原理是这样的,初始化的时候需要TiledTextureRegion资源,即需要改变的图像资源的总和,并做过Tile的行列设置的
而改变其显示,实质上是显示其不同的Tile块,只需要设置当前显示的Tile块索引即可,方法如下
public void setCurrentTileIndex(final int pCurrentTileIndex)
{
this.mCurrentTileIndex = pCurrentTileIndex;
}
话说AnimatedSprite就是继承于TiledSprite的,原理也很简单,就是一系列的动画帧图片资源,根据每帧的显示时间,不断更新其显示Tile索引罢了。。
二,设置菜单选项的按下监听
其实这部分AndEngine已经帮我们做了,我们只需要实现这个接口就好了
public interface IMenuItem extends IAreaShape
{
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public int getID();
public abstract void onSelected();
public abstract void onUnselected();
}
三,两部分都准备好了,组合一下吧!
(这里我们假设菜单选项只有按下和弹起两种状态,并且传递的TiledTextureRegion的参数也是2帧的动画)
package com.tom.mole.custom;
import org.andengine.entity.scene.menu.item.IMenuItem;
import org.andengine.entity.sprite.TiledSprite;
import org.andengine.opengl.texture.region.ITiledTextureRegion;
import org.andengine.opengl.vbo.VertexBufferObjectManager;
public class TiledSpriteMenuItem extends TiledSprite implements IMenuItem
{
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private int ID = 0;
// ===========================================================
// Constructors
// ===========================================================
public TiledSpriteMenuItem(final int ID, final float pX, final float pY, final ITiledTextureRegion pTiledTextureRegion,
final VertexBufferObjectManager pVertexBufferObjectManager)
{
super(pX, pY, pTiledTextureRegion, pVertexBufferObjectManager);
// TODO Auto-generated constructor stub
this.ID = ID;
}
// ===========================================================
// Getter & Setter
// ===========================================================
@Override
public int getID()
{
// TODO Auto-generated method stub
return ID;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onSelected()
{
// TODO Auto-generated method stub
// 设置选中时的Tile索引
setCurrentTileIndex(1);
}
@Override
public void onUnselected()
{
// TODO Auto-generated method stub
// 设置没选中时的Tile索引
setCurrentTileIndex(0);
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}