我正在尝试将两个精灵附加到一个实体,但它们没有按照我希望它们附加的顺序附加。
我希望 avatarSprite 位于 BarSprite 之上,但无论我做什么它总是出现在 barSprite 后面。
我尝试设置 ZIndex,更改将它附加到实体的顺序,我什至调用 sortChildren,但它仍然以相同的顺序出现,avatarSprite,barSprite 在它上面。这是我正在使用的一些代码。
public class MyList extends Entity{
public ArrayList<MyListItem> listItems;
public ArrayList<Player> players;
public MyList(ArrayList<Player> pList){
super();
listItems = new ArrayList<MyListItem>();
players = pList;
buildList();
...
//set height and width
}
private void buildList(){
float buffer = LIST_BUFFER;
int i = 0;
for(Player mPlayer : players){
MyListItem mItem = new MyListItem(mPlayer);
mPlayer.sprite.setTag(i);
if (i == 0){
mItem.setPosition(INITIAL_ITEM_X, INITIAL_ITEM_Y);
} else{
float x = listItems.get(i - 0).getX();
float y = listItems.get(i - 0).getY() + mItem.getHeight() + buffer;
mItem.setPosition(x,y);
}
attachChild(mItem);
listItems.add(mItem);
i++;
}
}
public class MyListItem extends Entity{
private Player mPlayer;
public MyListItem(pPlayer){
super();
this.mPlayer = pPlayer;
VertexBufferObjectManager vbom = MGA.getInstance().getVertexBufferObjectManager();
Sprite barSprite = new Sprite( 0, 0, MGA.getInstance().mPlayerBar, vbom );
Sprite avatarSprite = new Sprite( 0, 0, MGA.getInstance().mAvatarTextureRegion, vbom );
avatarSprite.setScale( 3.0f );
avatarSprite.setZIndex( 3 );
float bWidth = barSprite.getWidth();
float bHeight = barSprite.getHeight();
barSprite.setX( bWidth / 2 );
barSprite.setY( bHeight / 2 );
barSprite.setZIndex( 2 );
avatarSprite.setPosition( bWidth * 0.16058f, bHeight
/ 0.5f - avatarSprite.getHeight() / 2 );
this.attachChild( barSprite );
this.attachChild( avatarSprite );
this.sortChildren( true );
this.setHeight( bHeight );
this.setWidth( bWidth );
}
}
}
编辑:我已经更新了代码以匹配我当前使用的代码。创建列表后,它通过以下方式附加到 HUD: myList = new MyList(players);
attachChild(myList);
我确信我所做的一切都是正确的,因为它同样适用于,它扩展了与, ->Rectangle
相同的类Sprite
Shape
Entity
我错过了什么吗?
Edit2:我刚刚尝试恢复使用Rectangle
,但我仍然遇到同样的问题......