我正在创建一个纸牌游戏一切都很好,但我无法创建一堆卡片如下:
如果我有4张卡片以数组表示,例如4,5,6,7的黑桃,那么我希望将优先级最低的卡放在顶部,将最高优先级的卡放在第一张卡后面。
如何实现这一目标?
答案 0 :(得分:1)
我假设您知道如何创建DisplayObjects(您的视觉卡片),所以在我的回答中我不会提到它。
我会创建一个持有者精灵并将其添加到其中以控制卡深度顺序。您可以使用addChild(在前面添加displayObject)或addChildAt(将displayObject添加到您想要的位置)将卡添加到堆栈精灵中。如果使用addChildAt并使用0作为索引,它将在所有其他displayObjects下面添加它并向上推送一个索引。如果您已在显示列表中使用了这些卡,则可以使用setChildIndex更改索引。
var cardList : Array;
var cardStack : Sprite = new Sprite();
addChild(cardStack);
for(var i : int = 0 ; i < cardList.length ; i++)
{
// adds it at below all displayObject in "cardStack"
cardStack.addChildAt(cardList[i], 0);
// adds it on top of all displayObject in "cardStack"
cardStack.addChild(cardList[i]);
}
答案 1 :(得分:1)
最简单的方法是使用removeChildAt(...)从舞台中删除所有卡片,然后使用addChildAt(...)再次添加(按照正确的顺序)。
使用Mattias示例:
var sortedCardArray:Array = [];
while (cardContainer.numChildren)
{
sortedCardArray.push(cardContainer.removeChildAt(0));
}
/*
/ This assumes that all the values of the cards
/ are numeric (2, 3, 4, 5, 6, 7, 8, 9, 10, Jack=11, Queen=12, King=13, Ace=14)
*/
sortedCardArray.sortOn("variableWithTheCardNumber", Array.NUMERIC | Array.DESCENDING);
var n:int = sortedCardArray.length;
for(var i:int = 0 ; i < n ; i++)
{
cardContainer.addChild(sortedCardArray[i]);
}