Просмотр полной версии : проблемы с SharedObject
Green DeviL
30.05.2009, 23:21
Вот написал такой вот код:
var my_so:SharedObject = SharedObject.getLocal("frame");
my_so.data.frame=_root.carbig._currentframe;
my_so.flush();
tellTarget("_root.carbig") {
gotoAndPlay(my_so.data.frame);
}
По идее _root.carbig - мувик должен отдавать свой _currentframe в my_so.data.frame,
после чего при закрытии должен приогрываться my_so.data.frame , соотвественно перебрасывая мувик в то место, с какого он был закрыт. Но что-то не выходит :wacko: помогите пожалуйста!
Mnilionic
31.05.2009, 22:14
где находится этот код?
из того что я вмжу:
код срабатывает при в первом кадре.
в куку сохраняется первый кадр кдипа.
целевой мувик перебрасывается в первый кадр.
Что написали то и получили.
Нужно разделить логику чтения и сохранения куки.
1. Читаем только при загрузке: если есть кука отправляем на нужный кадр, если нет на первый.
2. по ходу проигрывания клипа обновляем my_so.data.frame (flush не нужен, он сам сохранится при выгрузки флеша.)
Green DeviL
31.05.2009, 23:42
Попытался исправить но всеравно не вышло:
var my_so:SharedObject = SharedObject.getLocal(frame);
my_so.data.frame==0;
function savecucis(){
if(_root.carbig._currentframe==0){
}else{
my_so.data.frame==_root.carbig._currentframe
};};
_root.savecucis();
function loadcucis(){
if(my_so.data.frame>=1){
tellTarget(_root.carbig){gotoAndPlay(my_so.data.frame);};
}else{
};};
_root.loadcucis();
Mnilionic
01.06.2009, 00:23
var my_so:SharedObject = SharedObject.getLocal(frame);
var target_clip = _root.carbig;
// читаем куку
if( !isNaN(Number(my_so.data.frame)) ){
// если есть - отправляем на нужный кадр
target_clip.gotoAndPlay(my_so.data.frame);
}
// записываем куку при каждом изменении кадра клипа
target_clip.onEnterFrame = function(){
my_so.data.frame = target_clip._currentframe;
}
Green DeviL
01.06.2009, 11:36
спасибо Mnilionic за код! Все работает, блин я бы в жизнь не додумался до такого !
Добавлено через 12 минут
При повторном использовании кода
// up1
var my_so1:SharedObject = SharedObject.getLocal(frame);
var target_clip1 = _root.goup1;
// читаем куку
if( !isNaN(Number(my_so1.data.frame)) ){
// если есть - отправляем на нужный кадр
target_clip1.gotoAndPlay(my_so1.data.frame);
}
// записываем куку при каждом изменении кадра клипа
target_clip1.onEnterFrame = function(){
my_so1.data.frame = target_clip1._currentframe;
}
- не сохраняет в куку :( или что-то не так ?
alexcon314
01.06.2009, 12:09
Нужно где-нибудь вставить my_so1.flush(), например, вызывать этот метод по событию "пользователь остановил воспроизведение".
stop_button.onRelease = function(){
my_so1.data.frame = target_clip1._currentframe;
my_so1.flush();
}
Green DeviL
01.06.2009, 12:29
alexcon314, там не кнопкой остановилось а просто закрытием брузера. нужно просто из куки запись\чтение
Добавлено через 3 минуты
еще такая трабла: этот код както-то влияет на прозрачность alpha! как от такого еефекта избавиться? у меня в другом мувиклипе прозрачность от 17% изменяется до 100% , так пока она не станет 100% проигрывается с эти кодом как 0%
alexcon314
01.06.2009, 12:51
Ну, тогда вставьте этот код в энтерфрейм. ))
В принципе, код Mnilionic'a тоже рабочий, в смысле и без принудительного флуша.
Проверяйте.
Green DeviL
01.06.2009, 13:07
вставка кода в onEnterFrame не помогла, муви клипы только начали бесконечно проигрываться
Добавлено через 3 минуты
Код рабочий но только почему-то 1 раз %), я этого слегка недопонимаю, просто таких мувиклипов как _root.carbig у меня на сцене штук 6 еще, надобы сделать чтоб все сохранялись в кукис. может в массиве както-то их загнать если не получается второй раз код пихать?
alexcon314
01.06.2009, 13:35
Вот-вот. Думается,что при такой нагрузке на кадр (вычисления, графика, перерисовка) глюки при сбросе данных на винт в шаредобжект вполне возможны. Сделайте все-таки сброс данных вне энтерфрейма. Попробуйте использовать setInterval. Или сбрасывайте не в каждом кадре.
Mnilionic
01.06.2009, 21:29
ну так храните номера кадров в одной куке, в объекте скажем.
где свойство это мувик, а значение, собственно номер кадра.
alexcon314, в том то и дело, что без flush данные сохраняются при выгрузка клипа.
А если принудительно писать на винт каждый раз, то тут возможно варианты :)
Green DeviL
01.06.2009, 23:15
Вся соль в том что кадр у меня 1, на главной сцене, это сделано для економии размера флешки, если я сделаю 1сцену скажем с 300 кадров, это увеличит размер самой флешки, но будет гарантировать стабильность кода?
Добавлено через 4 минуты
Mnilionic, если я вас правильно понял то target_clip - my_so.data.frame - это какбы одна полочка,
потом следует допустим target_clip2 - my_so.data.frame2 ... и т.д ? какой примерно код нескольких обьектов в 1 куку? :)
Mnilionic
01.06.2009, 23:44
var my_so:SharedObject = SharedObject.getLocal(frame);
// целевые клипы
var clips = new Object();
clips.mc1 = _root.carbig1;
clips.mc2 = _root.carbig2;
clips.mc3 = _root.carbig3;
// читаем куку
for( mc in clips){
var target_clip = clips[mc];
// сохраняем в липе его ключ
target_clip.key = mc;
// если есть - отправляем на нужный кадр
if( !isNaN(Number(my_so.data[mc])) )
target_clip.gotoAndPlay(my_so.data[mc]);
// записываем куку при каждом изменении кадра клипа
target_clip.onEnterFrame = folow_frame;
}
function folow_frame(){
my_so.data[this.key] = this._currentframe;
}
Только осторожней с onEnterFrame. Если клипов много то будут лаги. Разумней делать интервалами или использовать класс для этого типа мувиков.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.