我有一个使用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而不是两个。

谢谢

最佳答案

您可以向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);
}

关于java - 具有单个TextureRegion的AndEngine ButtonSprite,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12446469/

10-10 11:54