|
|
|||||
Регистрация: May 2016
Сообщений: 5
|
Сохранение отсортированного массива
Привет всем!
Пытаюсь сделать игрушку. Короче, есть массив с артефактами: private var artefacts:Array = [ {артефакт №1 и его свойства} {артефакт №2 и его свойства} {артефакт №3 и его свойства} {артефакт №4 и его свойства} ] private var so:SharedObject = SharedObject.getLocal('save'); function saveRandomArt() { so.data.art_obj = artefacts; so.flush(); } 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]; } function shuffle(artefacts) { for (var i=0; i<artefacts.length; i++) { var index = int(Math.random()*artefacts.length); artefacts.push(artefacts[index]); artefacts.splice(index, 1); } } if (so.data.art_obj) { //(здесь надо загрузить артефакты) //artefacts = so.data.art_obj; (не работает, ниже где вызывается artefacts[0] выдает ошибку }else { shuffle(artefacts); saveRandomArt(); } |
|
|||||
Не знаю, что у тебя именно не работает, но у меня, перемешивание, сохранение и загрузка массива по принципу "Если игрок зашел в игру первый раз, то у нас должны перемешаться элементы массива. Если нет, то мы должны загрузить перемешанный массив." работает и без второго массива.
Что делает второй цикл? Для меня он показался вообще бессмысленным. 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]; } Если сделать трейс типа artefacts[0] то он выдаст тебе: а object на сцену добавлять нельзя. Чтобы добавить твой артефакт на сцену с параметрами из массива артефактов, нужно сделать примерно следующее: 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); } 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)) } } }
__________________
Не стыдно спросить, стыдно не знать ! |
|
|||||
Регистрация: May 2016
Сообщений: 5
|
Спасибо большое за ответ, если можно, чуть подробнее про то, как добавить артефакт на сцену. У меня есть внутри каждого элемента параметр icon, затем эту иконку я должен отобразить.
Вот эта строчка мне не понятна, у меня нет такого класса...
|
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Цитата:
|
|
|||||
Регистрация: May 2016
Сообщений: 5
|
а что должно быть в этом классе? я попробовал сделать пустой класс, унаследовал от спрайта, в глобале объявил свойства артефактов (иначе ругается). дальше, где я хочу добавить иконку, как раз выдает Ошибка типа Coercion
а если просто оставить то ошибок нет, но ничего и не происходит |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
сначала нужно создать свойство icon в этом классе, а уж потом выводить его. Ну а проще, на мой взгляд, после загрузки каждого "артефакт №* и его свойства" добавлять их в новый экземпляр класса artefact. Тогда для того, чтобы сразу вывести всё, будет достаточно "addChild(artefact);", а что-то одно addChild(artefact.*);. Вы просто не понимаете пока что для чего нужны классы, что такое наследование, композиция, интерфейсы и т.д. Разберитесь сначала с основами снова: типы данных(особенно приведение), классами(и их экземплярами), наследованием, дальше композиция - этого хватит для реализации вашей задумки на этом этапе.
прочитайте и поймите два слушателя, ОЧЕНЬ помогут писать предсказуемый код |
|
|||||
Что такое icon? Путь до картинки?
__________________
Не стыдно спросить, стыдно не знать ! |
|
|||||
Регистрация: May 2016
Сообщений: 5
|
[Embed(source = "buttons/book.png")] private var art_book_cls:Class; private var art_book:Bitmap = new art_book_cls; private var artefacts:Array = [ {bonus:"xdamage", nameArt:Language.artbook_text, icon:art_book} ] Добавлено через 2 минуты Цитата:
|
|
|||||
Я бы вообще не советовал использовать это:
Embed всегда останется в памяти, а оно вам надо? Я бы сделал так: а в классе Artefact загружал эту иконку с помощью класса Loader.
__________________
Не стыдно спросить, стыдно не знать ! |
|
|||||
Регистрация: May 2016
Сообщений: 5
|
Так ничего и не получилось у меня ничего... Ошибок нет, но на экран артефакты не выводятся (прикрепил исходник). Пожалуйста, помогите кто может, уже несколько дней не сплю
|
Часовой пояс GMT +4, время: 17:39. |
|
« Предыдущая тема | Следующая тема » |
|
|