Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не срабатывает SharedObject.getRemote, то есть работает, но не совсем корректно! (http://www.flasher.ru/forum/showthread.php?t=150320)

Killer_13 09.02.2011 20:04

Не срабатывает SharedObject.getRemote, то есть работает, но не совсем корректно!
 
Здравствуйте, разбираюсь с SharedObject.getRemote и в целом с серверной частью языка, только сначала нужно понять принцип работы SharedObject. Делаю небольшой пример.

В обычное текстовое поле ввожу текст записываю его в SharedObject.data потом это свойство SharedObject присваиваю обычному TextField в пределах одного приложения все работает прекрасно, если запускаю 2 приложения, то каждое работает по отдельности а я хочу писать в поле одного приложения и обновлять в TextField двух запущенных приложений.
Тоисть хочу сделать общий SharedObject. точнее общее свойство.

Вот кусок кода который все это делает.

Код AS3:

                private var _netCon:NetConnection;
                private var _soCrGame:SharedObject;
                private var t:TextInput;
                private var tf:TextField;
 
                public function Main() {
 
                        this._netCon = new NetConnection();
                        this._netCon.connect("rtmp://localhost/myApp");
                        this._netCon.addEventListener(NetStatusEvent.NET_STATUS,doSO);
 
                }
 
                private function doSO(event:NetStatusEvent):void {
                        t = new TextInput();
                        addChild(t);
                        t.addEventListener(Event.CHANGE, change);
 
                        tf = new TextField();
                        tf.textColor = 0xFFFFFF;
                        tf.x = 100;
                        tf.y = 100;
                        addChild(tf);
 
                        var good:Boolean = event.info.code == "NetConnection.Connect.Success";
                        if (good){
                        _soCrGame = SharedObject.getRemote("_soCrGame", _netCon.uri, false);
                        _soCrGame.connect(_netCon);
                        _soCrGame.addEventListener(SyncEvent.SYNC,doUpdate);
                        }
                }
 
                private function change(event:Event):void {
                        _soCrGame.setProperty ("msg", t.textField.text);
                        trace(_soCrGame.data.msg);
                }
 
 
                private function doUpdate (se:SyncEvent):void{
                        _soCrGame.setProperty ("msg", t.textField.text);
                        tf.text = _soCrGame.data.msg;
                }

Спасибо большое.


Только не переносите в другой раздел, в первую очередь здесь AS3, нет ни строчки серверного AS/

Saulot 09.02.2011 20:39

Судя по всему, у вас вполне рабочий код. Только в
Код AS3:

private function doUpdate (se:SyncEvent):void{
        _soCrGame.setProperty ("msg", t.textField.text);
        tf.text = _soCrGame.data.msg;
}

setProperty явно лишнее.

Killer_13 09.02.2011 20:52

Почему лишнее? Без него не запишется в TextField.

Killer_13 09.02.2011 21:01

Вложений: 1
Для большей ясности вот, скриншот.


Приложение запущено 2 раза, SharedObjectы создаются, все нормально.
Только я хочу, чтоб в TextField отображался текст который набран из двух TextInput-ов.

Saulot 09.02.2011 21:07

Потому что
Код AS3:

        _soCrGame.setProperty ("msg", t.textField.text);
        tf.text = _soCrGame.data.msg;

Равнозначно
Код AS3:

tf.text=t.textField.text;


Killer_13 09.02.2011 21:11

:):):) Я это понимаю, сейчас свойства полей ввода и вывода, не актуальны, я не прошу помощи в оптимизации кода. Я прошу помощи в разборе полетов с SharedObject-ами. Я намеренно передаю туда текст через SharedObject.

Если можете скажите что нить по сути, ведь как видно из скриншотов все не совсем так как я хочу, мне бы понять это и все, .
Спасибо.

Saulot 10.02.2011 03:33

Ладно, расшифровываю. Об оптимизации я ни слова не говорил, ваш код работает именно так, как он написан.

Код AS3:

//Вызываеться при каждом обновлении SharedObject-а любой флешкой.
//Допустим soCrGame.data.msg=='aaa' и t.textField.text='bbb'.
private function doUpdate (se:SyncEvent):void{
        //soCrGame.data.msg=='aaa'
        _soCrGame.setProperty ("msg", t.textField.text);
        //soCrGame.data.msg=='bbb'
        tf.text = _soCrGame.data.msg;
        //tf.text=='bbb' а должен быть 'aaa'.
}

Вы получаете данные от второй флэшки, затираете их и используете данные своей. Естественно, результат такой будто флэшки никак не взаимодействуют между собой.

Killer_13 10.02.2011 03:56

:) Под оптимизаций я имел введу, то что вы сказали, что 2 строки можно привести в одну, я думал вы не поняли сути вопроса.
Я думаю это можно как то отслеживать по кодах которые дают флешки.
Или?
А они все таки взаимодействуют, но я нахимичил. :)
Подскажите тогда как поменять код так, чтоб он работал так как я хочу, спасибо. :)

Saulot 10.02.2011 12:41

Как вариант, если нужна синхронизация обоих текстовых полей:

Код AS3:

private function doUpdate (se:SyncEvent):void{
        t.textField.text = _soCrGame.data.msg;
        tf.text = _soCrGame.data.msg;
}

Либо, если только tf, то:

Код AS3:

private function doUpdate (se:SyncEvent):void{
        tf.text = _soCrGame.data.msg;
}

изменения будут вводиться после первого ченджа t.textField.
А вот с первичной записью:
Код AS3:

private function doUpdate (se:SyncEvent):void{
        if (!_soCrGame.data.msg) {
            _soCrGame.setProperty ("msg", t.textField.text);
        } else {
            t.textField.text = _soCrGame.data.msg;
            tf.text = _soCrGame.data.msg;
        }
}


Killer_13 10.02.2011 16:41

Пасибо, - попробую.


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

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