PDA

Просмотр полной версии : Цифры в LoadVars. Как правильно загрузить?


gfdrf
28.02.2009, 23:09
Всем доброго времени суток.
Снова, традиционно ламерский вопрос:
Есть задача, сделать смену картинок в ролике в зависимости от времени суток (день/ночь)
Желательно чтоб юзер сам задавал часы смены картинок.

Есть текстовый файл vars.txt следующего содержания:
dayhour=8&nighthour=20

Далее загружаем его, по окончаню загрузки создаем две переменные dh и nh
var lv:LoadVars = new LoadVars();
lv.load("vars.txt");

lv.onLoad = function() {
dh=lv.dayhour
nh=lv.nighthour
};

Трейс выдает значения переменных как 8 и 20. Всё ОК
Далее пытаемся сравнивать с ними текущее время, и по результату сравнения задавать картинку для функции собственно загрузки картинки, её ресайза...

Собственно вопрос: Почему в таком вот варианте, цифра 20 опознается как 0?
myhour = new Date();
newhours = myhour.getHours();
if(newhours>=dh&&newhours<=nh){;
newpicture="day.jpg";
}else{;
newpicture="night.jpg";
};

Соответственно если написать так:
myhour = new Date();
newhours = myhour.getHours();
if(newhours>=8&&newhours<=20){;
newpicture="day.jpg";
}else{;
newpicture="night.jpg";
};
то всё работает как часы?
Я снова не понимаю какую то малость :(
В хелпе все примеры со строковыми переменными, поиск по форуму тоже выдает как правило вопросы или про URL в качестве параметров в тексте, или снова строки.
Что не так с цифрами то?

DarkLight
28.02.2009, 23:37
parseInt/parseFloat преобразуют строку в число:
например так:
nh=parseInt(lv.nighthour,10);

gfdrf
01.03.2009, 00:02
Спасибо, попробовал.

НО не помогло. Ночь начинается не после 20 а после 0 по прежнему :(

Kuruki
01.03.2009, 00:43
А почему вы решили, что после нуля? И выложите исходник посмотреть

gfdrf
01.03.2009, 11:17
Прошу прощения, ступил вчера ночью...

С применением parseInt действительно всё работает правильно.
НО, все равно интересно:

Почему без parseInt, при сравнении, цифра 8 тем не менее, отрабатывается правильно, а цифра 20 упорно не хочет...

Исходник решил таки выложить, может кто то ещё заинтересуется.
Kuruki
как я решил что ночь начинается именно с 00-00, так очень просто, запускаю флэшку и перевожу системные часы. В 21-00 ещё не ночь (хотя уже должна бы), в 22 и в 23 тоже... а вот в 00, переключается.

И второй вопрос:
Можно ли файл с переменными сделать по типу ini файла, чтоб каждая переменная начиналась со своей строки.
Насколько я знаю, при загрузке из текстового файла, в нем не допускаются пробелы и переносы строки между переменными...
Что ещё (я имею ввиду именно формат файла) можно использовать для хранения переменных снаружи, чтоб он был поудобнее для пользователей.

Kuruki
01.03.2009, 15:50
На момент вызова
if(newhours>=dh&&newhours<=nh){
переменные dh и nh равны значению undefined, которое преобразуется в нуль при сравнении. Почему undefined? Потому что событие onLoad объекта LoadVars еще не наступило на момент вызова. А когда вы положили все это на onEnterFrame первые несколько раз было undefined, а потом файл с переменными загружался и значения брались уже от туда...

Что ещё (я имею ввиду именно формат файла) можно использовать для хранения...
.xml

gfdrf
02.03.2009, 01:09
Kuruki
поспорю насчет undefined. Я всё понимаю про то что файл грузится не мгновенно. НО!
Я запускаю флэшку, и через минуту (ну он уж точно загрузился) я начинаю играть временем в системе. И происходит то, о что я спотыкался. Ночь наступает только в 0 часов.
Кстати я сделал переменные на разных строках. Всё работает.
Важно лишь чтоб было так:
variable1=
&variable2=
&variable3=

Kuruki
02.03.2009, 01:42
Да, действительно после нуля...
Возможно без parseInt не dh преобразовывается в число, а newhours в строку и получается белиберда...

gfdrf
02.03.2009, 12:23
Вобщем то я тоже так понял что он либо интерпретирует так, как ему заблагорассудится, либо в числе 20, он воспринимает только последнюю цифру.
Надо попробовать написать 21, не станет ли он воспринимать её как 1.