Форум 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)
-   -   помогите сделать простейшее вычисление (http://www.flasher.ru/forum/showthread.php?t=156796)

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;
}

уже неделю не могу вывести в динамическое поле результат простейшего вычисления... все хелпы наизусть знаю... Что я не так делаю? Подскажите, пожалуйста, а то уже мозг взрывается...

udaaff 27.05.2011 01:40

Код AS1/AS2:

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 сложить во флэшке?

mooncar 27.05.2011 18:36

Код AS1/AS2:

trace(2 + 2);

Если вы "обозвали" поле "x", то нужно получить строку, в нем содержащуюся:
Код AS1/AS2:

x.text

У поля кроме этого свойства (text) есть еще целая куча.
Кроме того, надеюсь, что вы понимаете, что для именования поля нужно вводить желаемое инстанс-имя в соотв. поле его свойств.

А потом преобразовать строку в число, чтобы его можно было было использовать в математических вычислениях.
Код AS1/AS2:

parseInt(x.text);

Ну и все вместе, и вывод результата:
Код AS1/AS2:

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>


mooncar 28.05.2011 14:17

1. Уберите вообще кнопку на проекте и не пишите на ней ничего, она и не нужна.
2. Почему не работает, скорее всего, судя по вашей последней трассировке.
Похоже вы не задали имена полям. Вы задали переменные в поле var, связанные с полем.
Удалите там x и y в полях и не используйте это поле никогда.
Нужно задать имя поля на сцене, найдите в свойствах поля строку Instance Name, и введите там ваши x и y. Это и будут имена полей.

И да,
Код AS1/AS2:

y.text = parseInt(x.text) + b;

- это не "второй скрипт", это составная часть целого:
Код AS1/AS2:

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 - то после запятой все отсекается... а после точки норма...
Всем огромное спасибо за помощь и тычки в нужном направлении.


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

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