![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2006
Сообщений: 10
|
Доброго времени суток!
Я вообще php - разработчик, но вот возникла у меня необходимость написать некоторую преблуду на флэше. Никак не могу разобраться с типами переменных. Т.е. почему то переменные объявленные в начале скрипта как :Number при операции сложения складываются как строковые о_О (строк дополняется второй). Собственно вопрос: это косяк языка или я что то не правильно делаю? var main_url = "http://static.my_site.ru/"; var u_name:String = _level0.user_name; var u_level:Number = int(_level0.user_level); var u_clan:String = _level0.user_clan; var hp:Number = int(_level0.hp); var max_hp:Number = int(_level0.max_hp); var mana:Number = int(_level0.mana); var max_mana:Number = int(_level0.max_mana); var hp_speed:Number = _level0.hp_speed_up; var mana_speed:Number = _level0.mana_speed_up; var in_action:Boolean = _level0.in_action; texta.text = u_name; function set_stats(){ user_hp.text = int(hp) + " / " + int(max_hp); user_mana.text = int(mana) + " / " + int(max_mana); textl.text = "[" + u_level + "]"; _root.hp_bar._width = int(hp / max_hp * 135); _root.mana_bar._width = int(mana / max_mana * 112); } function recieveFromJS(t) { if(t.hp != "") hp = int(t.hp); if(t.max_hp != "") max_hp = int(t.max_hp); if(t.mana != "") mana = int(t.mana); if(t.max_mana != "") max_mana = int(t.max_mana); if(t.user_level != "") u_level = int(t.user_level); if(t.in_action != "") in_action = t.in_action; } function stats_up(){ if(!in_cation){ if(hp < max_hp) hp = Number(hp) + Number(hp_speed); if(mana < max_mana) mana = Number(mana) + Number(mana_speed); } set_stats(); } setInterval(stats_up, 1000); _root.user_home_button.onRelease = function() { flash.external.ExternalInterface.call("set_turn", "user_home"); }; flash.external.ExternalInterface.addCallback("set_vars",null,recieveFromJS); на данный момент я вродебы победил большую часть глюков указывая тип данных при КАЖДОЙ!!! операции. остался одн косяк с кторым бьюсь второй день. это переменная in_action. вот не могу заставить ее работать, а в чем косяк не пойму. Последний раз редактировалось NaFigator; 20.12.2010 в 22:18. |
|
|||||
|
Нууу... скажем так. Флэшу сугубо ортогонально на типы данных. Он все это преобразует туда сюда как угодно совершенно не вдаваясь практически ни во что.
Поэтому все что приходит из рнр - изначально считайте ТЕКСТОМ. Куда бы вы это не присваивали. Скажу по секрету - флэш хавает даже деление на ноль, без каких-либо зависаний и выдачи ошибок. Ибо хитрые макромедийщики ввели в него константу - infinity ![]() Чтобы четко получать именно числовое значение переменной, пишите int - это из флэш-5. Очень deprecated. |
|
|||||
|
Модрон-ветеринар
|
parseInt или parseFloat еще.
__________________
Идите первым! |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
NaFigator, а в каком виде у вас Boolean передается? "true"/"false", "1"/"0", "yes"/"no"? Почитайте в хелпе про правила преобразования строки в Boolean.
Цитата:
Последний раз редактировалось udaaff; 21.12.2010 в 02:57. |
|
|||||
|
Регистрация: Feb 2006
Сообщений: 10
|
так всетаки как правильнее?
или Достаточно ли вызывать данные функции только при получении данных или всеравно нужно будет их использовать в теле скрипта при каждой математической операции? Цитата:
var flashvars_top_user = {user_name: "NaFigator",user_level: "12",hp_speed_up: "0.36",mana_speed_up: "0.266",in_action: "1",hp: "1350",max_hp: "1350",mana: "770",max_mana: "770",user_clan: "myst"};
var params_top_user = {menu: "false",quality: "high",bgcolor: "#000000",wmode: "opaque",allowscriptaccess: "always"};
var attributes_top_user = {};
swfobject.embedSWF("http://my_site.ru/flash/top_user3.swf", "top_user", "450", "70", "9.0.0", false, flashvars_top_user, params_top_user, attributes_top_user);
Так разве не достаточно при объявлении переменной объявить ей числовой тип? к примеру Или при этом всеравно данные будут считаться строкой? о_О Как то я честно говоря в легком шоке от ситуации с ActionScript... Последний раз редактировалось NaFigator; 21.12.2010 в 07:50. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Цитата:
Цитата:
На счет этого: Цитата:
parseInt() - в целое. Округлит число по правилам математики и выдаст целое Я исползую такие конструкции |
|
|||||
|
Цитата:
![]() Добавлено через 7 минут Цитата:
Скрипты, флэшварсы и т.п. После того как данные получены, преобразованы и вставлены во внутренние переменные вашей флэшки - работаете уже с тем типом, который вы задали при обработке. Как правильнее - да собственно и так и этак. В любом случае имеет смысл почитать мануал. Ключевые слова озвучены, а далее - все в ваших руках ![]() |
|
|||||
|
Регистрация: Feb 2006
Сообщений: 10
|
Всем большое спасибо, проблемы решил, все работает =)
|
|
|||||
|
Ха... это было только начало
)) |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|