2017-08-31 36 views
0

因此,我有一个3x3的文本字段网格,旨在显示3个最佳分数以及自从游戏启动以来获得的单圈时间和carHealths,并且如果获得更好的分数,现在的排行榜中的成绩就是新的成绩,圈速和carHealth取代了原来的成绩,并将其下的所有成绩都降低了一分。存储排名前3的分数

问题是它只是取代最高分,即使它是一个更糟糕的分数,如果只剩下其他2个点不变。我是否错过了一些非常明显的东西,或者我是否会发现这一切都是错的?

function leaderBoard(): void 
{ 
    if (score < scoreArray[2]) 
    { 
     return 
    } 

    if (score > scoreArray[0]) 
    { 
     scoreArray.unshift(score); 
     lapTimerArray.unshift(lapTimer.currentCount); 
     carHealthArray.unshift(carHealth); 

     scoreArray.pop() 
     lapTimerArray.pop() 
     carHealthArray.pop() 
    } 
    else if (score > scoreArray[1]) 
    { 
     scoreArray.splice(1, 0, score); 
     lapTimerArray.splice(1, 0, lapTimer.currentCount); 
     carHealthArray.splice(1, 0, carHealth); 

     scoreArray.pop(); 
     lapTimerArray.pop(); 
     carHealthArray.pop(); 
    } 
    else if (score > scoreArray[2]) 
    { 
     scoreArray.pop(); 
     lapTimerArray.pop(); 
     carHealthArray.pop(); 

     scoreArray.append(score); 
     lapTimerArray.append(lapTimer.currentCount); 
     carHealthArray.append(carHealth); 
    } 
} 
+0

如果我正确理解你的问题,也许问题从你的使用率茎'else if',而不是单独做'if'。目前,如果您的'scorearray'中的第一项小于'score',则您执行代码。其他条款只有在条件失败时才能被触发,所以只有在score scoreArray [1]。 – DodgerThud

+0

所以我试图让他们所有如果陈述,但随后所有三行显示相同的分数,并在同一时间被取代。我也尝试在每个if语句的底部添加回车,但是只有第一个是替换,其他的不管分数如何都不会改变。 – Jester

回答

1

哦,上帝:)如果你突然想要显示前10的分数,你会怎么做?

这种方法如何:您将汽车的所有信息存储在一个对象(或类)中,然后按分数对您的数组进行排序。这样,您dan't得一塌糊涂三个单独的数组(也许你会希望以后更多的属性添加到您的车):

var car1:Object = {name:"Car 1", score:100, lapTimer:100, carhealth:50}; 
var car2:Object = {name:"Car 2", score:1050, lapTimer:100, carhealth:50}; 
var car3:Object = {name:"Car 3", score:700, lapTimer:100, carhealth:50}; 

var myCars:Array = [car1, car2, car3]; 

// Then you probably want to pass your car objects to your cars and modify them from there: car3.score = 400 etc. The car objects can be created dynamically based on how many cars you want 

// In the end 
function displayScores():void 
{ 
    myCars.sortOn("score"); // sort cars on score property 

    // display top 3 
    for(i:int = 0, i < 3; i++) 
    { 
     trace("Place " + (i+1) + " - " + myCars[i].name + ", Score " + myCars[i].score); 
    } 
}