如何根据x调整actor z索引?

时间:2013-07-29 07:44:11

标签: java libgdx scene2d

我正在使用libgdx和scene2d进行纸牌游戏。 我的卡类扩展了Image actor类。我试图找到一种方法来设置我的卡片在拖动时根据x位置绘制的顺序。

enter image description here

所以我试过了:

@Override
public void drag(InputEvent event, float x, float y, int pointer) {
     float sx = event.getStageX();
     float sy = event.getStageY();
     if(sx - offsetX > 0 && sy - offsetY > 0){
       event.getTarget().setPosition(sx - offsetX, sy - offsetY);
       c.setZIndex((int) sx);
    }               
}

这不起作用,因为显然,zindex与舞台/组中的演员数量绑定。所以基本上索引应该是0-4。我的下一个方法是将屏幕宽度除以5并将其设置为zindex。如果卡片在整个宽度上均匀分开,它可以正常工作。但如果卡片在中间压缩,它们看起来不太好看。 2到3张牌落在中间,最后一张牌落在其他牌的顶部。我不想要的。

我的最后一种方法是通过xposition命令我的所有卡片,并通过它们给出z-index。这就像我想要的那样,但我发现它很慢(当所有其他东西都添加到混合中时)

那么无论如何我可以设置相对于x位置的z-index而不通过演员来循环?

1 个答案:

答案 0 :(得分:3)

拥有所有卡片的初始位置数组。每当发生拖动时,都会根据您已有的拖动方法重新洗牌。使用存储在数组中的位置从0到长度绘制卡片 - 1,其中第一张卡片的位置在索引0处,最后一张卡片在长度为数组减去1时。

或 - 使用Group。按绘制顺序添加组。您可以交换组中的actor。根据拖动事件交换卡片。