2012-11-21 142 views
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"; 
} 

我想要一個文本框來說明當前的排名是什麼。假設我在組合框中選擇了Chris Tucker,我希望文本框能說'他處於第二位'如何從組合框中獲取值?

回答

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); 
} 

如果你實際上並不需要保持當前的訂單在組合框中,你甚至都不需要排序之前,在數組的一個副本。

+0

謝謝,但是我的代碼的哪一部分會因此而更改,因爲現在我在組合框中列出了兩次所有名稱。它也只是sys在文本字段中「排名」。 –

+0

它應該取代創建和事件監聽器部分。我剛剛更新以顯示更完整的代碼視圖。我現在沒有IDE,所以它可能包含一些語法錯誤,但這是總體方向。 – BoppreH

+0

非常感謝!奇蹟般有效! –