0

我正在尝试将两个精灵附加到一个实体,但它们没有按照我希望它们附加的顺序附加。

我希望 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相同的类SpriteShapeEntity

我错过了什么吗?

Edit2:我刚刚尝试恢复使用Rectangle,但我仍然遇到同样的问题......

4

2 回答 2

0

你应该使用图层。

  1. 将图层创建为实体

    private Entity backgroundLayer = new Entity();
    private Entity foregroundLayer = new Entity();
    
  2. 将图层附加到场景

    scene.attachChild(backgroundLayer);
    scene.attachChild(foregroundLayer);
    // important note: backgroundLayer should be attached first so it will be at the bottom.
    
  3. 现在将你的精灵附加到图层上

    backgroundLayer.attachChild(barSprite);
    foregroundLayer.attachChild(avatarSprite);
    
于 2013-10-10T11:44:24.063 回答
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 下方。更正它会将精灵放置在正确列表项中的正确位置上。

由于我生成项目的方式,每个新项目都放置在前一个项目之上。这就是为什么它似乎在酒吧精灵的下方。这是因为它在上面的层之下。

于 2013-10-10T19:57:47.283 回答