游戏引擎Andengine总结(四):自定义可以改变显示状态的菜单选项

改变菜单选项的显示状态,就像是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
	// ===========================================================
}

其实大部分内容是参考的SpriteMenuItem类,原理很简单。。。


你可能感兴趣的:(游戏,float,引擎,Constructor,getter,methods)