ただ見上げるより この手を伸ばしてみたくなるだけ (ポコアポコ/カヒーナムジカ)
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

 出張から帰って来ました。予定より随分早く。
 東京は暑い!

 さて。
 突如、制作途中のヴィジュアルリプレイ、詰まっていた部分の解決方法に思い至り、帰りの新幹線でちょっと手直ししてみました。
 その過程で、XMLクラスのattributesの意味を初めて理解しました。
 以前からあまりに意味不明だったので、理解してちょっと感激しました(笑)。
 あ、AS2.0の話ですのでご注意を。

 簡単に言うと、「配列」と「結合配列」は違うものだ、と言う点に尽きるのですが。
 attributesは「結合配列」を返すもので、「配列」を返すものではなかったのですね。
 これを混同していたため、XMLの属性をattributesすると、普通の配列を吐き出すものだとばっかり思っていました。
 「あれ? なんでArrayにコピーできないんだ?」とか「なんでエレメントにアクセスしようとするとundefinedなんだ?」とか。
 手元の参考書が、XMLクラスについてあまり解説していないのも、原因の一つですが(苦笑)。
 良く分からないヘルプと睨めっこしながら弄繰り回していましたが、参考書探した方が早かったですね。
 
 
 ヴィジュアルリプレイでスクリプターがいつも頭を悩ませるのは、「ページが順番に再生されるとは限らない」ことです。
 例えば、3ページ目でダイスアニメがあって、6ページ目まで表示されて、7ページ目に消えるとします。
 普通に作ると、ダイスアニメの関数を3ページ目に実行して、7ページ目に消す関数を実行するように作ってしまうのですが。(Flashはタイムラインがあるせいで、余計そうなりがち?)
 これを5ページ目でセーブして、5ページ目から再開するとどうなるのか。
 5ページ目にはダイスアニメに関係する命令は何も書かれていないので、何も表示されないんですね。
 でもXMLに、ページごとにダイスアニメの命令を書くのは大変な訳です。
 ダイスアニメが一つだけならいいですけど、戦闘中なんか、確率図アニメ4つにダイスアニメ3つとか平気で同時表示されてますからね。それが10ページ表示されっぱなしなんてザラな訳で。コピペとは言え、70個もタグ書くんですよ。
 その上で、後から間違いがあったことに気がついて、修正する必要があったら?
 …どうでしょう、うんざりしませんか?

 なので、XMLには開始点と終了点を書くのみに留めて、その間、必要な情報をセーブデーターに書き込むようにしたい訳です。ロードした時に、セーブされた情報を元に再現する訳ですね。
 その情報をどう受け渡して、保存して再現するか。ってところで、attributesに躓いていた訳です。

 XMLの属性に必要な情報が全て入っていれば良かったのですが、

 <dice type="dice">

 とかやるのはメンドクサイじゃあないですか。
 でも、今の例でtype属性をなくした上で、属性をattributesしただけだと、ノードの名前(この場合、dice)が入らないのですね。
 それで「配列を返すなら、ノード名をその配列に追加すれば簡単じゃないか」って罠だった訳です。

 ノード名以外にも必要な情報が色々とあったので、結局、ノードそのままの形で値をやりとり(セーブ含む)し、必要とする時にattributesすることにしました。

 …今思い出しましたけど、もともとArrayで書いていたスクリプトを、途中からXML対応に改造することになったので、「attributesで配列が返るなら、改造が最小限で済むからいいね」とか考えたような気もします。
 全部XMLに直すとなると、それは割と手間で…まあ、もう直しちゃったからどうでもいいんですけどね(笑)。
 




追記を閉じる▲
 
 ヴィジュアルリプレイでスクリプターがいつも頭を悩ませるのは、「ページが順番に再生されるとは限らない」ことです。
 例えば、3ページ目でダイスアニメがあって、6ページ目まで表示されて、7ページ目に消えるとします。
 普通に作ると、ダイスアニメの関数を3ページ目に実行して、7ページ目に消す関数を実行するように作ってしまうのですが。(Flashはタイムラインがあるせいで、余計そうなりがち?)
 これを5ページ目でセーブして、5ページ目から再開するとどうなるのか。
 5ページ目にはダイスアニメに関係する命令は何も書かれていないので、何も表示されないんですね。
 でもXMLに、ページごとにダイスアニメの命令を書くのは大変な訳です。
 ダイスアニメが一つだけならいいですけど、戦闘中なんか、確率図アニメ4つにダイスアニメ3つとか平気で同時表示されてますからね。それが10ページ表示されっぱなしなんてザラな訳で。コピペとは言え、70個もタグ書くんですよ。
 その上で、後から間違いがあったことに気がついて、修正する必要があったら?
 …どうでしょう、うんざりしませんか?

 なので、XMLには開始点と終了点を書くのみに留めて、その間、必要な情報をセーブデーターに書き込むようにしたい訳です。ロードした時に、セーブされた情報を元に再現する訳ですね。
 その情報をどう受け渡して、保存して再現するか。ってところで、attributesに躓いていた訳です。

 XMLの属性に必要な情報が全て入っていれば良かったのですが、

 <dice type="dice">

 とかやるのはメンドクサイじゃあないですか。
 でも、今の例でtype属性をなくした上で、属性をattributesしただけだと、ノードの名前(この場合、dice)が入らないのですね。
 それで「配列を返すなら、ノード名をその配列に追加すれば簡単じゃないか」って罠だった訳です。

 ノード名以外にも必要な情報が色々とあったので、結局、ノードそのままの形で値をやりとり(セーブ含む)し、必要とする時にattributesすることにしました。

 …今思い出しましたけど、もともとArrayで書いていたスクリプトを、途中からXML対応に改造することになったので、「attributesで配列が返るなら、改造が最小限で済むからいいね」とか考えたような気もします。
 全部XMLに直すとなると、それは割と手間で…まあ、もう直しちゃったからどうでもいいんですけどね(笑)。
 



【2010/07/09 00:34】 | ワイヤードアーム
トラックバック(0) |
コメント
この記事へのコメント
コメントを投稿
URL:

Pass:
秘密: 管理者にだけ表示を許可
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。