2016-01-07 2 views
0

У меня этот код в моей простой вспышке. Я хочу сохранить имя и оценку в своей викторине. Ссылка на мой код на этом веб-сайте http://www.mollyjameson.com/blog/local-flash-game-leaderboard-tutorial/Не удается сохранить массив в общем объекте as3

Я хочу сделать свой код всего одним действием. Но я не добился успеха.

var m_FlashCookie = SharedObject.getLocal("LeaderboardExample"); 

var EntryName:String ="nama kamu"; 
var EntryScore:String ="nilai"; 
const NUM_SCORES_SAVED:int = 10; 

inputBoxScore.text = EntryScore; 
inputBoxName.text = EntryName 

var latest_score_object:Object = { 
    name: EntryName, 
    score: EntryScore 
}; 

var arr:Array; 
arr = m_FlashCookie.data.storedArray 

if (arr == null) 
{ 
    arr = new Array(); 
} 

arr.push(latest_score_object); 
arr.sortOn("score", Array.NUMERIC | Array.DESCENDING); 

if (arr.length < NUM_SCORES_SAVED) 
{ 
    arr.pop(); 
} 

btnSave.addEventListener(MouseEvent.CLICK, saveData); 
function saveData(event:Event):void 
{ 
     m_FlashCookie.data.arr = arr; 
     m_FlashCookie.flush(); 
} 

var myHTMLL:String = ""; 
var total_stored_scores:int = arr.length; 

btnLoad.addEventListener(MouseEvent.CLICK, loadData); 
function loadData(event:Event):void 
{ 
    for (var i:int = 0; i < total_stored_scores; ++i) 
    { 
     // loop through every entry, every entry has a "name" and "score" field as that's what we save. 
     var leaderboard_entry:Object = arr[i]; 

     // is this the last score that was just entered last gamestate? 
     if (leaderboard_entry == latest_score_object) 
     { 
     myHTMLL += (i+1) + ". <b><font color=\"#0002E5\">"+ leaderboard_entry.name + " " + leaderboard_entry.score +"</font></b><br>"; 
     } 
     else 
     { 
     myHTMLL += (i+1) + ". "+ leaderboard_entry.name + " " + leaderboard_entry.score +"<br>"; 
     } 
    } 
    myHTML.text = myHTMLL; 
} 

Может кто-нибудь мне помочь?

+0

Что об этом не увенчалась успехом? – Aaron

+0

Я не могу сохранить или загрузить с кнопки. Это не работает. – ayu

ответ

0

Вы сохраняете массив как data.arr, но читаете массив как data.storedArray. Вы должны сделать их одинаковыми.

Другими словами, вы написали это:

m_FlashCookie.data.arr = arr; 

И при загрузке:

arr = m_FlashCookie.data.storedArray; 

Это явно не имеет смысла: data.storedArray никогда не устанавливается, так что никогда не будет имеют значение, поэтому вы всегда будете иметь новый пустой массив.

Необходимо использовать одно и то же свойство на общем объекте data. Например:

m_FlashCookie.data.storedArray = arr; 
m_FlashCookie.flush(); 

Глядя на ваш код, есть ряд других вопросов:

  1. последняя оценка немедленно удаляется, потому что arr.length < NUM_SAVED_SCORES будет верно с самого начала, так как arr начинается пустым, а затем вызывает arr.pop(), который удаляет последнюю добавленную запись. Таким образом, массив всегда пуст.

  2. Он добавляет счет сразу arr.push(latest_score_object) вместо ожидания, пока пользователь не наберет, так что значение входных текстов вообще не имеет значения - сохраненные значения всегда будут «nama kamu» и «nilai», ,

следующие исправления все вопросы, отметил:

var leaderboard = SharedObject.getLocal("leaderboard"); 

const MAX_SAVED_SCORES:int = 10; 

inputBoxName.text = "nama kamu"; 
inputBoxScore.text = "nilai"; 

var entries:Array = leaderboard.data.entries || []; 

var latestEntry:Object; 

displayScores(); 

btnLoad.addEventListener(MouseEvent.CLICK, loadClick); 
btnSave.addEventListener(MouseEvent.CLICK, saveClick); 

function loadClick(e:MouseEvent):void { 
    displayScores(); 
} 

function saveClick(e:MouseEvent):void { 
    saveLatestScore(); 
    displayScores(); 
} 

function saveLatestScore():void { 

    // create the latest entry based on input texts 
    latestEntry = { 
     name: inputBoxName.text, 
     score: inputBoxScore.text 
    }; 

    // add the entry and sort by score, highest to lowest 
    entries.push(latestEntry); 
    entries.sortOn("score", Array.NUMERIC | Array.DESCENDING); 

    // if reached the limit, remove lowest score 
    if (entries.length > MAX_SAVED_SCORES) { 
     entries.pop(); 
    } 

    // store new sorted entries to shared object 
    leaderboard.data.entries = entries; 
    leaderboard.flush(); 
} 

function displayScores():void { 
    var myHTMLL:String = ""; 

    for (var i:int = 0; i < entries.length; ++i) { 
     // loop through every entry, every entry has a "name" and "score" field as that's what we save. 
     var entry:Object = entries[i]; 

     // is this the last score that was just entered last gamestate? 
     if (entry == latestEntry) 
     myHTMLL += (i+1) + ". <b><font color=\"#0002E5\">"+ entry.name + " " + entry.score +"</font></b><br/>"; 
     else 
     myHTMLL += (i+1) + ". "+ entry.name + " " + entry.score +"<br/>"; 
    } 
    myHTML.htmlText = myHTMLL; 
} 
+0

Тогда что мне делать? Это мой первый раз с использованием общего объекта. – ayu

+0

Вам нужно сделать их одинаковыми. – Aaron

+0

Я исправлю это, но моя кнопка сохранения и загрузки не работает. Ничего. – ayu