ローディング画面を設けてFLASH画像ギャラリーの改善方法

このQ&Aのポイント
  • FLASH8を使用してXMLを利用したスライドショーを制作しています。回線が遅い環境で画像の読み込みが遅くなり、表示されなくなる問題があります。そのため、最初の段階でローディング画面を設けて、ある程度読み込みが完了した時点で自動スライド開始とするか、全ての画像を読み込み終えてからスライドを開始する方法を検討しています。
  • 画像は50枚前後の大きめの画像を使用しています。メモリ不足や回線スピード不足が原因と考えられます。改善策としては、予めローディング画面を表示して画像を読み込む時間を確保することや、全ての画像を事前に読み込んでからスライドを開始する方法が考えられます。
  • XMLを使ったFLASH画像ギャラリーで、回線が遅い環境では画像の読み込みが遅れて表示されなくなる問題があります。解決策としては、ローディング画面を設けてある程度の読み込み完了後に自動スライドを開始する方法や、全ての画像を読み込んでからスライドを開始する方法が考えられます。画像は50枚程度の大きめの画像を使用しています。
回答を見る
  • ベストアンサー

XMLを利用したFLASH画像ギャラリーでローディングさせたい

環境:FLASH8 XMLを利用したFLASH画像ギャラリー(スライドショー)を 制作しています。 スクリプトはあるFLASHの勉強サイトを参考にさせていただきました。 機能としては、スライドショーが自動再生から始まり アルファのフェードが入りながら画像の数だけループして、 自動再生の一時停止、次ボタンと戻るボタンでスライド内を 移動できるようになっています。 ここまではいいのですが、回線が遅い環境でみると 6枚目くらいから、画像の読み込みがついてこれなくなって 枚数カウントだけが進み、画像が黒のまま表示されなく なってしまいます。 改善したいポイントとしては、 最初の段階でローディング画面(前処理)を設けて、ある程度 読み込みが完了した時点で自動スライド開始としたいと 思っています。 もしくは、全て画像を読み込み終えてからスライド開始。 これでメモリ不足や回線スピード不足が解消されれば 今回の問題はクリアでるのではないかと考えています。 画像は50枚前後の少し大きめの画像を使用しています。 どうか、お知恵を貸していだだければと思います。 ★使用スクリプト photos_xml = new XML(); photos_xml.load("photo.xml"); photos_xml.ignoreWhite = true; photos_xml.onLoad = SlideShow; function SlideShow(success) { if (success) { rootNode = photos_xml.firstChild; Slides_num = rootNode.childNodes.length; first_Slide = rootNode.firstChild; last_Slide = rootNode.lastChild; currentSlide = first_Slide; currentNo = 1; passSlide(first_Slide); ID = setInterval(autoExchange, 5000); } } function passSlide(newSlide) { image = newSlide.attributes.image; imageWidth = newSlide.attributes.p_width; imageHeight = newSlide.attributes.p_height; slideTitle = newSlide.firstChild.nodeValue; screen._alpha = 0; delay = getTimer(); _root.onEnterFrame = function() { if (getTimer()>delay+200) { screen._alpha += (100-screen._alpha)/30; screen._width = imageWidth; screen._height = imageHeight; screen._x = 305-imageWidth/2; screen._y = 220-imageHeight/2; } frame._x += (305-imageWidth/2-frame._x)/3; frame._y += (220-imageHeight/2-frame._y)/3; frame._width += 2+(imageWidth-frame._width)/3; frame._height += 2+(imageHeight-frame._height)/3; }; loadMovie(image, screen); } function autoExchange(nextSlide) { nextSlide = currentSlide.nextSibling; if (nextSlide == null) { passSlide(first_Slide); currentSlide = first_Slide; currentNo = 1; } else { currentNo++; passSlide(nextSlide); currentSlide = nextSlide; } } auto_on.onRelease = function() { ID = setInterval(autoExchange, 4000); mx.behaviors.DepthControl.sendBackward(this); }; auto_off.onRelease = function() { clearInterval(ID); mx.behaviors.DepthControl.sendBackward(this); }; next_btn.onRelease = function() { nextSlide = currentSlide.nextSibling; if (nextSlide == null) { passSlide(first_Slide); currentSlide = first_Slide; currentNo = 1; } else { currentNo++; passSlide(nextSlide); currentSlide = nextSlide; } }; back_btn.onRelease = function() { previousSlide = currentSlide.previousSibling; if (previousSlide == null) { passSlide(last_Slide); currentSlide = last_Slide; currentNo = Slides_num; } else { currentNo--; passSlide(previousSlide); currentSlide = previousSlide; } };

  • skweb
  • お礼率66% (2/3)
  • Flash
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • mr_araki
  • ベストアンサー率85% (12/14)
回答No.3

■次のフレームに移動しない件について 1.試しにgotoAndPlayをスクリプトの先頭に書く 関数の使い方自体があっているかどうかをチェックします 2.totalImages と loadedImages をtraceする ・totalImagesは totalImages = rootNode.childNodes.length; の後にトレースして画像数と一致しているかチェック ・loadedImagesは imageLoaderListener.onLoadInit と imageLoaderListener.onLoadError で1を加算した後にトレース FLASHのダウンロードシミュレート機能は画像を先読みしても キャッシュされないので、実際にブラウザで見るときと残念ながら異なります。 スクリプトのレイヤーを分けるとどうなるか試したことがないので分かりません。 同じレイヤーの先頭にstop()を入れたほうがいいかもしれません。自信無しです; あとなくても良いですが、最初のローディングがどこかで失敗することも考えられるので1フレーム目の最後に function loadComplete() {   clearTimeout(LOADING_TIMEOUT);   gotoAndPlay(2); } LOADING_TIMEOUT = setTimeout('loadComplete', 15000); のようなのを追加して、上記の例では15秒経過したら次のフレームへ強制移動させる。 ↑を追加した場合、 imageLoaderListener.onLoadInit と imageLoaderListener.onLoadError の if分の中のgotoAndPlay(2)をloadComplete()に変更すると良いと思います。 最後にアドバイスとして、 Flashのtraceは非常に便利な機能なので、 外部からデータを取って来たとき、関数を実行するとき、計算するとき等 どんどん乱用すると単純なミスを防げます。

その他の回答 (2)

  • mr_araki
  • ベストアンサー率85% (12/14)
回答No.2

中途半端な説明でもうしわけない…;; >gotoAndPlay('slideshow');のslideshowは これはスライドショーのあるフレームのラベルを指定します フレーム番号が2であれば gotoAndPlay(2); でも大丈夫です。 >//全画像数を取得。XMLの記述方法で変わってきます サンプルのXMlを見ると大丈夫そうです。 ようはtotalImagesの値が全画像の枚数と同じであればOK 今回はrootNode.childNodes.lengthからそれを取得しています > それと根本的なところなんですが > 1フレーム目に教えていただいたスクリプトを入れて > 2フレーム目にスライドショーのスクリプト > とすると、その渡し方はどうなりますでしょうか? > それぞれstopさせておいていいのでしょうか? 現状1フレームしかないような作りであれば 上記の方法でOKです 全画像が読み込まれるまで1フレーム目でずっとstopしていますので そこにローディングの画像などを配置します。 基本的に画像やらXMLを読み込む場合は 都度ムービーを止めてローディングするか 先に全部読み込んでからメインのムービーを開始します。 ※前者の方がサイトの利用者にとっては良いとは思いますが、作るのがとにかく大変です。

skweb
質問者

お礼

mr_araki 様 詳細な回答ありがとうございます。 教えていただいた通りにやってみて プレビューしてみましたが ローデングから次のフレームに移ってくれませんでした。 試しにxmlの画像リストを5枚でやってみましが フレーム2に進んでくれませんでした。 あと一歩な気がするのですが 申し訳ないです。 今回のスライドでなぜプリロードさせたいかというと ひとつに、macでスムーズに動くこと そしてADSL程度の回線を使用されている方でも 画像が飛ばずに見られること この2つの問題をクリアーするためです。 アルファの処理で、もう処理が追いついてない感じです 実際速い回線のWIN環境でみると 何の問題もないんですが…。 ローディングなしの段階で FLASH8のダウンロードシュミレートを行ってみると DSL(32.6kb/s)では、一枚目までは何とか表示できて 2枚目以降からは読み込みが追いつかず xmlのカウントだけが進んでいってしまいます。 (黒いまま、スライド番号とタイトルだけが一定時間ごとに表示されていく) 今の現状では1フレームの一番上のレイヤーにstopをいれて 下のレイヤーに教えていただいたスクリプトを そのままいれています。 何か足りないものがあったりするのでしょうか? 何度も答えていただいて本当にありがとうございます 本当に感謝しております。

  • mr_araki
  • ベストアンサー率85% (12/14)
回答No.1

既存のソースを変更するのは結構めんどうだと思います。 画像を一度読み込んでおくとキャッシュされるので ひとつ前のフレームで先に読み込むのはどうでしょうか var totalImages:Number = 0;//全画像数 var loadedImages:Number = 0;//読み込み完了画像数 var imageLoader:MovieClipLoader = new MovieClipLoader(); var imageLoaderListener:Object = new Object(); imageLoaderListener.onLoadInit = function() { loadedImages += 1;//読み込み完了 if (loadedImages == totalImages) { //全画像読み込み完了。スライドショーへ gotoAndPlay('slideshow'); } } imageLoaderListener.onLoadError = function() { loadedImages += 1;//エラーの場合も完了とする if (loadedImages == totalImages) { //全画像読み込み完了。スライドショーへ gotoAndPlay('slideshow'); } } imageLoader.addListener(imageLoaderListener); //画像を読み込む為の適当なMCを作成 dummyMovieClip = _root.createEmptyMovieClip('dummy', 0); //非表示にする(他にもっとましなやり方はあると思いますが…) dummyMovieClip._x = -10000; //画像設定ファイル読み込み imageXmlLoader = new XML(); imageXmlLoader.ignoreWhite = true; imageXmlLoader.onLoad = pharseImageXml; ImageXmlLoader.load('photo.xml'); //画像設定ファイルパース関数 function pharseImageXml(Success:Boolean) { if(Success){ var rootNode = this.firstChild; //全画像数を取得。XMLの記述方法で変わってきます totalImages = rootNode.childNodes.length; for (node_index in rootNode.childNodes) { var currentNode = rootNode.childNodes[node_index]; var image = currentNode.attributes.image; //読み込み imageLoader.loadClip(image, dummyMovieClip); } } 先に全画像を読み込むのでローディングに結構時間がかかると思いますが 一番シンプルなやり方だと思います。

skweb
質問者

お礼

mr_araki 様 早速のアドバイスありがとうございました。 感謝します! せっかくアドバイスを頂いたのに 私の力不足で、そのスクリプトを上手く反映できずにいます。 申し訳ないです。 お手数ですが、私が理解していない部分について 教えていただけないでしょうか? とりあえず、私が書き換えなければいけないところは どこにあたるのでしょうか?勉強不足で申し訳ないです。 >gotoAndPlay('slideshow');のslideshowは 次のフレームのスクリプトの中を指すものと考えていいのでしょうか? それとも次のフレームに「slideshow」というラベルをつける 必要があるのでしょうか? >//全画像数を取得。XMLの記述方法で変わってきます とありましたが子ノードの表記の仕方で書き換えないといけない ということでしょうか? 読み込むXMLファイルは以下のような表記にしております。 -------------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <Photos> <picture image="sweden/01.jpg" p_width="525" p_height="350">#1</picture> <picture image="sweden/02.jpg" p_width="525" p_height="282">#2</picture> <picture image="sweden/03.jpg" p_width="525" p_height="318">#3</picture> <picture image="sweden/04.jpg" p_width="525" p_height="350">#4</picture> <picture image="sweden/05.jpg" p_width="525" p_height="217">#5</picture> ~省略~ <picture image="sweden/36.jpg" p_width="525" p_height="350">#36</picture> </Photos> -------------------------------------------------------- それと根本的なところなんですが 1フレーム目に教えていただいたスクリプトを入れて 2フレーム目にスライドショーのスクリプト とすると、その渡し方はどうなりますでしょうか? それぞれstopさせておいていいのでしょうか? よろしければ再度アドバイスをいただければと思います。 よろしくお願いいたします。

関連するQ&A

  • FlashとXMLとの連動

    初心者ですがよろしくお願いします。 FlashとXMLとを連動させたフォトギャラリーを作成していますが うまく読み込みできずnullになります。 Flash内の機能としては、 ・自動スライド機能 ・画像をクリックするとXML内のURLへジャンプ を入れたいと思ってます。 下記内容を御覧頂きご指摘お願いします。 XML内 <Slides>  <slide>  <jpegURL>images/image1.jpg</jpegURL>   <product_name>名前</product_name>   <product_url>URL</product_url>  </slide>  <slide>  <jpegURL>images/image2.jpg</jpegURL>   <product_name>名前2</product_name>   <product_url>URL2</product_url>  </slide> </Slides> Flash内ActipnScript slides_xml = new XML(); slides_xml.onLoad = startSlideShow; slides_xml.load("slides.xml"); slides_xml.ignoreWhite = true; //自動スライドを定義 function nextSlideload(){ nextSlideNode = currentSlideNode.nextSibling; if (nextSlideNode == null) { break; } else { currentIndex++; updateSlide(nextSlideNode); currentSlideNode = nextSlideNode; } } // Show the first slide and intialize variables function startSlideShow(success) { if (success == true) { rootNode = slides_xml.firstChild; totalSlides = rootNode.childNodes.length; firstSlideNode = rootNode.firstChild; currentSlideNode = firstSlideNode; currentIndex = 1; updateSlide(firstSlideNode); setInterval(nextSlideload,3500) } } function nextSlideload(){ nextSlideNode = currentSlideNode.nextSibling; if (nextSlideNode == null) { break; } else { currentIndex++; updateSlide(nextSlideNode); currentSlideNode = nextSlideNode; } }; // Updates the current slide with new image and text function updateSlide(newSlideNode) { imagePath = newSlideNode.attributes.jpegURL; slideText = newSlideNode.firstChild.nodeValue; loadMovie(imagePath, targetClip); } // Event handler for 'Next slide' button next_btn.onRelease = function() { nextSlideNode = currentSlideNode.nextSibling; if (nextSlideNode == null) { break; } else { currentIndex++; updateSlide(nextSlideNode); currentSlideNode = nextSlideNode; } }; // Event handler for 'Previous slide' button back_btn.onRelease = function() { previousSlideNode = currentSlideNode.previousSibling; if (previousSlideNode == null) { break; } else { currentIndex--; currentSlideNode = previousSlideNode; updateSlide(previousSlideNode); } };

  • XML読み込みのテキストが表示されません

    FLASHで簡単な写真のスライドショーを作っています。 いろいろな例を参考に下記の段階まで作業を進めましたが、イメージは表示されたものの、どうしてもXMLからのテキストが読み込めず困っています。いろいろと調べてはみましたが、初心者ゆえ一人では解決できそうにありません。どなたか目を通して間違いを指摘していただけませんでしょうか?よろしくお願いします。 XMLファイルの記述: <?xml version="1.0" encoding="UTF-8"?> <Slides> <slideNode jpegURL="photos/photo1.jpg">#1 ABCDE</slideNode> <slideNode jpegURL="photos/photo2.jpg">#2 ABCDE</slideNode> <slideNode jpegURL="photos/photo3.jpg">#3 ABCDE</slideNode> </Slides> </xml> ActionScriptの記述: myXML.load("path_to_xml/data.xml"); var slides_xml = new XML(); slides_xml.load("slides.xml"); slides_xml.ignoreWhite = true; slides_xml.onLoad = startSlideShow; function startSlideShow(success) { if (success == true) { rootNode = slides_xml.firstChild; totalSlides = rootNode.childNodes.length; firstSlideNode = rootNode.firstChild; currentSlideNode = firstSlideNode; currentIndex = 1; updateSlide(firstSlideNode); } } function updateSlide(newSlideNode) { imagePath = newSlideNode.attributes.jpegURL; slideText = newSlideNode.firstChild.nodeValue; loadMovie(imagePath, targetClip); }

  • FlashにXMLを読み込む

    Flashに外部XMLテキストを読み込みで行き詰まってしまい、質問させて頂きます。XMLテキスト読み込みまではできたのですが、そのテキストにリンクを貼ることができず、困っています。どなたか分かる方がおられましたら教えてください! 【以下XMLになります】 <?xml version="1.0" encoding="UTF-8"?> <topIndex topA="TOPICS" topDescription="テキストテキストテキスト" topB="テキストテキストテキスト" topC="テキストテキストテキスト" topD="テキストテキストテキスト" topE="テキストテキストテキスト"> </topIndex> FlashのASには _global.index_xml = "top.xml"; _global.xmlIndex = new Object(); XML.prototype.ignoreWhite = true; indexXML = new XML(); indexXML.onLoad = XMLLoaded; indexXML.load(index_xml); function XMLLoaded(success):Void { var rootNode:XMLNode = indexXML.firstChild; xmlIndex.topTitle = rootNode.attributes["topTitle"]; xmlIndex.topA = rootNode.attributes["topA"]; xmlIndex.topB = rootNode.attributes["topB"]; xmlIndex.topC = rootNode.attributes["topC"]; xmlIndex.topD = rootNode.attributes["topD"]; xmlIndex.topE = rootNode.attributes["topE"]; _root.topTitle.text = xmlIndex.topTitle; _root.topA.text = xmlIndex.A; _root.topB.text = xmlIndex.B; _root.topC.text = xmlIndex.C; _root.topD.text = xmlIndex.D; _root.topE.text = xmlIndex.E; } と記述しています。 環境はMacでFlash8を使っています。 よろしくお願いします。

  • xmlから取得したurlをflash内で設定

    flash内に設置した複数のボタンに外部xmlから取得したurlを設定したいです。 検索したり過去の質問も見てましたが、いまいちわかりませんでしたのでご教授頂けたらと思います。 現在は↓のようになっています。 これですと1つしか読み込めないので、複数設定してそれぞれのリンクを設定したいと思っています。 わかる方いらっしゃいましたら何卒よろしくお願い致します。 xmlのソース(url.xml) <?xml version="1.0" encoding="UTF-8"?> <top> <menu> <title>url</title> <url>http://www.google.co.jp/</url> </menu> </top> FLASH内のスクリプト(フレーム) function startIndexMenu(success) { if (success == true) { rootNode = index_xml.firstChild; firstMenuNode = rootNode.firstChild; childMenuNode = firstMenuNode.firstChild; updateMenu(childMenuNode); } // end if } // End of the function function updateMenu(newMenuNode) { slideText = newMenuNode.firstChild.nodeValue; slideText_op = newMenuNode.nextSibling; urlNode = slideText_op.firstChild.nodeValue; nextMenuNode2 = firstMenuNode.nextSibling; slideText2 = nextMenuNode2.firstChild.nodeValue; nextMenuNode3 = nextMenuNode2.nextSibling; slideText3 = nextMenuNode3.firstChild.nodeValue; } // End of the function index_xml = new XML(); index_xml.onLoad = startIndexMenu; index_xml.load("url.xml"); index_xml.ignoreWhite = true; ボタンに設定してるスクリプト on (release) { getURL(_root.urlNode, ""); }

    • ベストアンサー
    • Flash
  • 外部XMLを使ってFLASHに値を送りたい

    下記のアクションスクリプトは外部XMLより色の値をFLASHに送るものです。 タイトル、コメント、フォントサイズや種類の指定を追加するにはどうすればよいのでしょうか? 宜しくお願いします。 System.useCodepage = true; my_xml = new XML(); my_xml.load("style.xml"); my_xml.ignoreWhite = true; my_xml.onLoad = function(success) { if (success == true) { rootNode = my_xml.firstChild; AValue = rootNode.firstChild.nodeValue; AValue = AValue.substr(1, 6); updatebgcolor(AValue); colorNode = rootNode.nextSibling; $BValue = colorNode.firstChild.nodeValue; $BValue = $BValue.substr(1, 6); updatebgcolor2($BValue); } }; updatebgcolor = function (AValue) { colorObj = new Color(bg_mc); colorObj.setRGB("0x"+AValue); }; updatebgcolor2 = function ($BValue) { colorBObj = new Color(bg2_mc); colorBObj.setRGB("0x"+$BValue); };

  • XMLから読み込んだデータを数値に変換する方法

    こんにちは。 XMLからデータを読み取ってそのpositionの値を元に 画像を動かそうとしています。 ただ、読み込んだ数値が文字と判断されていて、 numberで変換しても、数値にならずに、動かすことが できません。 申し訳ありませんが、お教え頂ければ幸いです。 よろしくお願いします。 -----script------------------------------------------- myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("data.xml"); v_positionxArray = new Array (); v_positionyArray = new Array (); 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_positionxArray.push (v_currentPhoto.childNodes[0].firstChild); v_positionyArray.push (v_currentPhoto.childNodes[1].firstChild); v_currentPhoto = v_currentPhoto.nextSibling; } } else { trace ("error occured"); } }; btn_test.onRelease = function () { if (v_currentNumber < v_num-1) { v_currentNumber+=1; picture_x = Number(v_positionxArray[v_currentNumber]); picture_y = Number(v_positionyArray[v_currentNumber]); } }; picture.onEnterFrame = function () { this._x += picture_x; this._y += picture_y; } -----xml data-------------------------------------- <data> <member> <positionx>-591</positionx> <positiony>-130.7</positiony> </member> </data>

    • ベストアンサー
    • Flash
  • FLASHでXMLを読み込んだときに読み込むまでにundefindがでてしまいます。

    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])); };

    • ベストアンサー
    • Flash
  • XMLで画像を読み込むと巨大化します・・・

    Flash8にて、外部XML画像とURLを読み込みしています。 初の試みでして、たどたどしくも双方ともに読み込むところまでは皆様のこれまで作られたデータを基に作成出来たのですが、画像を読み込んだときに巨大化されてしまって困っています。 ▼XML --------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <jpeg> <jpegURL>images/image1.jpg</jpegURL> <link>http://yahoo.co.jp/1</link> <jpegURL>images/image2.jpg</jpegURL> <link>http://yahoo.co.jp/2</link> <jpegURL>images/image3.jpg</jpegURL> <link>http://yahoo.co.jp/3</link> <jpegURL>images/image4.jpg</jpegURL> <link>http://yahoo.co.jp/4</link> </jpeg> --------------------------------------------------- 800×250で画像を読み込みたいのですが、 読み込むと、すさまじく巨大化してしまっています。。 作ろうとしているのは、横にスクロールするナビゲーションです。 XMLで画像とリンク先を指定、画像は同じ階層に「img」というフォルダを作って入れています。 下記が、1フレーム目に記載しているASです。 ▼AS --------------------------------------------------- var obj_array:Array = new Array(); var center:Number = Stage.width/2; var menu_num:Number = 4; var maxlength:Number = 800*menu_num; //サイズ指定箇所 var friction:Number = -0.03; var obj_xml:XML = new XML(); obj_xml.onLoad = start_me; obj_xml.ignoreWhite = true; obj_xml.load("scrollslide.xml"); function start_me(success:Boolean):Void { if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; obj_array[i] = _root.attachMovie("menu", menu_str, i); obj_array[i].num = i; obj_array[i]._x = 800*(i-1); //X座標 obj_array[i]._y = 0; var jpg_str:String = obj_xml.firstChild.childNodes[(i-1)*2].firstChild; var link_str:String = obj_xml.firstChild.childNodes[i*2-1].firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; //関数呼び出し obj_array[i].onRelease = release_me; obj_array[i].link = link_str; } } else { seltext = "xml read error"; } } function release_me():Void { trace(this.link); getURL(this.link, "_parent"); } function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; var vx:Number = this._x+speed; if (vx<=-800) { //ステージ左に消えたら vx += maxlength; //サムネイルの最後列の後ろに移動 } else if (vx>=Stage.width+10) { //ステージ右に消えたら vx -= maxlength; //サムネイル最前列の前に移動 } this._x = vx; updateAfterEvent(); } function roll_me():Void { this._alpha = 80; } function rollout_me():Void { this._alpha = 100; } stop(); --------------------------------------------------- サイズを指定している箇所に問題があるのでしょうか。 初心者でして、全く見当がつかず困っております。 もしよろしければ、先人の方たちにご意見とご指摘を頂ければと思います。宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 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
  • AS2.0 XML 画像を全部読み込むまでローディング表示にしたい

    はじめまして、アクションスクリプト2.0を勉強中の身であります。 今回どうしてもわからないものが出てきてしまったため、ご質問をさせていただきました。 xmlをつかってflash8のスライドショーのメニューを作っているのですが、 このスクリプトだと、一回一回画像を取りにいくようになります。 これを最初にすべて読み込むまで次の動作を待ちたいのですが、どのように修正すればいいでしょうか? よろしくお願いいたします。 // ON MENU BUTTON PRESS FUNCTION // Identifies target image to load once menu item is pressed _global.clickAction = function(obj) { clearInterval(timeInterval); menu_mc["bttn_mc"+ID].select_mc.gotoAndPlay('off'); ID = obj.ID; imageLoad(); }; // AUTOMATED BANNER FUNCTION bannerTimer = function () { clearInterval(timeInterval); menu_mc["bttn_mc"+ID].select_mc.gotoAndPlay('off'); ID += 1; if (ID == total) { ID = 0; } imageLoad(); }; // CSS STYLESHEET var styles = new TextField.StyleSheet(); // Set hyperlink colour and decoration here styles.setStyle("a:link", {color:'#00FFFF', textDecoration:'none'}); styles.setStyle("a:hover", {color:'#00FFFF', textDecoration:'underline'}); txt_mc.txt.html = true; txt_mc.txt.styleSheet = styles; // BUILD BANNER DISPLAY construct = function () { for (i=0; i<total; i++) { //Vars from XML Image[i] = xmlNode.childNodes[i].attributes.Image; Delay[i] = xmlNode.childNodes[i].attributes.Delay; Link[i] = xmlNode.childNodes[i].attributes.Link; Headline[i] = xmlNode.childNodes[i].attributes.Headline; Blurb[i] = xmlNode.childNodes[i].attributes.Blurb; Copy[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue; //Build menu メニューオブジェクトの生成 menu_mc.bttn_mc.duplicateMovieClip("bttn_mc"+i, i); menu_mc["bttn_mc"+i]._y = menu_mc.bttn_mc._height*i; menu_mc["bttn_mc"+i].ID = i; menu_mc["bttn_mc"+i].headline_txt.text = Headline[i]; menu_mc["bttn_mc"+i].blurb_txt.text = Blurb[i]; //Build image holder イメージオブジェクトの生成 holder_mc.holder.duplicateMovieClip("holder"+i, i); holder_mc["holder"+i]._y = imageHeight*i; holder_mc["holder"+i].isLoaded = false; } }; //CALL FUNCTION TO LOAD IMAGE imageLoad = function () { clearInterval(timeInterval); txt_mc.txt.htmlText = Copy[ID]; txt_mc.headline_txt.text = Headline[ID]; if (holder_mc["holder"+ID].isLoaded == false) { loadMovie(Image[ID], holder_mc["holder"+ID]); } else { holder_mc["holder"+ID].gotoAndPlay(1); timeInterval = setInterval(bannerTimer, Delay[ID]); menu_mc["bttn_mc"+ID].select_mc.gotoAndPlay('on'); } }; //CALL FUNCTION ONCE IMAGE HAS LOADED imageLoaded = function (obj) { obj.isLoaded = true; if (obj._name == "holder"+ID) { clearInterval(timeInterval); timeInterval = setInterval(bannerTimer, Delay[ID]); menu_mc["bttn_mc"+ID].select_mc.gotoAndPlay('on'); txt_mc.txt.htmlText = Copy[ID]; } }; this.onEnterFrame = function() { //Apply tweening to menu and banners destX = -ID*imageHeight; holder_mc._y += (destX-holder_mc._y)/scrollTween; txt_mc._alpha += (destAlpha-txt_mc._alpha)/alphaTween; /* if (menu_mc._height>boundryHeight) { menu_mc._y += (destY-menu_mc._y)/scrollTween; if (menu_mc._y>0) { menu_mc._y = 0; } else if (menu_mc._y<(boundryHeight-menu_mc._height)) { menu_mc._y = boundryHeight-menu_mc._height; } } */ // Info text display if (holder_mc["holder"+ID].isLoaded == true) { if (_xmouse>0 && _xmouse<imageWidth && _ymouse>0 && _ymouse<imageHeight) { destAlpha = 100; } else { destAlpha = 0; } } else { destAlpha = 0; } txt_mc.txt._height = txt_mc.txt.textHeight+5; txt_mc.bg._height = txt_mc.txt._height+20+txt_mc.headline_txt.textHeight+5; txt_mc._y = imageHeight-txt_mc._height; };

専門家に質問してみよう