• 締切済み

外部の画像を読み込んで並べたい

お世話になります。外部の画像を読み込み、それを縦に並べるだけで、 難しいことは無い、と思って挑戦しましたが、すでにハマって、時間だけが過ぎております。 var btnlength = 7;//並べるボタン画像の数 var btncount=1; var oLsn:Object = new Object(); var myMcLoader:MovieClipLoader //読み込み成功時 oLsn.onLoadInit = function(mc:MovieClip) { mc._y = setbtn_y ; setbtn_y = setbtn_y + mc._height; btncount++; if (!(btncount > btnlength)){ create_btn(btncount); } } //ボタンMC作成 function create_btn(_cnt){ var _mc:MovieClip = this.createEmptyMovieClip("btn"+btncount, this.getNextHightestDepth()); myMcLoader.loadClip("img/btn"+ _cnt +".png",_mc); } myMcLoader = new MovieClipLoader(); myMcLoader.addListener(oLsn); create_btn(1); やろうとしていることは、 MovieClipLoaderを使って、狙いの画像を読み出し、 読み込まれた後に、次の画像を読み出す。 という仕様です。 現状では、一番最後の、7番目の画像のみが、7番目の位置に表示されます。それ以前の画像は表示されません。 それ以前の画像が、読み込まれていないのかと思い、onProgressや、エラーも見張ってみたのですが、問題無く読み込まれていました。 なぜ、表示されないのでしょうか? ご教授いただければ、幸いでございます。

  • Flash
  • 回答数3
  • ありがとう数4

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.3

#2(#1)です。 少し気になったもので...。 > ・変数の宣言 > ・スペルミスの修正 > で、動くようになりました。 単なる書き間違いかもしれませんが, 変数の宣言は特に必要ありませんよ。 「変数の初期値」 が必要な場合とそうでない場合があるのです。 ------------------ a = 5 + 3; b = a + 2; trace(b); ------------------ これ↑には,変数 a も b も初期値は要りません。 初期値は要らないと言うよりも, a は 5+3,つまり 8 が初期値になります。 b は 8+2,つまり 10 が初期値になります。 ですから,初期値は勝手に代入されるのであえて書く必要はありません。 ------------------ a = b + 3; b = a + 2; trace(b); ------------------ これ↑には,変数 b の初期値が要ります。 a は ?+3 で ?(非数) です。 したがって, b も ?(非数)+2 で ?(非数) になってしまいます。 良くあるのが次のパターンです。 ------------------ a++; //a=a+1 と同じ意味 b = a + 2; trace(b); ------------------ これ↑には,変数 b の初期値が要ります。 a は ?+1 で ?(非数) です。 したがって, b も ?(非数)+2 で ?(非数) になってしまいます。 最初に定数が入っていない変数は, 数として足し算や引き算や掛け算などができません。 そういうことです。 ですから,ActionScript2 までで,普通にスクリプトを書く場合は, 別に変数の宣言が必ず要るというものではありません。 a = ? * 5 みたいな計算ができないということです。

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1 です。 #1で書いたように,スクリプトの最初の方に次のような1行が必要です。 ------------------------------------ // y座標指定用変数 setbtn_y の初期化 var setbtn_y:Number = 0; ------------------------------------ それと追加で, getNextHightestDepth() ←スペルミスです。 getNextHighestDepth() ←こうです。 #1を回答した(出勤前で検証する時間がなかった)後, ご質問で書かれていらっしゃるスクリプトを Flash のフレームアクションとしてコピペで貼り付けてみました。 私は英語に弱いもので直間で間違いには気づきません。 ですから貼り付けるまではスペルミスに気づきませんでしたが, 貼り付けたら文字が青色に変わらなかったのですぐにわかりました。 両方ケアレスミスだと思います。 ===================== 以下は回答ではなく検証報告です。 ではいったい 間違っている方のスクリプト getNextHightestDepth() では, _mc (btn1~7)はどの深度に作成されるのだろう? と思って, trace(_mc.getDepth()); で調べてみましたら, 全て深度 0 に作成されていました。 this.getNextHightestDepth() の値は当然 undefined ですが, undefined の場合は深度 0 に作成されるようです。 ご存じとは思いますが, 同じ深度に複数のインスタンスを配置できませんから, 前のものが消えるので btn1~6 は消えて btn7 だけが残るわけです。

Smarpon
質問者

お礼

BlurFiltan様 ご回答ありがとうございます。 なるほど、、。 、、ケアレスミスでしたか、検証していただきありがとうございました。 ・変数の宣言 ・スペルミスの修正 で、動くようになりました。 仰々しく質問しておきながら恥ずかしい限りです。

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

ざっと見ただけで検証などはしておりませんが, setbtn_y の初期値が見あたりません。 > mc._y = setbtn_y ; > setbtn_y = setbtn_y + mc._height;  ↓こうなるのでは?↓ mc._y = 未定義; setbtn_y = 非数 + mc._height;  ↓したがって setbtn_y は 非数(NaN) mc._y = 非数;

関連するQ&A

  • 画像の読み込みについて

    複数の画像を順番に読み込んで表示させようと考えています。 例えば以下のような形で、MovieClipLoaderを使って読み込もうとする場合、どのようにすればよいでしょうか。 イメージとしては、下記最後のfor文の中で読み込んでいる部分が、 順番に、1つ目の画像が読み込みが完了したら、2枚目の画像の読み込みのような形になると良いのですが。 よろしくお願いします。 var listener:Object = new Object(); listener.onLoadComplete=function(){ trace("onLoadComplete"); } listener.onLoadInit = function() { }; listener.onLoadProgress=function(target_mc,loadedBytes,totalBytes){ trace("onLoadProgress:"+":"+loadedBytes+"/"+totalBytes); } listener.onLoadStart=function(){ trace("onLoadStart"); } var loader:MovieClipLoader = new MovieClipLoader(); loader.addListener(listener); for(var i=0;i<10;i++){ loader.loadClip("hoge.jpg", this['image'+i].img); }

    • ベストアンサー
    • Flash
  • イベントハンドラメソッドが実行される?

    環境 Flash8 / FlashPlayer8 lis.onLoadInitが何故実行されるのか理解できないので 教えてください。 私の考えは、lisはローカル変数なので、startLoadの実行が終わると lisが破棄されるので、list.onLoadInitが実行されないと思ったのですが list.onLoadInitが実行されてます。 *サンプルコード function startLoad():Void { var container:MovieClip = createEmptyMovieClip("container", getNextHighestDepth()); var mcLoader:MovieClipLoader = new MovieClipLoader(); var lis = new Object(); lis.onLoadInit = function() { trace(1); } mcLoader.addListener(lis); mcLoader.loadClip("***", container); } startLoad();

    • ベストアンサー
    • Flash
  • 画像読み込みとリスナーオブジェクト

    下記スクリプトが上手く理解できずに混乱中です。 var mcLoader:MovieClipLoader = new MovieClipLoader(); var listenerObject:Object = new Object(); listenerObject.onLoadInit = function() { photoFrame._width = 120; photoFrame._height = 160; }; mcLoader.addListener(listenerObject); mcLoader.loadClip("photo001.jpg", photoFrame); 上記は画像を読み込み、指定サイズに調整する というASですが、上手く理解できずにおります。まず、 var mcLoader:MovieClipLoader = new MovieClipLoader(); mcLoader.loadClip("photo001.jpg", photoFrame); で、画像を読み込み、を学びました。 ここに単純にサイズ指定のASを追加しても、画像読み込み完了より先にサイズ指定が実行されてしまうため、指定サイズにならない場合がある。なのでリスナーオブジェクト(この単語も説明は読んだのですがいまいち理解しておりません)を作成使用し、画像ロードが完了した事を確認後、画像サイズを調整する という段階を踏ませるために、 ar listenerObject:Object = new Object(); listenerObject.onLoadInit = function() { photoFrame._width = 120; photoFrame._height = 160; }; mcLoader.addListener(listenerObject); を追加する。という説明まではよいのですが、この追加コード部分の内容がよく分かりません。 まずこのコードは実際どのような流れにになるのでしょうか? 「実際の流れ」というとおかしな表現になってしまうのですが、例えば、 function FuncName(){ this._x += 10; } MC01.onRelease = FuncName; は、 MC01がクリックされたとき、 MC01.onRelease = FuncName; ファンクションが呼び出され、 function FuncName(){ this._x += 10; } ファンクションが実行される。 という流れという説明をつけられるとおもうのですが、実際の描画の流れとでもいえばよいのでしょうか、最初に上げた画像読み込みのコードはどのような順で実行されるものなのでしょうか? 何がわかっていないかがわからない的な部分もあり、少々不明瞭な説明になってしまっているかもしれないですが、できうる範囲でアドバイスやご説明をいただけたらと思います。 よろしくお願いします。

  • アクションスクリプト 外部JPGを読み込み

    下記のアクションスクリプトで外部JPGを読み込ませているのですが、IEだと1枚目のJPGが読み込まれません。 どなたか原因を教えてください! よろしくお願いします。 mcl.addListener(listener); for (var i:Number = 1; i<=Max; i++) { mcl.loadClip("img1/"+i+".jpg",_root["mc"+i } var bmcl:MovieClipLoader = new MovieClipLoader(); for (var i:Number = 1; i<=Max; i++) { /* bmcl.loadClip("img2/"+i+".jpg",_root["btn.thumb"+i]);*/ var btn:MovieClip = _root.attachMovie("btn_mc", "btn"+i, Max+i btn.id = i; bmcl.loadClip("img2/"+i+".jpg",btn.thumb

  • 外部ASを二つ組み合わせる方法

    flash初心者です。二つのASファイルを組み合わせて作ろうとしているのですが、 外部ASをドキュメントクラスを使用して読み込み複数ある場合、調べた結果importを利用してクラスを定義出来るとの事ですが、定義が重複していますと出てしまいます。 パッケージを二個書こうとしても外部から表示可能な複数の定義は使用出来ませんと出てしまいます。二つのスクリプトを一つに纏めた方がいいのでしょうか? どなたかご教授下さい。 ASは同じディレクトリ上に配置しています。 package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.MouseEvent; import flash.events.Event; public class CardMenu extends Sprite { private var cardList:Array = ["card01", "card02", "card03", "card04", "card05"]; private var _currentCard:MovieClip; public function CardMenu() { for ( var i:int = 0; i < cardList.length; i++ ) { var mc:MovieClip = this[cardList[i]]; mc.X = mc.x0 = mc.x; mc.Y = mc.y0 = mc.y; mc.R = mc.rot = mc.rotation; mc.S = mc.sca = mc.scaleX; mc.dep = getChildIndex(mc); mc.btn.addEventListener(MouseEvent.CLICK, openHandler); mc.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } } private function openHandler( e:MouseEvent ):void { if (Boolean(_currentCard)) { _currentCard.X = _currentCard.x0; _currentCard.Y = _currentCard.y0; _currentCard.R = _currentCard.rot; _currentCard.S = _currentCard.sca; setChildIndex(_currentCard, _currentCard.dep); _currentCard.btn.visible = true; } _currentCard = e.target.parent as MovieClip; _currentCard.X = stage.stageWidth / 2; _currentCard.Y = stage.stageHeight / 2; _currentCard.R = 0; _currentCard.S = 1; setChildIndex(_currentCard, numChildren - 1); _currentCard.btn.visible = false; } private function enterFrameHandler( e:Event ):void { var card:MovieClip = e.target as MovieClip; card.x += ( card.X - card.x ) * 0.2; card.y += ( card.Y - card.y ) * 0.2; card.rotation += ( card.R - card.rotation ) * 0.2; card.scaleX += ( card.S - card.scaleX ) * 0.2; card.scaleY = card.scaleX; } } } package { import flash.display.Sprite; import box; public class box extends Sprite { public function Main() { var box:box = new box(); } } }

  • Flash、外部ファイルの読み込みとスムージングに関して質問させていた

    Flash、外部ファイルの読み込みとスムージングに関して質問させていただきます。 CS4、AS2.0を使用させていただいております。 ボタンが3つあり、それぞれのボタン(nav1_btn、nav2_btn、nav3_btn)を押した際に2階層上のtarget_mcというmcにスムージングをかけて(1.jpg、2.jpg、3.jpg)表示させたいのですが、表示できなくかなり悩んでいます。 【今のスクリプト】 var mcl = new MovieClipLoader(); nav1_btn.onRelease = function() { mcl.loadClip("1.jpg", _parent._parent.target_mc); }; nav2_btn.onRelease = function() { mcl.loadClip("2.jpg", _parent._parent.target_mc); }; nav3_btn.onRelease = function() { mcl.loadClip("3.jpg", _parent._parent.target_mc); }; 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • actionscript2.0で外部写真データの読み込み、表示が出来な

    actionscript2.0で外部写真データの読み込み、表示が出来ない FlashCS4 actionscript2.0 Win7 を使っています。 var mcLoader:MovieClipLoader = new MovieClipLoader(); var listenerObject:Object = new Object(); listenerObject.onLoadInit = function() { photoFrame._width = 758; photoFrame._height = 505; }; mcLoader.addListener(listenerObject); mcLoader.loadClip("001.jpg", photoFrame); PC上で確認しているときは写真サイズもちゃんと変更されて表示されるのですが web上にupするとなにも表示されません。 このような場合はどのように対処してゆけばよろしいのでしょうか? よろしくお願いします

    • ベストアンサー
    • Flash
  • for文を使ったボタン

    for文を使ったボタン ボタンが2つあり、そのボタンをロールオーバー、ロールアウトでそれぞれ違うmcを動かしたいのですが、うまくいきません。ボタンを「maru1、maru2」として動かしたいmcを「btn1、btn2」とインスタンス名をつけて以下のスクリプトを書きました。 maru1.addEventListener(MouseEvent.ROLL_OVER,onMouse1); maru1.addEventListener(MouseEvent.ROLL_OUT,outMouse1); maru1.buttonMode = true; maru2.addEventListener(MouseEvent.ROLL_OVER,onMouse2); maru2.addEventListener(MouseEvent.ROLL_OUT,outMouse2); maru2.buttonMode = true; function onMouse1(e:MouseEvent):void{ mc_tween = new Tween(btn1, "scaleX", Elastic.easeOut, 0.7, 1, 1, true); mc_tween.start(); } function outMouse1(e:MouseEvent):void{ mc_tween = new Tween(btn1, "scaleX", Elastic.easeOut, 1, 0.7, 1, true); mc_tween.start(); } function onMouse2(e:MouseEvent):void{ mc_tween = new Tween(btn2, "scaleX", Elastic.easeOut, 0.7, 1, 1, true); mc_tween.start(); } function outMouse2(e:MouseEvent):void{ mc_tween = new Tween(btn2, "scaleX", Elastic.easeOut, 1, 0.7, 1, true); mc_tween.start(); } これでも動くのですが、ボタンが沢山あった場合にfor文を使ってできないかと考え、ttp://www.oro.co.jp/web/creator/flash/actionscript/soft-button.htmlを参考に var mc_tween:Tween; //イベント登録 for(var i:int = 1; i < 3; i++){ this["maru"+i].addEventListener(MouseEvent.ROLL_OVER, rollOverEvent); this["maru"+i].addEventListener(MouseEvent.ROLL_OUT, rollOutEvent); this["maru"+i].buttonMode = true; } function rollOverEvent(event:Event):void{ var btn:MovieClip = event.target as MovieClip; mc_tween = new Tween(btn, "scaleX", Elastic.easeOut, btn.scaleX, 1.5, 1, true); mc_tween = new Tween(btn, "scaleY", Elastic.easeOut, btn.scaleY, 1.5, 1, true); addChildAt(btn, 5); } function rollOutEvent(event:Event):void{ var btn:MovieClip = event.target as MovieClip; mc_tween = new Tween(btn, "scaleX", Elastic.easeOut, btn.scaleX, 1, 1, true); mc_tween = new Tween(btn, "scaleY", Elastic.easeOut, btn.scaleY, 1, 1, true); } と書いたのですが、上手く行きません。<var btn:MovieClip = event.target as MovieClip;>の部分でどのように「btn1、btn2」を参照したらいいのでしょうか。 作業環境はmacOSX flashCS5 actionscript3です。よろしくお願い致します。

    • ベストアンサー
    • Flash
  • 外部swf内関数の使い方を教えてください

    actionscript 3でムービークリップ内に読み込んだ外部swf内の関数の使い方を教えてください。 以下仮ソースです var mc:MovieClip = new MovieClip(); var imgLoader:Loader = new Loader(); var path:URLRequest = new URLRequest("materials/key_550.swf"); var childSwf:MovieClip; imgLoader.load(path); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,compLoader); function compLoader(evt:Event):void{ mc.addChild(imgLoader); addChild(mc); childSwf = mc.imgLoader.content as MovieClip //ここをimgLoader.content as MovieClipとするといけるのですが、mcの子のloaderと指定したいのです。 startGOGO(); } function startGOGO():void{ childSwf.keyContMove(); //子のswf内の関数です。 } よろしくお願い致します。

  • FLASHCS3のActionScript3.0で外部画像の読み取り後

    FLASHCS3のActionScript3.0で外部画像の読み取り後に、ムービー内に画像を入れると表示されません。 複数画像をfor文で読みながら、読み終えたらEvent.COMPLETEで関知して、loadComp関数内で addChildして画像を表示させたいですが、その後マウスドラッグで動かせるようにするため mc1という空のムービーを作ってその中に、画像を内包したいのですがそうすると画像が表示されないです。 ※mc1.addChild(event.target.loader);というように 普通にmc1を除いて、 addChild(event.target.loader); とすると表示されます。 ムービーに内包すると画像が表示されないのはなぜか知りたいです。 よろしくお願いします。 photoLoad(); //画像読み込み関数 function photoLoad() { urlList[0] = "photo1.jpg"; urlList[1] = "photo2.jpg"; urlList[2] = "photo3.jpg"; urlList[3] = "photo4.jpg"; urlList[4] = "photo5.jpg"; for (var i = 0; i < urlList.length; i++) { var x:int; loaderList[i] = new Loader(); loaderList[i].load(new URLRequest(urlList[i])); loaderList[i].x = x; x = x+100; //画像のサイズによって変更 loaderList[i].contentLoaderInfo.addEventListener(Event.COMPLETE,loadComp); } } //画像読み込み関数ここまで**************************************** function loadComp(event:Event):void{ var mc1:MovieClip = new MovieClip(); //■■■問題の箇所・addChildの前にmc1をつけると表示されない■■■ addChild(event.target.loader); //移動可能に mc1.addEventListener(MouseEvent.MOUSE_DOWN, startObj0); mc1.addEventListener(MouseEvent.MOUSE_UP, stopObj0); function startObj0(event:MouseEvent):void { mc1.startDrag(); } function stopObj0(event:MouseEvent):void { mc1.topDrag(); } }

    • ベストアンサー
    • Flash

専門家に質問してみよう