我有一个使用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而不是两个。
由于
答案 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);
}