AndEngine ButtonSprite具有单个TextureRegion

时间:2012-09-16 11:27:37

标签: java android andengine

我有一个使用ButtonSprite作为一些UI元素精灵的游戏。 对于每个按钮,我有一个纹理区域用于普通和按压状态。

mSomeBottonTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mLoadTextureAtlas, this, "SomeBotton.png", 0, 0);
mSomeBottonPressedTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mLoadTextureAtlas, this, "SomeBottonPressed.png", 0, 0);
ButtonSprite someButtonSprite = new ButtonSprite(0, 0, mSomeBottonTextureRegion, mSomeBottonPressedTextureRegion, mEngine().getVertexBufferObjectManager());

我看到没有构造函数可以处理带有单个TiledTextureRegion的ButtonSprite,您可以为每个状态提供不同的tile。

我错过了什么吗?有没有办法用ButtonSprite做到这一点?或者我是否必须扩展TiledSprite并添加按钮功能,这样我只需要创建一个TextureRegion而不是两个。

由于

1 个答案:

答案 0 :(得分:1)

你可以为ButtonSprite提供一个TiledTextureRegion,因为它设计用于处理3种状态 - 正常,按下和禁用。检查ButtonSprite.java,您将看到几个替代构造函数,它们采用TiledTextureRegion并将stateCount设置为传入的TiledTextureRegion中的tile数。

这是其中一个构造函数

public ButtonSprite(final float pX, final float pY, final ITiledTextureRegion pTiledTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager, final OnClickListener pOnClickListener) {
    super(pX, pY, pTiledTextureRegion, pVertexBufferObjectManager);

    this.mOnClickListener = pOnClickListener;
    this.mStateCount = pTiledTextureRegion.getTileCount();

    switch(this.mStateCount) {
        case 1:
            Debug.w("No " + ITextureRegion.class.getSimpleName() + " supplied for " + State.class.getSimpleName() + "." + State.PRESSED + ".");
        case 2:
            Debug.w("No " + ITextureRegion.class.getSimpleName() + " supplied for " + State.class.getSimpleName() + "." + State.DISABLED + ".");
            break;
        case 3:
            break;
        default:
            throw new IllegalArgumentException("The supplied " + ITiledTextureRegion.class.getSimpleName() + " has an unexpected amount of states: '" + this.mStateCount + "'.");
    }

    this.changeState(State.NORMAL);
}