夏が終わったと感じる瞬間って、どんな時?

flashで外部のxmlを読み込んでいるのですが、読み込むまでの間にテキストフィールド(v_title)にundefindがでてしまいます。原因がわかりません(><)どなたかぜひ教えてくださいませ。

myXML = new XML ();
myXML.ignoreWhite = true;
myXML.load ("blog/photodata.xml");

v_titleArray = new Array ();
v_xOffset = myBase._x;

myXML.onLoad = function (loaded) {
if (loaded) {
v_rootNode = myXML.firstChild;
v_num = v_rootNode.childNodes.length;
v_currentPhoto = v_rootNode.firstChild;
v_currentNumber = 0;
for (i=0; i < v_num; i++) {
v_loadURL = v_currentPhoto.childNodes[1].firstChild;
v_titleArray.push (v_currentPhoto.childNodes[0].firstChild);
v_currentPhoto = v_currentPhoto.nextSibling;
f_makeAndLoad (i, v_loadURL);
}
} else {
trace ("error occured");
}
};

function f_makeAndLoad (num, path) {
myBase.myLoad.duplicateMovieClip ("myLoad"+num, num+1);
v_name = eval("myBase.myLoad"+num);
v_name._x = 156 * num;
v_name._y = 0;
v_name.loadMovie (path);
myBase.myLoad._visible = false;
}

myNext.onRelease = function () {
_parent._parent._parent.sound1.start();
if (v_currentNumber < v_num-1) {
v_currentNumber+=1;
}else{
_parent.nextFrame();
}
};

myBase.onEnterFrame = function () {
this._x += ((-156*v_currentNumber + v_xOffset)-this._x) ;
v_title = (unescape(v_titleArray[v_currentNumber]));
};

A 回答 (2件)

恐らく


v_titleArray.push (v_currentPhoto.childNodes[0].firstChild);
でpushを使ってるからだと思います。

pushというのは配列の後ろに値を付加させるものです。
#1で0番目に空白を入れたのでここでpushした値はそれ以降に追加されていきます。
ですので0番目は常に空白となってしまいます。

どうすればいいのかというとpushを使うのをやめて
直接番号をしていして値をいれればいいと思います。

v_titleArray.push (v_currentPhoto.childNodes[0].firstChild);を

v_titleArray[i] = v_currentPhoto.childNodes[0].firstChild;

と書き換えます。

iは0から順番に増えていくので
v_titleArray[0] = 値
v_titleArray[1] = 値
v_titleArray[2] = 値
という感じで値が入っていきます。
    • good
    • 0
この回答へのお礼

perseさん
ありがとうございます!できましたpushのところはxmlを読み込むという本の内容のとおりにしるしていただけなのでまったく盲点でした・・・。

perseさんのおかげでしっかり理解できました。ありがとうございます!

お礼日時:2006/05/03 02:25

undefinedは変数に値が割り当てられていないときにでるものなので値を割り当ててあげればよいと思います。



現在xmlを読み込んだときに
v_titleArrayとv_currentNumberに値を入れています。

当然読み込む前は
v_titleArray[0]=undefined (配列が空だから)
v_currentNumber=undefined (Flashのバージョンによるかも)
です。

しかし、onEnterFrameで(現在の書き方ではxmlの読み込みが終わらなくても実行されています。)
テキストにv_titleArray[v_currentNumber]の値を表示させています。これが原因です。

解決策として
(1)初期値に""を入れておく
(2)xmlが読み込み終わってからonEnterFrameを実行する
です。(2)は説明が長くなるので略です。

(関数の中以外ならどこでもいいのですが)5行目:
v_titleArray = new Array ();
の下あたりにでも書いてください。

//----------------------------------------------
v_currentNumber=0;
v_titleArray[v_currentNumber]="";

この回答への補足

お答えいただいてまことにありがとうございます!
実際に5行目に

v_currentNumber = 0;
v_titleArray[v_currentNumber] = "";

をいれてみたのですが、一番最初のXMLの文がでてこなくなりました。2番目に表示されるやつはしっかりとでているのですが。

perse様のいうとおりです!たしかにonEnterframeで実行しているために読み込みが終わらなくても自動で読み込んでしまうんですよね・・(TT)

補足日時:2006/05/02 02:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!