2016-03-21 37 views
-1

就一直試圖隨機化一堆按鈕的座標和管理時,這種成功使用此代碼...的RangeError:錯誤#1125:索引0是出0

var coordinates:Vector.<Point> = new <Point>[ 
new Point(44, 420), 
new Point(270, 420), 
new Point(44, 550), 
new Point(270, 550) 
]; 


function positionAtRandomCoordinate(object:DisplayObject):void { 
var index:int = Math.random() * coordinates.length; 
var coordinate:Point = coordinates.splice(index, 1)[0]; 
object.x = coordinate.x; 
object.y = coordinate.y; 
} 

positionAtRandomCoordinate(answerButtons); 
positionAtRandomCoordinate(answerButtons_2); 
positionAtRandomCoordinate(answerButtons_3); 
positionAtRandomCoordinate(answerButtons_4); 

此代碼的工作,當我的範圍開始遊戲,隨機選擇按鈕的座標。

我遇到的問題是每次有正確答案時我都希望這些座標隨機化。

我對這個代碼...

function checkAnswers() { 
if (questionColour == answerColour){ 
    textLabeller(textBox); 
    colourLabeller(textBox); 
    updateScore(); 
positionAtRandomCoordinate(answerButtons); 
positionAtRandomCoordinate(answerButtons_2); 
positionAtRandomCoordinate(answerButtons_3); 
positionAtRandomCoordinate(answerButtons_4); 


    if (score > sharedData.data.highScore){ 
     sharedData.data.highScore = score; 
     sharedData.flush(); 
     updateHiScore(); 


    } 
    SecondsToCountDown = 6; 

    }else { 
    trace ("colours do not match"); 
    CountDownTimer.stop(); 
    gotoAndStop(3); 
} 

} 

大多數checkAnswers功能無關,我覺得這個問題,它只是顯示的功能是如何工作通過檢查兩件事情配合,有什麼需要發生。

當我運行此,按鈕隨機化像正常......但是當我得到一個正確的答案我爬輸出這個錯誤

的RangeError:錯誤#1125:索引0是超出範圍0。

...而且他們不再隨機化。

有什麼想法嗎?將不勝感激。

編輯

每阿倫斯建議,我修改後的代碼...

function createCoordinatePositions():Vector.<Point> { 
return new <Point>[ 
    new Point(44, 420), 
    new Point(270, 420), 
    new Point(44, 550), 
    new Point(270, 550) 
]; 
} 

function positionAtRandomCoordinate(object:DisplayObject, coordinates:Vector.<Point>):void { 
var index:int = Math.random() * coordinates.length; 
var coordinate:Point = coordinates.splice(index, 1)[0]; 
object.x = coordinate.x; 
object.y = coordinate.y; 
} 

function positionButtonsRandomly():void { 
var coordinates:Vector.<Point> = createCoordinatePositions(); 
positionAtRandomCoordinate(answerButtons, coordinates); 
positionAtRandomCoordinate(answerButtons_2, coordinates); 
positionAtRandomCoordinate(answerButtons_3, coordinates); 
positionAtRandomCoordinate(answerButtons_4, coordinates); 
} 

然後我加入到我的checkAnswers()函數...

positionButtonsRandomly(); 

現在無誤差地工作。

謝謝!所有的冰雹亞倫。

+0

第二次執行該代碼時,「座標」數組爲空!不要忘記你已經使用'coordinates.splice()'... – akmozo

回答

1

您需要每次重新創建座標,因爲當您選擇隨機位置時,您將使用splice()刪除所有點。

例如,而是採用了頂級coordinates變種,你可以創建一個函數來創建可能的座標:

function createCoordinatePositions():Vector.<Point> { 
    return new <Point>[ 
     new Point(44, 420), 
     new Point(270, 420), 
     new Point(44, 550), 
     new Point(270, 550) 
    ]; 
} 

然後修改您的隨機位置功能採取可能的座標參數:

function positionAtRandomCoordinate(object:DisplayObject, coordinates:Vector.<Pont>):void { 
    // Same as before 
} 

現在所有按鈕位置而隨機首次創建可能的座標的新列表並將其傳遞到每個調用隨機位置:

function positionButtonsRandomly():void { 
    var coordinates:Vector.<Point> = createCoordinatePositions(); 
    positionAtRandomCoordinate(answerButtons, coordinates); 
    positionAtRandomCoordinate(answerButtons_2, coordinates); 
    positionAtRandomCoordinate(answerButtons_3, coordinates); 
    positionAtRandomCoordinate(answerButtons_4, coordinates); 
    // By here the coordinates.length = 0 
} 
+0

嘿亞倫,真的很感謝你在這個項目上給我的幫助。我對代碼進行了這些調整,每當我得到正確的答案時,我似乎仍然會遇到範圍錯誤。 任何想法? –

+0

它應該工作,發佈您的更新代碼。把整個東西放在一個你可以調用的函數中可能會有所幫助,比如'positionButtonsRandomly()'。我用一個例子更新了我的答案。 – Aaron

+0

剛剛看到你的答案修改,現在它在一個函數checkAnswers可以正確調用它,這一切都對我有意義。非常感謝Aaron的幫助,你是一位真正的天才。 –

相關問題