Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   загрузка файла произошла, а как работать с параметрами дальше? (http://www.flasher.ru/forum/showthread.php?t=144730)

wlad 20.09.2010 02:27

загрузка файла произошла, а как работать с параметрами дальше?
 
Друзья!

Вот я произвел загрузку файла путем работы с функцией

Код AS1/AS2:

function completeHandler(event:Event):void
{
 
// изменились многие параметры
}

Делаю
Код AS3:

variables.addEventListener(Event.COMPLETE, completeHandler);

и - он ужас! Оказывается все переменные, значения которых я менял в этой функции, своих значений отнюдь не изменили...

Где я неправ?

BlooDHounD 20.09.2010 02:43

вас не понятно. опишите пример по конкретнее

wlad 20.09.2010 23:15

Дорогие друзья!

Сейчас мне удалось создать яркий и колоритный, с МОЕЙ точки зрения, пример, который иллюстрирует МОЕ непонимание работы с некими вещами


Код AS3:

var jj:int = 2;
 
function zzz()
{
        trace ("Привет!");
}
 
zzz();
jj = 4;
trace(jj);
 
<b>Здесь все Ок! Вывод: "4"b>
 
// тест ф-и посложнее...
 
function reportClick(event:MouseEvent):void
{
            var tb_rc:TextField = new TextField();  tb_rc.width = 50; tb_rc.height = 50;
          tb_rc.y = 200;
          tb_rc.x = 100;
    tb_rc.background = true;
        tb_rc.backgroundColor = 0xCCFF99;       
        tb_rc.text = "";
        tb_rc.text = event.localX.toString();
          addChild(tb_rc);
 
        jj = 8;
 
// моя наивная логика: я на полном серьезе считаю, что после применения этой ф-и jj будет 8
 
 
 
}  // function reportClick(event:MouseEvent):void
 
// для ловли мыши на экране...
 
stage.addEventListener(MouseEvent.CLICK, reportClick); //
 
// и вот... я создаю другой контроллер поведения интересующего меня параметра
 
            var tb_rc_c:TextField = new TextField();  tb_rc_c.width = 50; tb_rc_c.height = 50;
          tb_rc_c.y = 200;
          tb_rc_c.x = 100;
    tb_rc_c.background = true;
        tb_rc_c.backgroundColor = 0xCCFFEE;       
        tb_rc_c.text = "";
        tb_rc_c.text =  " jj = " + jj;
          addChild(tb_rc_c);

И в момент нажатия - чудеса: четверка там, восьмерка здесь.

Для одной и той же переменной!

dimarik 21.09.2010 00:34

Все логично, Вы же сделали в reportClick присвоение
Код AS3:

jj = 8;

Зачем там кусок кода с текстовым полем, я не понял, ну и ладно. Что совсем не удалось понять, что Вас беспокоит и что с ВАШЕЙ токи зрения происходит не так и в чем непонимание. Объясните, что Вы ожидали увидеть.

samana 21.09.2010 00:41

Ну да, код
Код AS3:

 tb_rc_c.text =  " jj = " + jj;

выводится сразу, до того как произошел клик мышки, тоесть jj ещё равна 4.
После клика jj становится 8. Все верно.

wlad 21.09.2010 00:55

Дорогие друзья!

Ну почему же после клика эта самая проклятая четверка не превращается в восьмерку? Ведь это противоречие логике хранения данных: или в ячейке хранится четверка, или восьмерка...

Код AS3:

tb_rc_c.text =  " jj = " + jj;

Может быть, дело в том, что я как-то забыл обновить состояние. Т.е. нет чего-то типа stage.update(); В XNA, к примеру, Draw() несколько раз в секунду что-то прорисовывает...

Добавлено через 1 минуту
Господа!

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

samana 21.09.2010 01:05

Да я проверил конечно, всё правильно, добавьте
Код AS3:

jj = 8;
trace(jj)

И вы убедитесь что после клика она равна 8

Добавлено через 7 минут
Вот ваш код, без непонятных текстовых полей, посмотрите, как тут может быть не логично, всё правильно ведь.
Код AS3:

var jj:int = 2;
jj = 4;
trace(jj);
 
function reportClick(event:MouseEvent):void
{
        jj = 8;
        trace(jj)
}
 
stage.addEventListener(MouseEvent.CLICK, reportClick);


wlad 21.09.2010 01:57

Дорогие друзья!

Так ведь задача не в этом!

У меня будет куча значительно более сложных функций и переменных!

Важно, чтобы после ОБРАБОТКИ В Ф-И переменная ПРИОБРЕТАЛА НУЖНОЕ ЗНАЧЕНИЕ!

Здесь, без специальных сигналов по обновлению, проконтролировать это невозможно!

Словить значение,
Код AS3:

 присвоенное переменной - тоже!


КорДум 21.09.2010 08:29

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

f.g.programmer 21.09.2010 09:20

Я вроде понял, чего хочет wlad. Чтобы при изменении переменной jj автоматически менялось значение во всех текстовых полях, в которые произошла запись jj значения.

Это можно сделать например так, объявить jj как метод сеттер, и внутри этого метода обновить все связанные с этой переменной текстовые поля (непосредственно или сгенерировав какое-нибудь событие)

Код AS3:

var _jj:int
function set jj(value:int):void {
        _jj = value;
        tb_rc_c.text =  " jj = " + _jj;
        trace(tb_rc_c.text);
}
 
jj = 4;
jj = 8;


wlad 21.09.2010 12:47

или я не понял, или не пошло....

Весь юмор в том, что я прихожу к выводу, что в ActionScript везде, где что-то связано с event:Event, следить за значениями каких-либо глобальных переменных невозможно...

Ну представьте себе: мой игровой продут связан с многократным кликаньем и подсчетом некоторых показатель по итогам каждого кликанья. Все это городить в одной функции (НАРУЖУ ВЕДЬ НИЧЕГО НЕ ПЕРЕДАЕТСЯ!)? Слабо представляю как...

samana 21.09.2010 13:03

Цитата:

Сообщение от wlad (Сообщение 937517)
(НАРУЖУ ВЕДЬ НИЧЕГО НЕ ПЕРЕДАЕТСЯ!

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

wlad 21.09.2010 14:59

Дорогой Samana!

Цитата:

вам скорее всего обязательно покажут
Вот я привел один пример и еще никто не показал... :)

samana 21.09.2010 15:49

Цитата:

Ну представьте себе: мой игровой продут связан с многократным кликаньем и подсчетом некоторых показатель по итогам каждого кликанья. Все это городить в одной функции (НАРУЖУ ВЕДЬ НИЧЕГО НЕ ПЕРЕДАЕТСЯ!)? Слабо представляю как...
Может я не так понимаю, поможет ли вам это.
Код AS3:

//красный квадрат
var spriteRed:Sprite=new Sprite();
spriteRed.graphics.beginFill(0xFF0000,1);
spriteRed.graphics.drawRect(0,0,50,50);
addChild(spriteRed)
 
//зелёный квадрат
var spriteGreen:Sprite=new Sprite();
spriteGreen.graphics.beginFill(0x00FF00,1);
spriteGreen.graphics.drawRect(50,0,50,50);
addChild(spriteGreen)
 
//синий квадрат )
var spriteBlue:Sprite=new Sprite();
spriteBlue.graphics.beginFill(0x0000FF,1);
spriteBlue.graphics.drawRect(100,0,50,50);
addChild(spriteBlue)
 
//текстовой поле
var tf:TextField=new TextField();
tf.autoSize="left";
tf.y=100
addChild(tf)
 
//подсчёт кликов по каждому квадрату
var red:int=0;
var green:int=0;
var blue:int=0;
 
//обновление текста в текстовом поле
function updateTF(){
        tf.text=" красный нажали: "+red;
        tf.appendText(" зелёный нажали: "+green);
        tf.appendText(" синий нажали: "+blue);
}
 
//сразу выводим текст
updateTF()
 
//при клике увеличиваем переменную цвета, по которому кликнули
stage.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e:MouseEvent):void{
        var target=e.target
        if(target==spriteRed){
                red++
        }
        if(target==spriteGreen){
                green++
        }
        if(target==spriteBlue){
                blue++
        }
        //обновляем текст
        updateTF()
}


yorlin 21.09.2010 20:01

При нажатии отработает только код reportClick(). А в нем вы не говорите программе присвоить это значение и tb_rc_c.text, либо делайте tb_rc_c.text = " jj = " + _jj;
внутри обработчика нажатия, либо объявите свой jj как байндэйбл
Код AS3:

[Bindable]
var jj:int = 2;

Подозреваю вам бинд не подойдет, так как не Flex :)

wlad 23.09.2010 10:53

Господа!

Всем спасибо...

Здесь дело в некой глубокой философии AS.... Она не видна ввиду скудности числа примеров в учебниках...

Добавлено через 4 минуты
Точнее, не видна с ходу... Вообще-то за контролем параметром можно было просто создать еще один прослушиватель... Что я и сделал, свою задачу выполнив...

-De- 23.09.2010 11:25

Ээ, вы если наезжаете в стиле "скудности числа примеров в учебниках", то подробнее расписывайте, чем они скудные. А главное многоточие - не знаете, не используйте.

wlad 23.09.2010 11:37

Ok... постараюсь...

yorlin 23.09.2010 13:48

Да я думаю не в примерах дело, а в непонимании сути и основ. У вас даже вопрос внятно не получилось задать, каждый понял как смог, и ответил в силу понимания. Я например понял, что вы хотите реализовать подобие [Bindable] во Flex, когда один раз присвоив чему либо значение биндованой переменной, оно будет автоматом обновляться при смене значения переменной.

wlad 23.09.2010 23:13

Тссс...

Когда читаешь учебники на русско-китайском....


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

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