0

我有一个使用 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,您可以为每个状态提供不同的图块。

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

谢谢

4

1 回答 1

1

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

这是其中一个构造函数

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);
}
于 2012-09-16T14:15:52.630 回答