PDA

Просмотр полной версии : O loadvariables в цикле


slavak78
13.10.2009, 13:36
Имеется два текстовый файла txt1.txt и txt2.txt
В первом написано messages="Hello", а во втором messages="GoodBye".

Во флеше:
_root.createEmptyMovieClip("loadTarget_mc", this.getNextHighestDepth());

_root.loadTarget_mc.onData = function() {
trace(this.messages);
};

for (var i:Number = 0; i < 2; i++) {
loadVariables("tyt"+i+".txt", _root.loadTarget_mc);
}

Так вот, trace возвращает только messages из последнего файла, т.е. "GoodBye". Как вернуть оба значения?
Предложения типа все записать в один текстовый файл и объявить разные переменные не подходят.

iNils
13.10.2009, 13:39
Для оформления своего кода надо использовать теги (http://www.flasher.ru/forum/showthread.php?t=122539)

mooncar
13.10.2009, 13:49
Так первое значение messages затирается другим.
PS: loadVariables устарело, используйте LoadVars, этот класс лучше работает.

slavak78
13.10.2009, 14:03
Так первое значение messages затирается другим.
PS: loadVariables устарело, используйте LoadVars, этот класс лучше работает.

А можно пример кода, пожалуйста, чтобы он два значения возвращал.

mooncar
13.10.2009, 14:08
Используйте массив.
Массивы используются для хранения набора однотипных по логике алгоритма значений.
Сделайте так:
_root.createEmptyMovieClip('loadTarget_mc', _root.getNextHighestDepth());
_root.loadTarget_mc.messages = new Array();

function loadVar (count:Number) {
var load_lv:LoadVars = new LoadVars();
load_lv.onLoad = function(success:Boolean) {
if (success) {
_root.loadTarget_mc.messages[count] = this.messages;
} else {
trace('error');
}
};
load_lv.load('tyt' + count + '.txt');
}

for (var i:Number = 1; i <= 2; i++) {
loadVar(i);
}

На выходе имеем массив: messages[1], messages[2] с вашими текстами (кавычки уберите в текстовых файлах, они не нужны).

Можно без массива, тогда просто именуем переменные по номеру:
_root.createEmptyMovieClip('loadTarget_mc', _root.getNextHighestDepth());

function loadVar (count:Number) {
var load_lv:LoadVars = new LoadVars();
load_lv.onLoad = function(success:Boolean) {
if (success) {
_root.loadTarget_mc['message' + count] = this.messages;
} else {
trace('error');
}
};
load_lv.load('tyt' + count + '.txt');
}

for (var i:Number = 1; i <= 2; i++) {
loadVar(i);
}
тут на выходе имеем message1, message2 внутри loadTarget_mc

И, кстати, если уж вы используете _root, а не this, до и в getNextHighestDepth нужно узнавать наивысшую свободную глубину на _root.
Если у вас все происходит там же, где и мувик ваш создается, выкиньте _root и замените на this:

this.createEmptyMovieClip('loadTarget_mc', this.getNextHighestDepth());
loadTarget_mc.messages = new Array();

function loadVar (count:Number) {
var load_lv:LoadVars = new LoadVars();
load_lv.onLoad = function(success:Boolean) {
if (success) {
loadTarget_mc.messages[count] = this.messages;
} else {
trace('error');
}
};
load_lv.load('tyt' + count + '.txt');
}

for (var i:Number = 1; i <= 2; i++) {
loadVar(i);
}

Добавлено через 10 минут
else можно убрать, это для отладки только

slavak78
13.10.2009, 14:21
Используйте массив.
Массивы используются для хранения набора однотипных по логике алгоритма значений.
Сделайте так:
_root.createEmptyMovieClip('loadTarget_mc', _root.getNextHighestDepth());
_root.loadTarget_mc.messages = new Array();

function loadVar (count:Number) {
var load_lv:LoadVars = new LoadVars();
load_lv.onLoad = function(success:Boolean) {
if (success) {
_root.loadTarget_mc.messages[count] = this.messages;
} else {
trace('error');
}
};
load_lv.load('tyt' + count + '.txt');
}

for (var i:Number = 1; i <= 2; i++) {
loadVar(i);
}

На выходе имеем массив: messages[1], messages[2] с вашими текстами (кавычки уберите в текстовых файлах, они не нужны).

Можно без массива, тогда просто именуем переменные по номеру:
_root.createEmptyMovieClip('loadTarget_mc', _root.getNextHighestDepth());

function loadVar (count:Number) {
var load_lv:LoadVars = new LoadVars();
load_lv.onLoad = function(success:Boolean) {
if (success) {
_root.loadTarget_mc['message' + count] = this.messages;
} else {
trace('error');
}
};
load_lv.load('tyt' + count + '.txt');
}

for (var i:Number = 1; i <= 2; i++) {
loadVar(i);
}
тут на выходе имеем message1, message2 внутри loadTarget_mc

И, кстати, если уж вы используете _root, а не this, до и в getNextHighestDepth нужно узнавать наивысшую свободную глубину на _root.
Если у вас все происходит там же, где и мувик ваш создается, выкиньте _root и замените на this:

this.createEmptyMovieClip('loadTarget_mc', this.getNextHighestDepth());
loadTarget_mc.messages = new Array();

function loadVar (count:Number) {
var load_lv:LoadVars = new LoadVars();
load_lv.onLoad = function(success:Boolean) {
if (success) {
loadTarget_mc.messages[count] = this.messages;
} else {
trace('error');
}
};
load_lv.load('tyt' + count + '.txt');
}

for (var i:Number = 1; i <= 2; i++) {
loadVar(i);
}

Добавлено через 10 минут
else можно убрать, это для отладки только

Спасибо большое!

mooncar
13.10.2009, 14:23
Пожалуйста. Мегацитирование уберите.