在as3中创建一堆类似于Solitaire堆栈的卡片

时间:2011-07-02 04:55:40

标签: flash actionscript-3

我正在创建一个纸牌游戏一切都很好,但我无法创建一堆卡片如下:

如果我有4张卡片以数组表示,例如4,5,6,7的黑桃,那么我希望将优先级最低的卡放在顶部,将最高优先级的卡放在第一张卡后面。

如何实现这一目标?

2 个答案:

答案 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]);
}