IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Number не работает. Почему?
garrrold
сообщение 11.03.2012 - 05:50
Сообщение #1


Новичок
*

Группа: Новичок
Сообщений: 4
Регистрация: 9.03.2012
Пользователь №: 10920



Привет, друзья!
ActionScript 2.0. Есть 2 текстовых поля для ввода текста с переменными n и m и один динамический текст с переменной s. Переменные присвоены в палитре "свойства", раздел "параметры".
На кнопке код: on(release){s = Number(n) + Number(m);}
Почему при вводе чисел в поля n и m не выводится их сумма?? почему не работает перевод текста в числа функцией Number?? выводит во всех проверенных мною версиях Adobe Flash только одно -- NaN.
Подскажите, где здесь может быть ошибка.
Всем спасибо.

Сообщение отредактировал garrrold - 11.03.2012 - 15:50
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 11.03.2012 - 15:37
Сообщение #2


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4739
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



garrrold

Нужно писать Number, а ты в обработчике нажатия написал Numder.


--------------------
Best wishes & regards,
MustLive
Администратор сайта
http://mlfun.org.ua
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
garrrold
сообщение 11.03.2012 - 15:49
Сообщение #3


Новичок
*

Группа: Новичок
Сообщений: 4
Регистрация: 9.03.2012
Пользователь №: 10920



Цитата(MustLive @ 11.03.2012 - 19:37) *
garrrold

Нужно писать Number, а ты в обработчике нажатия написал Numder.


Да нет, я просто опечатался. Number, конечно же.
Я просто вообще ничего не понимаю, переустанавливал Flash, Adobe AIR, flash-плеер -- никакого результата...
точнее результат один -- NaN...

Сообщение отредактировал garrrold - 11.03.2012 - 15:51
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 12.03.2012 - 01:11
Сообщение #4


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4739
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
Да нет, я просто опечатался. Number, конечно же.

garrrold, главное, чтобы в AS коде своей флешки ты не опечатался.

Если этот код у тебя правильно задан, но выдаёт "NaN", значит ты мог не так считывать данные из полей. Перед присваиванием суммы переменной s задай строковые значения переменным n и m. Если код сработает корректно, значит у тебя Number работает корректно (как и должно) и проблема именно в считывании данных из текстовых полей.

Код
n = "1";
m = "1";
s = Number(n) + Number(m);


--------------------
Best wishes & regards,
MustLive
Администратор сайта
http://mlfun.org.ua
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
garrrold
сообщение 12.03.2012 - 05:49
Сообщение #5


Новичок
*

Группа: Новичок
Сообщений: 4
Регистрация: 9.03.2012
Пользователь №: 10920



Цитата(MustLive @ 12.03.2012 - 05:11) *
Код
n = "1";
m = "1";
s = Number(n) + Number(m);

этот код работает корректно. проблема именно в считывании данных из текстовых полей. как это исправить? почему при вводе данных в текстовое поле Number отказывается переводить их в число?

Сообщение отредактировал garrrold - 12.03.2012 - 13:53
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 12.03.2012 - 12:49
Сообщение #6


Ветеран конференции
*****

Группа: Пользователь
Сообщений: 1102
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата
Переменные присвоены в палитре "свойства", раздел "параметры".


Не надо так делать. Вкупе с обработчиком на кнопках on(release) не сложно запутаться в путях и областях видимости
Надо именовать само текстовое поле и потом обращаться к его переменной text, например:

Код
trace(Number(имя_моего_текстового_поля.text))


Ну и обработчик тоже стоит делать по-другому, писать в кадре, а не на самой кнопке:

Код
имя_моей_кнопки.onRelease=function() { ... }


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
garrrold
сообщение 12.03.2012 - 14:45
Сообщение #7


Новичок
*

Группа: Новичок
Сообщений: 4
Регистрация: 9.03.2012
Пользователь №: 10920



сделал вот так on(release){s.text = Number(n.text)+ Number(m.text);}
работает.
будем ковыряться дальше, всем спасибо

Сообщение отредактировал garrrold - 12.03.2012 - 14:45
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 13.03.2012 - 00:58
Сообщение #8


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4739
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



garrrold

Всегда пожалуйста.

Цитата
почему при вводе данных в текстовое поле Number отказывается переводить их в число?

Как я уже объяснил ранее, не Number отказывается переводить, а данные прочитаны некорректно. Когда исходные данные "пустые" (потому что некорректно прочитаны и в переменных n и m "пусто"), то и сумма будет "NaN". Соответственно правильно их прочитав, можно будет их конвертировать в числовые значения и получить сумму (что ты наконец-то сделал и всё заработало).

Правильный подход к считыванию значений текстовых полей - это считывание через обращение к свойству text именованного текстового поля (name.text), а не "старым методом" через задание имени переменной в свойствах поля. Этот метод применялся активно во времена Флеш 4 и в некоторых случаях работает вполне легко (с использованной тобою простой записью), но в более сложных случаях, которые встречаются чаще, так не работает (т.е. к текстовым полям и переменным уже сложнее обратиться, из-за области видимости). Начиная с Флеш 5 активно используется новый метод, так сказать ООПшный, через name.text, подобно другим ООП ЯП, и именно он и рекомендован к использованию (во всех версиях ActionScript).

Тебе явно попался устаревший пример кода или руководство с описанием такого метода. И я тебя и подводил к тому, чтобы ты взял и почитал хепл/документацию/руководство и правильно записал код чтения данных с текстовых полей, но chingachgoog решил не церемониться и сразу выдал правильную запись кода wink.gif. И он совершенно верно заметил, как это мы на форуме практикуем, чтобы ты обработчик нажатия использовал "в кадр", а не "на кнопку", который также давно считается устаревшим (так что эту часть кода ты также можешь улучшить).


--------------------
Best wishes & regards,
MustLive
Администратор сайта
http://mlfun.org.ua
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
webs-
сообщение 25.03.2012 - 01:16
Сообщение #9


Новичок
*

Группа: Новичок
Сообщений: 3
Регистрация: 14.03.2012
Пользователь №: 10932



Сталкивался с подобной проблемой, только не из текстовых полей, а с данными полученными с сервера, от скрипта рнр. Особенно проблемно с десятичными дробями, выкручивался разделяя строку по запятой в дроби и загоняя данные в массив, а потом уже из массива конвертировал строку в номер. Просто сменить тип переменной загнав ее в var newNum:Number = new Number(myVar) - никак. В учебнике написано что этот способ правильный, НО с данными полученными с сервера это не работает, может потому что там запятая стоит в десятичной дроби а во флешке точка sad.gif х.з. может нужно тоже к какому то свойству обращаться?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 13.07.2012 - 00:13
Сообщение #10


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4739
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



webs-

Проблем с данными полученными из сервера в идеале быть не должно smile.gif. И если у тебя они возникают, нужно разбираться и решать эту проблему.

Я с дробными данными с сервера не работал, только с другими типами данных и с ними проблем не было. Но, к примеру, насчёт знака дроби, то это может сказаться, если в разных языках используется различный символ разделителя. Поэтому если тебе данные с сервера приходят с запятой, а в AS (как и в большинстве языков программирования) используется точка, то тут есть два варианта. Или с сервера возвращай дробные числа с точкой, или замени в "строке данных с сервера" запятую на точку, и тогда, сконвертировав строку в число, ты получишь правильный результат.


--------------------
Best wishes & regards,
MustLive
Администратор сайта
http://mlfun.org.ua
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 19.01.2013 - 01:08