PDA

Просмотр полной версии : ошибка вывод текста из xml


Robertson
28.01.2008, 09:46
Привет всем! Очень срочно нужна помощь, проблема вот в чем:

вот код:

var my_xml:XML = new XML();
System.useCodepage = true;
my_xml.ignoreWhite = true;
cur=0; firs=true;
my_xml.onLoad = function(success:Boolean) {
setInterval(ani, 2300); // 2 seconds
ani();
}
my_xml.load("text.xml");

function ani() {
textik=my_xml.childNodes[cur].attributes.tex;

cur+=1;
if (cur>=my_xml.childNodes.length)
cur=0;
}

А вот, что получается:

www.conf.su/flash/sms.html

т.е. через пару прокруток сбивается интервал между строками... что делать?

Заранее благодарен!

iNils
28.01.2008, 10:01
У вас многокдровый таймлайн. И каждый раз проходят через первый кадр, вы загружаете xml заново и по событию onLoad запускаете еще один setInterval. Они у вас накапливаются и работают все, но в разное время. Соответственно функцию ani вызвается многократно.

etc
28.01.2008, 10:26
И уберите useCodepage из кода. Кто вас научил этой гадости?

CorC
28.01.2008, 10:31
И уберите useCodepage из кода. Кто вас научил этой гадости?
Между прочим, во многих учебниках флеш авторы видимо совсем не знают про сужествование других ОС кроме Винды, и просто насильно заставляют учеников писать эту фразу почти везде. А нынешнее поколение "флешеров" не учится по классике, а по новым авторам :)

etc
28.01.2008, 10:41
Между прочим, во многих учебниках флеш авторы видимо совсем не знают про сужествование других ОС кроме Винды, и просто насильно заставляют учеников писать эту фразу почти везде. А нынешнее поколение "флешеров" не учится по классике, а по новым авторам :)
Я бы сказал не только кроме винды, но и вообще считают, что в мире существует только винда с включенной поддержкой кириллицы, выставленной по умолчанию.
Потом миллион вопросов возникает.

Robertson
28.01.2008, 11:55
А можете код поправить, а то я в панике...

iNils
28.01.2008, 12:12
if (!flag) {
flag = true;
var my_xml:XML = new XML ();
System.useCodepage = true;
my_xml.ignoreWhite = true;
cur = 0;
firs = true;
my_xml.onLoad = function (success:Boolean) {
setInterval(ani, 2300);
// 2 seconds
ani ();
};
my_xml.load ("text.xml");
function ani () {
textik = my_xml.childNodes[cur].attributes.tex;
cur += 1;
if (cur >= my_xml.childNodes.length) {
cur = 0;
}
}
}

Robertson
28.01.2008, 12:15
iNils

Спасибо, но почему-то не пашет... текст не отображается вообще

iNils
28.01.2008, 12:30
import mx.utils.Delegate;
if (!flag) {
flag = true;
var my_xml:XML = new XML ();
System.useCodepage = true;
my_xml.ignoreWhite = true;
cur = 0;
firs = true;
this.onLoadXML = function (success:Boolean) {
setInterval(ani, 2300);
// 2 seconds
ani ();
};
my_xml.load ("text.xml");
this.ani = function () {
textik = my_xml.childNodes[cur].attributes.tex;
cur += 1;
if (cur >= my_xml.childNodes.length) {
cur = 0;
}
};
my_xml.onLoad = Delegate.create (this, onLoadXML);
my_xml.load ("text.xml");
}
так вроде должно работать.

Robertson
28.01.2008, 13:03
iNils спасибо огромное! НО :)

когда делаю motion, чтоб поднялась снизу-вверх строка - все ок! Но когда делаю еще несколько кадров статичными (либо даже с тем же motion) чтоб строка покарсовалась на экране - все опять сбивается...

iNils
28.01.2008, 13:19
Я не понял, что вы сделали

Robertson
28.01.2008, 14:52
все сделал, все получилось! Спасибо еще раз!

Но назрел еще вопрос: никак не удается время расчитать так, чтобы строка менялась именно тогда, когда её нет на экране! Пробовал много вариантов и с кол-вом fps и с кол-вом кадров - все равно рано или поздно строки меняются прямо на экране...

можно этого избежать как-нибудь?

Robertson
30.01.2008, 16:00
помогите, плиз...
что делать никак не пойму... :(

wvxvw
30.01.2008, 16:20
А ХМЛ все время разный, или можно 1 раз загрузить и забыть?

Robertson
30.01.2008, 22:43
wvxvw можно один раз загрузить и забыть... но при обновлении страницы (и флэхи соответственно) подгружается новый!

wvxvw
31.01.2008, 02:45
import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;
//
var _xml:XML = new XML();
var _txt:TextField = this.createTextField('_txt',this.getNextHighestDepth(),50,0,200,20);
var _tf:TextFormat = new TextFormat();
_tf.font = '_sans';
_tf.bold = true;
var _counter:Number = 0;
var _tw:Tween = new Tween(_txt,'_y',Bounce.easeOut,50,0,1,true);
_tw.addListener(this);
_tw.stop();
_xml.ignoreWhite = true;
_xml.onLoad = Delegate.create(this,playAnimation);
function playAnimation(b:Boolean):Void {
if(b){
onMotionFinished();
} else {
trace('failied to load XML');
}
}
function onMotionFinished():Void {
if(_counter>=_xml.childNodes[0].childNodes.length)_counter=0;
_txt.text = _xml.childNodes[0].childNodes[_counter].attributes.adv_text;
_counter++;
_txt.setTextFormat(_tf);
_tw.start();
}
_xml.load('text.xml');
text.xml
<?xml version="1.0" ?>
<data>
<dataNode adv_text="TEXT #0"/>
<dataNode adv_text="TEXT #1"/>
<dataNode adv_text="TEXT #2"/>
<dataNode adv_text="TEXT #3"/>
<dataNode adv_text="TEXT #4"/>
<dataNode adv_text="TEXT #5"/>
<dataNode adv_text="TEXT #6"/>
<dataNode adv_text="TEXT #7"/>
<dataNode adv_text="TEXT #8"/>
<dataNode adv_text="TEXT #9"/>
</data>

Robertson
31.01.2008, 12:29
о! супер! :)
2 вопроса в догонку:

1) почему русский не поддерживается :)
2) как заставить надпись оставаться на экране, к примеру, секунду...

wvxvw
31.01.2008, 12:52
Русский поддерживается. Используйте кодировку UTF-8 для XML'я.
setTimeout(_tw, 'start', 1000);
//_tw.start();

Robertson
31.01.2008, 13:12
Использовал, не помогает :(

а setTimeout дает странный эффект! сообщение появляется 2 раза!

wvxvw
31.01.2008, 14:50
Использовал, не помогает
Явно что-то не так сделали. Так не бывает.
а setTimeout дает странный эффект! сообщение появляется 2 раза!
А вы точно закоментировали/убрали первый вызов _tw.start? Попробуйте понять, что написано в коде, тогда и таких ошибок не будет...

Robertson
31.01.2008, 15:04
Явно что-то не так сделали. Так не бывает.

<?xml version="1.0" encoding="UTF-8"?>
<data>
<dataNode adv_text="Сообщение 1!"/>
</data>

А вы точно закоментировали/убрали первый вызов _tw.start? Попробуйте понять, что написано в коде, тогда и таких ошибок не будет...

...

_txt.setTextFormat(_tf);
setTimeout(_tw, 'start', 1000);
//_tw.start();
}
_xml.load('text.xml');

...

Все равно странно получается! вылазит строка, после она меняется на другую (находясь как раз на экране в течение секунды) и вылазит потом другая! :) Т.е. на экране она находится, но меняется на другую с тем же интервалом, что и до замены кода...

wvxvw
31.01.2008, 15:12
<?xml ?>
Этот тег не изменяет текст внутри ХМЛя, если он до этого был в другой кодировке, то он в ней и останется.

Robertson
31.01.2008, 22:40
ну ок, с этим разбирусь... а что делать с таймаутом-то? :(

Robertson
01.02.2008, 18:58
wvxvw, последний, последний вопрос! :)

Robertson
26.02.2008, 08:52
Блин...

До сих пор не понимаю, как это реализовать :)

etc
26.02.2008, 10:07
Robertson получает плюс за поднятие темы бессмысленными постами.