Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   проблемы с SharedObject (http://www.flasher.ru/forum/showthread.php?t=125710)

Green DeviL 30.05.2009 23:21

проблемы с SharedObject
 
Вот написал такой вот код:
Код AS1/AS2:

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

Попытался исправить но всеравно не вышло:
Код AS1/AS2:

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

Код AS1/AS2:

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 минут
При повторном использовании кода
Код AS1/AS2:

// 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

Код AS1/AS2:

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. Если клипов много то будут лаги. Разумней делать интервалами или использовать класс для этого типа мувиков.


Часовой пояс GMT +4, время: 05:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.