FlashCS3 AS2.0でxmlからコンテンツを読み込み、自動的にムービークリップを生成する方法

このQ&Aのポイント
  • FlashCS3 AS2.0で作成されたムービークリップの管理方法について質問があります。質問者は、xmlから送られてくるコンテンツの総数を表す<total>タグを読み込み、その数と同じだけのムービークリップを自動的に生成したいと考えています。また、生成されるムービークリップはコンテンツ数に応じてスクロールされるように配置したいとのことです。
  • 質問者は、AS3では同様のスクリプトが見つかるが、AS2では見つからないと述べています。そのため、AS2でxmlからデータを読み込み、自動的にムービークリップを生成するスクリプトを作成する方法を知りたいと考えています。
  • また、質問者はコンテンツ数が1個の場合はスクロールしないようにし、コンテンツ数が複数の場合のみスクロールが表示されるようにしたいと述べています。さらに、コンテンツがステージ上の特定の範囲を超えないようにするためのスクリプトも知りたいとしています。
回答を見る
  • ベストアンサー

xmlに書かれた数だけムービークリップを生成したい。

FlashCS3 AS2.0 FlashPlayerバージョン8で作成しています。 xmlをFlashに読み込む事自体は初めてではないです。 図は背景の黒い部分がHTMLで、Flash内でスクロールをさせたいイメージです。 phpから送られてくるxmlデータにコンテンツの総数が書かれた <total>タグを付け、その<total>内にある数だけMCを作成したいと思っています。 コンテンツの総数は多くても15個ほどです。 分からない事は ・xmlから受けたデータの数だけMCを生成するスクリプト (AS3だと類似したスクリプトが見つかるのですが・・・。) ・生成するにおいて、MCを配置する場所を決めたい。 (どんどん下に追加されていくように配置したい) ・コンテンツ数が1つだった場合、Flash内でスクロールが出ないようにし、コンテンツ数が複数になった場合だけスクロールが出るようにしたい。 (ステージサイズ自体は縦に2000pxくらい長くして、コンテンツがイラストの赤い枠線より大きくならなかった場合スクロールを表示させない) スクリプトでムービークリップを動的に増やさずに、 最初から複数縦に並べておいて、コンテンツ数が1個のときに2個目以降のMCは何も 表示されないようにし、スクロールしないように設定してあげて、 逆にコンテンツ数が2個目以降はスクロールを表示してあげれば簡略化できるのでしょうか・・・。 何卒よろしくお願いいたします。

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • joy_28
  • ベストアンサー率84% (45/53)
回答No.1

movamogaさん、 外部JPGの読み込む数(xmlのtotalに相当)によって、空のMovieClipを生成し、それに、外部JPGを読み込み、2枚半位を表示して、自作のスクローラ(コンポーネントは、あまり、使ったことがないので)、垂直にスクロールするサンプルを作ってみました。 コメントをできるだけ、記載して、おきましたので、サンプルを参照下さい。 尚、数が少なくても、スクローラーを非表示にはしてませんが、ロジックが分かれば、MovieClip._visible辺り使えば、出来るかと思います。研究してみて下さい。

参考URL:
http://homepage2.nifty.com/joys/answers/scroller/scroller.html
movamoga
質問者

お礼

joy_28様 サンプルまで作成していただきありがとうございました。 これを参考にさせていただいて、なんとか形にすることが出来ました! 本当にありがとうございました!

関連するQ&A

  • 動的生成のムービークリップにインスタンス名でアクセスできないようです

    動的生成のムービークリップにインスタンス名でアクセスできないようです FLASHCS3(ActionScript3.0)でアルバムを作っています。 最大で5枚の外部画像を読み込んで (何枚有るかは読み込んでみないと分からない) それを配置させるスクリプトを書いています。 ただ、枚数によってそれぞれ配置させるする場所が異なるります 例えば1枚の時の1枚目の座標と、2枚の時の1枚目の座標は異なります。 これは、FLASHは、画像やファイルが何枚そのフォルダに有るかは セキュリティの関係上分からない(PHPなどを連携すればできるようだが) ので苦し紛れの策です。 numが読み込んだ画像の何枚目かを表しますが それを後で動かしたり出来るようにmcという ムービークリップにいれています。 mc.name = "mc"+num; インスタンス名は mc.name = "mc"+num; としておいて1枚目の時は getChildByName("mc0").x = 295; で所定の座標に配置できます。 ところが2枚目の時は 「null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」 と表示されてしまい、1枚目の座標は変わらず、2枚目は表示されますが座標が0(左上)に 表示されてしまいます。 試しに//■■■■2枚目の時以下のif文を消すとエラーは出ないのですが なぜ1枚目はエラーがでなくて、2枚目はエラーが出るか分からないのです。 どなたか教えていただけると助かります。 よろしくお願いします。 (以下スクリプトの一部) //■■■■イベントリスナーでnumを渡す loader_obj.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComp(num)); //■■■■イベントリスナー関数 function loadComp(num:int):Function{ return function(event:Event):void{ var loader:Loader = Loader(event.target.loader); var mc = new MovieClip; addChild(mc); addChild(event.target.loader); mc.addChild(event.target.loader); mc.name = "mc"+num; //■■■■1枚目の時 if ( num == 0 ){ getChildByName("mc0").x = 295; getChildByName("mc0").y = 30; } //■■■■2枚目の時 if ( num == 1 ){ getChildByName("mc0").x = 165;//■■■■1枚目の配置を変える getChildByName("mc1").x = 425; getChildByName("mc1").y = 30; } //■終わり } }

    • ベストアンサー
    • Flash
  • ムービークリップの移動で…

    Flash初心者です。 左右に動くMC(b_mc)を作っているのですが、それが1500px以上移動した時に、別のMC(right_mc)を出現・移動させ、それ以外は表示させないようにしたいのですが、アクションスクリプトをどうやって記述したらいいのか分かりません。 どなたかご教授下さい。 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • ムービークリップ内のボタン

    フラッシュ初心者です。 アクションスクリプトがうまく動かず困っています。 シーン1にムービークリップ1(インスタンス名:mc1)とムービークリップ2(インスタンス名:mc2)が置いてあります。 mc2の中にはボタンAを配置してあり、ボタンAをクリックすると、mc1のフレームラベル(B)に飛ぶような制御をしたいです。 ボタンAに記述してあるスクリプトは以下です。 on (release) { this._parent.mc1.gotoAndplay("B"); } しかしクリックしても全く動きません。 絶対パスで指定してもダメでした。 ちなみに、ためしに、mc1ではなく、シーン1上のフレームラベルに 飛ばすように記述したら普通に動きました。。 何か記述間違いがあるのでしょうか? 分かる方がいましたら教えてください。 お願いします。

  • 複数のムービークリップについて

    毎度すみません。 複数のムービークリップ(以下MC)をステージに時間差でバラバラの位置に登場させたいのですが、最初で行き詰まってしまいましたのでご質問させてください。 5個のMC(1~5)をステージに配置し、インスタンス名をmc1~mc5で振っています。 スクリプトレイヤーに以下の様に記述しています。 ------------ for(i=1;i<5;i++){ var mc = this["mc"+i]; mc.num = i; } mc.num._visible = false; mc.num._alpha = 0; //MCを時間差で任意の位置に表示 var t=0; this.onEnterFrame = function(){ t++; if(t==25){ mc1._visible = true; mc1.onEnterFrame = function(){ this._y = 50; } } if(t==50){ mc2._visible = true; mc2.onEnterFrame = function(){ this._y = 100; } } if(t==75){ mc3._visible = true; mc3.onEnterFrame = function(){ this._y = 150; } } //以降、mc4、mc5は省略 } --------- --------- mc.num._visible = false; mc.num._alpha = 0; --------- の部分で、デフォルト時はmc1~5を非表示にしているつもりが、 最初から表示されてしまいます。 初心者なので、近いフラッシュを見よう見真似で作成しています。 根本的に記述法を間違えておりましたら、恐れ入りますがご指摘ください。 またもっと効率的な方法がありましたら、ご教授いただければ幸いです。 Flash8.0、ActionScript2.0で制作しています。

    • ベストアンサー
    • Flash
  • ブラウザの高さのみにあわせて伸縮するムービークリップのスクリプトについて

    よろしくお願い致します。 ステージの縦横中央に、800px×500pxのムービークリップ(インスタンス名:contents)を配置しています。 ステージの縦の長さが700pxより大きければ、contentsの大きさを800px×500pxで固定して、700px より小さければ、ステージの縦の大きさに合わせてcontentsを縮小させていくスクリプトを書きたいと思っています。 ブラウザに合わせてムービークリップを拡大・縮小させるスクリプトは分かるのですが、ステージの縦の高さ のみに限定して縦の高さが700px以上のときはムービークリップの大きさを固定する、というのがよく分かりません。 どなたかお分かりになられる方がいらっしゃいましたら、どうかご教授下さいますようお願い致します。

    • ベストアンサー
    • Flash
  • 外部ファイル読み込む用の ムービークリップのインスタンスを配置

    大変初歩的な質問で申し訳ございません。 アクションスクリプトの質問というよりかflashの操作の方になると思います。 Flashのおもしろさにハマり、初心者ながら勉強しているところで、 やはりActionScriptの知識もあるとまた幅が広がって楽しいだろうなと勉強し始めました。 それで、ActionScriptの書籍を注文したのが届くまで、「写真紹介ムービーを作りながら、ActionScriptの基礎を理解していこう」 という親切なサイト様を見つけまして、まずは全く分からないところがあっても、 調べながらでも最後まで作ってみれば少しは言語を知ることができるだろうと、一章、二章と進めていっておりました。 ttp://flash.frogstone.jp/as2_basic/index.html ALPHA FROGさま それで行き詰ってしまったのが ttp://flash.frogstone.jp/as2_basic/chapter4/1.html swfファイルの軽量化の「外部ファイル読み込む用の ムービークリップのインスタンスを配置」 「pict_mcと、thumbnail_mcには、外部ファイルを読み込むためのムービークリップのインスタンス(以下base_mc)を配置しています。 このbase_mcは外部ファイル読み込み専用のムービークリップで、中身は何もありません。」 の部分です。なかなか伝わりにくい部分もあって申し訳ないのですが、 アドバイスしていただける方がいましたらよろしくお願い致します。 現状ではシーン1にpict_mcとthumbnail_mcは配置されております。 それでどこを探してもbase_mcが見つからなく、どこにActionScriptを記述すればいいのだろうかと、分かりません。 探しても考えても分からず、こちらに質問させていただきました。 もしお分かりになる方がいましたらよろしくお願いしたします。 あと初心者がActionScriptに入りやすい書籍やサイト様がありましたら 教えていただけると嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • FireFoxにてPHPで生成したをXML表示するには?

    PHPにてXML文書を生成して、それをXMLデータを読み取るFlashにデータを渡す処理を作成しました。 そこで、作成されるXML文書を確認するため、 IE7にて、http://hoge.ne.jp/xml.phpと入力してXMLのツリー上になっていることを確認しました。 ですが、ブラウザをFireFoxに切り替えたら文字化けされた(?)文書が表示されるのみです。 ためしに生成されたソースをそのまま、サーバに上げたらツリーが表示されました。 FireFoxでもIEと同様にXMLをツリー形式で見るにはどのようにしたらいいのでしょうか? 出来るなら、ブラウザ関係なく見れるのが好ましいですが、 最低限FireFoxだけでもいいので表示したいと思っています。 わかる方がおられたらご教示ください。 以上、よろしくお願いします。

  • MCを最背面に表示したい+ムービーの方向・速さを変えたい

    こんばんは。 FLASHアクションスクリプトで、以下のスクリプトを利用して、 背景にものが動いているムービーを作りたいと思っております。 ↓ライブラリにあるMCをコピーする http://hakuhin.hp.infoseek.co.jp/main/as/movieclip.html#MOVIECLIP_07 こちらのスクリプトは問題なく動作したのですが、 スクリプトの内容が把握できず、困っております。 3つのご質問がございます。 (1)質問1 シーン1の上部レイヤーに違うオブジェクトを配置しており、 その下のレイヤーに上記のMCを配置しているのですが、 再生すると上記MCの方が上レイヤーのオブジェクトより前に表示されてしまいます。 このMCを最背面に表示させたいと考えております。 (2)質問2 MCの動きをもうちょっと早くしたいと思っております。 (3)質問3 上記サンプルMCでは、左から右へ移動しているのですが、 これを、下から上へ移動させたいと考えております。 スクリプトのどの部分で操作するのか教えていただける方いらっしゃいますでしょうか? 以下、作業環境です。 ----------------------------- WinXP FLASH8 ----------------------------- どうか、よろしくお願い致します。

  • XML→スクロールバーの表示

    XML→スクロールバーの表示 こんにちわ。また質問させていただきます。 http://drache.jp/smp.jpg 現在、画像のように、外部のxmlからphoto(画像)、txt1、txt2、txt3をを読み込み表示し、それを一塊として連続表示しようとしています。 そして、その固まりに対し、スクロールバーを使いたいと思っています。 そこで解らないのが、そもそも中身(photo(画像)、txt1、txt2、txt3)に対しての可変するMCというものは作成できるのでしょうか。 図のように、txtの部分は、文章量によって可変し、その連続であるため、MCとしては大きさを決められない。と思うのですが、どうでしょうか? (図でいうとall_mcの部分) そもそも図のようなやり方は方向性として間違えているのでしょうか。 現在スクロールバーの部分はUIコンポーネントのスクロールペインを使っています。 素人で勉強しながらやっているもので、的外れな質問かもしれませんが よろしくお願いします。 AS3/CS3

  • xmlから作ったサムネールを移動させる

    こんにちは。 flashを勉強中です。XMLからサムネールの一覧を作ろうとして、 なんとかステージに配置するのはできたのですが、サムネールの 数が多いので、マウスの位置によって垂直に移動させる様なことを したいのですが、どうして動かせばよいのかがわからずに困って おります。 アクションスクリプトは以下の様にしております。 このサムネールをMCに埋め込む方法だけでもお教え頂ければ 幸いです。よろしくお願いします。 ----------------------------------------------- myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("data.xml"); myXML.onLoad = function (loaded) {    if (loaded) {      v_rootNode = myXML.firstChild;      v_num = v_rootNode.childNodes.length;      _root.total = v_num;      v_currentPhoto = v_rootNode.firstChild;      v_currentNumber = 0;       for (i=0; i < v_num; i++) {        duplicateMovieClip (icon , "mc_icon"+i, i+1);        path = v_currentPhoto.childNodes[1].firstChild;         _root["mc_icon"+i]._x = 30;         _root["mc_icon"+i]._y = 65 * i + 30;         _root["mc_icon"+i].picture.LoadMovie(path);         _root["mc_icon"+i].title = v_currentPhoto.childNodes[0].firstChild;        v_currentPhoto = v_currentPhoto.nextSibling;        }     } else {      trace ("error occured");   } };

    • ベストアンサー
    • Flash

専門家に質問してみよう