PDA

Просмотр полной версии : Проблемы с SharedObject


sergsa
28.10.2008, 23:45
Есть массив d, пользователь заполняет его, дублируя и расставляя в рабочей области некоторые мувики. Есть две кнопки по нажатию на которые масив нужно сохранять и открывать. В массиве хранятся продублированные мувики и их свойства: d[i][0]-_x
d[i][1]-_y
d[i][2]-_name
d[i][3]-_rotation
d[i][4]-depth
Но постоянно вылазят какие-то необъяснимые бока... Извиняюсь, но код прилагаю без рамочки, так-как забыл как это делается:

var so:SharedObject = SharedObject.getLocal("masiv");

function saveit(){so.data.array =d}///-сохранить

///-открыть
function openit(){item=0
for(i in d){eval(d[i][2]).removeMovieClip()}
d=so.data.array
build()
}
function build(){
for(i in d){item++
duplicateMovieClip(substring(d[i][2],1,4),d[i][2],d[i][4])
eval(d[i][2])._x=d[i][0]
eval(d[i][2])._y=d[i][1]
eval(d[i][2])._rotation=d[i][3]
}
}

DarkLight
29.10.2008, 01:05
По коду мало чего понятно, но по личному опыту:
1) сохранение в so несинхронно
2) при чтении лучше убивать ссылку на so и получать заново. В свое время тема на форуме поднималась, у меня получалось читать один so двумя флешками одновременно только при условии пересоздания ссылки на so после каждой записи. И это работало не на всех компьютерах.

sergsa
29.10.2008, 01:15
что значит сохранение несинхронно и как сделать синхронным и с чем синхронизировать?
Что значит убивать ссылку?

DarkLight
29.10.2008, 01:18
Сохранение несинхронно - значит данные обновятся не в момент, когда Вы сохраняете, а чуть позже. Кстати, чтобы сохранить данные, нужно вызвать метод flush после всех изменений, а в Вашей функции saveit я этого не вижу.

Убить ссылку - обнулить, например.

sergsa
29.10.2008, 01:47
Тысяча извинений за тупость ,но всё равно я ничего не понял...
Данные записываются в масив по ходу действий пользователя. А масив в so - по клику на кнопке "сохранить". О каких моментах идёт речь?
И какой смысл обнулять so перед чтением, если мне нужна информация из него? Что я потом считаю, если обнулю?

Mnilionic
29.10.2008, 02:49
зачем удалять:
...for(i in d){eval(d[i][2]).removeMovieClip()}
а затем 'стрить':
...d=so.data.array
build()

может заранее проверять есть ли куки и 'строить' сразу как положенно?

sergsa
29.10.2008, 04:35
удалять что-бы очистить рабочую область, которую потом заполнить новыми объектами на основании информации загруженной из so

затем что-б очистить рабочую область и построить новую композицию на основании информации, полученной из so. Т. е. наставил я объектов, а потом вдруг решил вернуться к сохранённому варианту - существующий вариант удаляем, а на его месте выстраиваем сохранённый