2012-11-21 143 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

非常感谢!奇迹般有效! –