Просмотр полной версии : помогите сделать простейшее вычисление
Scorpio29
26.05.2011, 23:59
дело в том, что вообще не получается сложить 2 числа. Поясню. Делаю поле ввода и обзываю его x, затем делаю поле вывода и называю его y, далее делаю кнопку и на ней делаю скрипт:
on (keyPress "<Enter>") {
a=Number(x);
b=Number(30);
y=a+b;
}
в итоге выводит NaN
пробовал и так
on (release, keyPress "<Enter>") {
var b = 30;
var y = Number(x) + b;
}
уже неделю не могу вывести в динамическое поле результат простейшего вычисления... все хелпы наизусть знаю... Что я не так делаю? Подскажите, пожалуйста, а то уже мозг взрывается...
var b:Number = 30;
Key.addListener(this);
function onKeyDown():Void
{
if (Key.isDown(Key.ENTER))
tf2.text = parseInt(tf1.text) + b;
}
Scorpio29
27.05.2011, 18:27
что-то вообще не понял где что... не ужели просто нельзя 2+2 сложить во флэшке?
trace(2 + 2);
Если вы "обозвали" поле "x", то нужно получить строку, в нем содержащуюся:
x.text
У поля кроме этого свойства (text) есть еще целая куча.
Кроме того, надеюсь, что вы понимаете, что для именования поля нужно вводить желаемое инстанс-имя в соотв. поле его свойств.
А потом преобразовать строку в число, чтобы его можно было было использовать в математических вычислениях.
parseInt(x.text);
Ну и все вместе, и вывод результата:
y.text = parseInt(x.text) + b;
Код записываете в кадре, а не на кнопке.
К чему кнопка, если у вас желаемое действие должно производиться по нажатию на ENTER?
PS. На объектах код писать вообще не надо под страхом иметь кучу проблем и вообще отстать от жизни.
Scorpio29
28.05.2011, 12:16
огромное спасибо за пояснения!!! до сих пор не могу найти нормальную книгу по описанию AS, так что я уже отстал от жизни ))))
И все равно не работает... и первый скрипт и второй. Первый скрипт (y=поле вывода, x=поле ввода)
var b:Number = 30;
Key.addListener(this);
function onKeyDown():Void
{
if (Key.isDown(Key.ENTER))
y.text = parseInt(y.text) + b;
}
прописываю в кадре в итоге ничего не выводится. раньше хоть NaN писалось ))
второй же скрипт y.text = parseInt(x.text) + b; уж извините, но не очень силен в AS и не знаю как прописать его в кадре правильно. Пришлось вешать на кнопку. Результат тот же - ничего не отображается в поле Y
ps сделал трассеровку типа переменных x и y и трассеровку значений
trace(typeof(x));
trace(typeof(y));
trace(x);
trace(y);
и вот это показывает в окне трассеровки:
string
string
<TEXTFORMAT INDENT="0" LEADING="2"><P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="18" COLOR="#000000" LETTERSPACING="0" KERNING="0">3</FONT></P></TEXTFORMAT>
<p align="left"></p>
1. Уберите вообще кнопку на проекте и не пишите на ней ничего, она и не нужна.
2. Почему не работает, скорее всего, судя по вашей последней трассировке.
Похоже вы не задали имена полям. Вы задали переменные в поле var, связанные с полем.
Удалите там x и y в полях и не используйте это поле никогда.
Нужно задать имя поля на сцене, найдите в свойствах поля строку Instance Name, и введите там ваши x и y. Это и будут имена полей.
И да, y.text = parseInt(x.text) + b; - это не "второй скрипт", это составная часть целого:
var b:Number = 30;
Key.addListener(this);
function onKeyDown():Void
{
if (Key.isDown(Key.ENTER))
y.text = parseInt(x.text) + b;
}
Просто udaaff использовал другие имена в своем примере, то что у вас x и y, у него tf1 и tf2.
Назовите поля так же, использовать x и y не хорошо.
Scorpio29
28.05.2011, 16:46
mooncar, еще раз большое спасибо за терпение... бьюсь головой об стенку просто... я действительно поставил название поля в var вместо instance, давно за флэхой не сидел. УРА УРА - все получилось. Но к почему-то только 1 раз могу ввести значение. А по задумке нужно вводить в это поле разные числа и видеть результат сразу. Формула будет сложнее.. просто хотелось разобраться с выводом результата. Но я уже понял откуда ошибка идет, поэтому последняя просьба, не подскажите какую-нибудь обучалку AS?
В итоге все-таки реализовал кнопку. Задача была такая, что бы пользователь введя свою цифру получил результат по формуле число_пользователя*31 + 25%
на кнопку повесил скрипт
on (release, keyPress "<Enter>") {
a=31;
b=0.25;
c = parseFloat(x.text)*a;
d = parseFloat(x.text)*a*b;
y.text = c+d;
}
использовал float, так как предыдущий вариант с parseInt отсекал только целое число
В этом случае можно считать в одном остановленном кадре разные пользовательские числа
Я понимаю что кривовато реализовано, но работает!!!
Единственный косяк - если пишется значение с запятой, а не с точкой - 2,99 - то после запятой все отсекается... а после точки норма...
Всем огромное спасибо за помощь и тычки в нужном направлении.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.