|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Загрузка массивов и векторов из SharedObjects
Сохранение в игре делаю через
До некоторых пор сохранял и загружал значения любых переменных без проблем, даже массивы. Но потом внезапно векторы со строковыми значениями перестали загружаться. // сохранение var v:Vector.<String>=new Vector.<String>(['1','2']) saved.data.v=v // загрузка v=saved.data.v Странно - подумал я, тем более, что векторы с числами загружались нормально, а векторы типа Vector.<String> - ни в какую: пишет ошибку 1034 о невозможности преобразования объекта в строку. Решил заставить воспринимать сохранённое значение как вектор: trace(saved.data.v); // выводит '1,2' v=saved.data.v as Vector.<String> trace(v) // выводит null Тогда я решил не приравнивать значения, а тупо засунуть в вектор значения из сохранённого вектора. Но проблема осталась, так как вместо всё записалось в нулевую ячейку: trace(saved.data.v); // выводит '1,2' v.push(saved.data.v); trace(v[0]) // выводит '1,2' trace(v[1]) // выдаёт ошибку о выходе индекса 1 за границы диапазона Пробовал плюнуть на векторы возвращаться к массивам - проблема та же. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Не смогу обьяснить литературным языком, но вот в этой строчке, Вы помещаете в массив массив.
Попробуйте вот так - |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Цитата:
// сохранение trace('Saving. saved.data.v='+saved.data.v) // пишет Saving. saved.data.v=undefined trace('Saving. v='+v);// пишет Saving. v=1,2 saved.data.v = v; trace('Saved. saved.data.v='+saved.data.v)// Saved. saved.data.v=1,2 // сохранилось нормально. выходим из игры, запускаем заново // загрузка trace('Loading. saved.data.v='+saved.data.v) // пишет Loading. saved.data.v=1,2 trace('Loading. v='+v);// пишет Loading. v= saved.data.v = v; trace('Loaded. saved.data.v='+saved.data.v)// пишет Loaded. v=null |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Добавлено через 4 минуты Цитата:
Вот же трейс выдает Цитата:
Поэтому и null.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2013
Сообщений: 126
|
Цитата:
Я с самого начала хотел так сделать, но думал, что это то же самое, что Это лишний раз доказывает, что надо пробовать все варианты)) Кстати, можете скратце объяснить разницу между 'Class(var)' и 'var as Class'? Я думал, что и то и другое заставляет "обращаться со значением var как с принадлежащим к классу Class"... Добавлено через 4 минуты а ещё остаётся открытым вопрос, почему такая фигня только с векторами со значениями String? С int и uint просто приравниваю и всё работает: |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я не вижу проблемы, Вы показали только то, что работает КАК ДОЛЖНО работать.
Если тот же код не работает со стрингами, то возможно проблема в том, что ваш saved.data.v это массив, а не типизированный вектор, и при преобразовании нетипизированных значений массива в типизированный вектор происходит какой-то облом. Разница между кастингом as и конвертацией Type() в том, что кастинг не выбрасывает ошибку, а просто возвращает нулл.
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 07:18. |
|
« Предыдущая тема | Следующая тема » |
|
|