Показать сообщение отдельно
Старый 03.05.2016, 04:09
mihael_p вне форума Посмотреть профиль Отправить личное сообщение для mihael_p Посетить домашнюю страницу mihael_p Найти все сообщения от mihael_p
  № 2  
Ответить с цитированием
mihael_p

Регистрация: Jul 2011
Сообщений: 249
Отправить сообщение для mihael_p с помощью Skype™
Не знаю, что у тебя именно не работает, но у меня, перемешивание, сохранение и загрузка массива по принципу "Если игрок зашел в игру первый раз, то у нас должны перемешаться элементы массива. Если нет, то мы должны загрузить перемешанный массив." работает и без второго массива.

Что делает второй цикл? Для меня он показался вообще бессмысленным.
Код AS3:
var art_list_sorted:Array = [];
for (var id in artefacts) {
	art_list_sorted.push(artefacts[id]);
	artefacts[id].id = id;
}
for (var a in artefacts) {
	var id = artefacts[a].id;
	var obj = artefacts[id];
}
Если компилятор выдает ошибку типа Coercion: невозможно преобразовать Object@477d509 в flash.display.DisplayObject., возможно ты пытаешься сделать как-то так:

Код AS3:
addChild(artefacts[0]);
Если сделать трейс типа artefacts[0] то он выдаст тебе:

Код AS3:
trace(typeof (artefacts[0]), " Type of element"); //object
а object на сцену добавлять нельзя.

Чтобы добавить твой артефакт на сцену с параметрами из массива артефактов, нужно сделать примерно следующее:

Код AS3:
for(var i:int = 0;i < artefacts.length;i++)
{
     artefact = new Artefact(); // класс который унаследован от Sprite, MovieClip и т д...
     artefact.id = artefacts[i].id;
     artefact.color = artefacts[i].color;
     artefact.artName = artefacts[i].name;
     addChild(artefact);
 }
Вот мой код:
Код AS3:
 
package {
import flash.display.Sprite;
import flash.net.SharedObject;
 
public class Main extends Sprite{
 
    private var so:SharedObject = SharedObject.getLocal('save');
    private var artefacts:Array = [{name:"art1", color:"red",id:0},{name:"art2", color:"green",id:1},{name:"art3", color:"white",id:2},{name:"art4", color:"yellow",id:3},{name:"art5", color:"black",id:4}];
 
    public function Main() {
 
        trace(JSON.stringify(so.data.art_obj), " First start or not")
 
        if (so.data.art_obj) {
            //(здесь надо загрузить артефакты)
            artefacts = so.data.art_obj;
            trace(artefacts[0], " First element")
        }else {
            shuffle(artefacts);
            saveRandomArt();
        }
 
    }
 
    private function saveRandomArt():void {
        so.data.art_obj = artefacts;
        so.flush();
    }
 
    private function shuffle(artefacts):void {
        trace(JSON.stringify(artefacts))
        for (var i:int = 0; i<artefacts.length; i++) {
            var index:int = int(Math.random()*artefacts.length);
            artefacts.push(artefacts[index]);
            artefacts.splice(index, 1);
        }
        trace(JSON.stringify(artefacts))
    }
 
}
}
И еще, лично мое мнение, всегда указывай типы переменных и типы данных возвращаемых фунциями.
__________________
Не стыдно спросить, стыдно не знать !