Просмотр полной версии : Условный оператор "if" - нужна помощь
Имеется код:
----------------
stop();
f_ploshad2_txt.text = _global.f_ploshad;
if (f_ploshad2_txt.text = 300) {
f_ob_txt.text = "10";
f_personal_txt.text = "12";
}
else if (f_ploshad2_txt.text = 420) {
f_ob_txt.text = "15";
f_personal_txt.text = "20";
}
else if (f_ploshad2_txt.text = 600) {
f_ob_txt.text = "20";
f_personal_txt.text = "25";
}
----------------
В таком случае, всегда выполняется только первое условие((( Тоесть f_ploshad2_txt.text меняется (300, 420 или 600), а вот два других поля всегда имеют почемуто значения 10 и 12 (как в первом условии)
Пытался всяко разна переделать, почему то не выходит((
Помогите пожалуйста!
AzagThoth
19.04.2010, 01:26
Боро боро! Используйте в if оператор сравнения, а не оператор равенства(если вдруг не знаете оператор сравнения это ==)
f_ploshad2_txt.text = 300
между прочим это тоже неверно и нетолько из за присвоения
f_ploshad2_txt.text == "300" а вот так верно во всех случаях
Не работает! (
Может дела в предистории?)
У меня есть три кадра. На каждом из них есть текстовое поля со значениями 300, 420 и 600. В зависимости на каком кадре находишься - жмешь кнопку и глобальной переменной присваивается значение соответсвующего поля. Это функция работает. Так как на новом кадре в новом текстовом поле это значение отображается. А вот следующее действие с оператором if не выполняется.( Могу выложить коды предыдущих кадров...
Добавлено через 6 часов 51 минуту
Помогите пожалуйста =)
tsarapkabel
19.04.2010, 16:18
Может проще исходник выложить?
Да, конечно! Залил на депозит!
http://*****************/files/vn9ixx3j9
Проблема на 3 сцене, 7 кадре...
Буду признателен за помощь
tsarapkabel
19.04.2010, 17:56
У вас меняется только кадр. Попробуйте создать пустое текстовое поле и уже потом при помощи переменной задавать его значения 300-420-600.
Да, кадры у меня меняются допустим с 4 по 6. В зависимости с какого кадра ты попадаешь на 7 кадр, такое значение и присваивается ДИНАМИЧЕСКОМУ ТЕКСТУ f_ploshad2_txt. А уже в зависимости от него должен работать оператор их. Просто если я вставлю InputText, то в общую картину совершенно не впишется))) Я думаю, что все-таки есть выход, используя динамический текст или я Вас неправильно понял.
Так же я думал, что в операторе if операндой использовать глобальную переменную, т.к. она задает текст динамическому тексту (сори за товталогию). Т.е. if (_global.ploshad = "...") {...}. Но и этот вариант у меня не выходит.
скорее всего я не в тему, но!
динамическое текстовое поле должно быть одно на все кадры, иначе получить или записать туда что-нибудь нельзя (можно через раз и с глюками)
+попробуйте использовать case вместо if
Пробовал через функцию switch - не выходит. И странно получается, если я свое динамическое поле буду самостоятельно в коде приравнивать необходимым числам (300 420 600), то все выполняется и работает. А как только я подставлю _global.f_ploshad, так не работает или выполняется только первое условие((
Может сам исходник кто-нибудь посмотрит? Который день сижу, ничего не могу понять почему так. Все кажется что вот-вот, а не выходит(
AzagThoth
20.04.2010, 11:53
f_ploshad2_txt.text = 300
между прочим это тоже неверно и нетолько из за присвоения
f_ploshad2_txt.text == "300" а вот так верно во всех случаях
Ну я бы не сказал так. Если сравниваются значения разных типов, то они вначале будут приведены к одному типу, после чего уже и будет осуществляться само сравнение. Ну это например как если делать 5==false или if(5). В общем не обязательно писать "300" можно просто 300 и всё будет хорошо. С другой стороны действительно наверное лучше конкретно задавать тип значения(вопрос быстродействия). А вот сейчас и проверим!
//per - динамическое поле на сцене с заданным текстом 300
var a:Number=0;
time=getTimer()
while(a<200000){
if(per.text==300){
a++;
}
}
trace(getTimer()-time);
a=0;
time=getTimer()
while(a<200000){
if(per.text=="300"){
a++;
}
}
trace(getTimer()-time);
И что же мы видим в Отупут?:
1597
1219
Разница безусловно есть в 1.3 раза медленее работает если сравниваем значения разных типов в случае строка=число.
Добавлено через 5 минут
Maxim Вы можете выложить файл по человечески? С депозита у меня скорость 6-8 кбайт/сек. Что значит по-человечески!? Т.е. приатачить его к вашему сообщению сюда на форум, предварительно заархивировав.
tsarapkabel
20.04.2010, 16:59
Используя trace можно увидеть, что в 4-5-6 кадрах задаётся переменная 300-420-600, а при переходе на 7-й кадр она становится undefined.
Это происходит потому, что то же самое текстовое поле в 7 кадре отсутствует.
Попробуйте не писать 300-420-600 в текстовом поле, а напишите для него отдельную переменную. Только опять же не локальную, а глобальную.
Да все я верно говорю число должно быть числом, а строка строкой. И нечего тут придумыавть велосипед. АФФТАР - Чем правильнее будешь писать свои скрипты, тем меньше будет вопросов в будущем
AzagThoth
20.04.2010, 19:00
В действиях должен быть смысл. Число должно быть числом, а строка строкой - звучит не обосновано ни разу. "Велосипед" не я придумал, а разработчики. Да во множестве языков авто-преобразование значений есть. Но в любом случае побеждает здравый смысл. Если мы можем проверить разные пути и увидеть одинаковы они или различны и какой оптимальней, тот тут и следует делать уже какие-то выводы. Ну собственно для меня вывод уже сделан. По возможности сравнивать значения одних типов, как и советует in4core, однако если для кого то 1.3 не показатель, то почему бы ему и не сравнивать разные типы данных!? В общем все правы == никто не прав :)
Psycho Tiger
20.04.2010, 19:20
f_ploshad2_txt.text = 300
между прочим это тоже неверно и нетолько из за присвоения
f_ploshad2_txt.text == "300" а вот так верно во всех случаях
Что, простите?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.