1
import fl.events.*;  

const PointsStart:int=0;  

var Points:int=PointsStart;  

youChose.text=String(Points)+" points";  

comboBox.prompt='Contestants'  
comboBox.addItem({label:"John Smith",Points:10});  
comboBox.addItem({label:"Chris Tucker",Points:12});  
comboBox.addItem({label:"Paul Allen",Points:14});  

comboBox.addEventListener(Event.CHANGE, listevalg);  


function listevalg (evt:Event)  
{  
    Points=comboBox.selectedItem.Points;  
    youChose.text=String(Value)+" points";  
}  

I'd like to have a textbox that says what the current standings are. Say I choose Chris Tucker in the combo box, I want the textbox to say something like 'He's in second place'

4

1 に答える 1

1

まず、各人がどのランクにいるかを知る必要があります。これを行うには、人のリストをコピーしてポイントで並べ替えてから、そのランクをそのリスト内の位置として登録します。

import fl.events.*;  

const PointsStart:int=0;  

var Points:int=PointsStart;  

youChose.text=String(Points)+" points";  

comboBox.prompt='Contestants'  

var people:Array = [{label:"John Smith",Points:10},
                    {label:"Chris Tucker",Points:12},
                    {label:"Paul Allen",Points:14}];

// Copy of "people", sorted by Points, descending.
var sortedPeople:Array = people.concat().sortOn("Points", Array.DESCENDING | Array.NUMERIC);

for each (var person:Object in people) {
    // Register this person's ranking as its position in the sorted array + 1
    // (because indexes start at 0)
    person.Rank = sortedPeople.indexOf(person) + 1;
    comboBox.addItem(person);
}

comboBox.addEventListener(Event.CHANGE, listevalg);  


function listevalg (evt:Event)  
{  
    Points=comboBox.selectedItem.Points;
    // The ranking is now available as "item.Rank".
    youChose.text=String(Points)+" points, rank "+String(comboBox.selectedItem.Rank);
}

コンボボックスに現在の順序を実際に保持する必要がない場合は、並べ替える前に配列のコピーを作成する必要もありません。

于 2012-11-21T20:25:26.217 に答える