我正在尝试将两个精灵附加到一个实体,但它们并没有按照我希望它们附加的顺序附加。
我希望avatarSprite能够在BarSprite的顶部,但无论我做什么它总是出现在barSprite后面。
我尝试设置ZIndex,更改我将它附加到实体的顺序,我甚至调用sortChildren,但它仍然以相同的顺序avatarSprite,并使用barSprite ontop。这是我正在使用的一些代码。
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
- &gt; Entity
我错过了什么吗?
EDIT2:
我刚刚尝试再次使用Rectangle
,我仍然遇到同样的问题......
答案 0 :(得分:0)
你应该使用图层。
将图层创建为实体
private Entity backgroundLayer = new Entity();
private Entity foregroundLayer = new Entity();
将图层附加到场景
scene.attachChild(backgroundLayer);
scene.attachChild(foregroundLayer);
// important note: backgroundLayer should be attached first so it will be at the bottom.
现在将精灵附加到图层
backgroundLayer.attachChild(barSprite);
foregroundLayer.attachChild(avatarSprite);
答案 1 :(得分:0)
旧:
...
avatarSprite.setPosition( bWidth * 0.16058f, bHeight
/ 0.5f - avatarSprite.getHeight() / 2 );
...
的变化:
...
avatarSprite.setPosition( bWidth * 0.16058f, bHeight
* 0.5f - avatarSprite.getHeight() / 2 );
...
我所做的只是将/ 0.5f
更改为* 0.5f
除以0.5我将高度乘以2,使y位置比我想要的高200px,使其出现在它上面的listItem下面。更正它将精灵放在正确的列表项中的正确位置。
由于我生成项目的方式,每个新项目都放在上一个项目之上。这就是为什么它似乎在酒吧精灵的下方。这是因为它在上面的层之下。