• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:もう少しでは無いかと思うのですが・・・(長文です))

Flash8での画像切り替えがうまく動作しない問題について

このQ&Aのポイント
  • Flash8で仕事を始めて行っており、画像の切り替えに関する問題が発生しています。
  • 現在行っている作業内容として、3枚の画像と進む・戻るボタンがあり、ボタンを押すと画像が切り替わる処理を実装しています。
  • しかし、実際に動かしてみると画像が切り替わらずにループしてしまう状態です。ご意見やご指南があればお願いします。

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

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

ご質問にあるようなインスタンスがすでにあるものと仮定すると, 私の場合次のようにすると思います。 1フレームのみに全てがある場合(【図】↓のような状態)で, スクリプトをそのフレームに書く場合です。 -------------------------------------------------------- // だんだん現れるスピードの変数「spd」の値を設定(※可変) var spd:Number = 5; // MCを参照する配列「weddingArr」の作成(※各要素や要素数は可変) var weddingArr:Array = new Array(); weddingArr[0] = weddingA_mc; weddingArr[1] = weddingB_mc; weddingArr[2] = weddingC_mc; // ---以上が変える設定------------------- // ---以下は変える必要なし---------------- // カウント用変数 cnt の初期化 var cnt:Number = 0; // 配列「weddingArr」の要素の数だけループ for (var i:Number = 0; i<weddingArr.length; i++) { // 全 「wedding○_mc」 のアルファを 0 にする weddingArr[i]._alpha = 0; } // 最初の eddingA_mc のみ アルファ を 100 にする weddingArr[0]._alpha = 100; // フェードイン を開始させる関数 fadeIn の定義 function fadeIn(mc:MovieClip):Void { // 指定されたMCを最高深度に移動 mc.swapDepths(this.getNextHighestDepth()); // 指定されたMC のアルファ を 0 にする mc._alpha = 0; // // 指定されたMCに毎フレーム実行するイベントハンドラメソッドを定義 mc.onEnterFrame = function():Void { // 指定されたMCのアルファを spd ずつ加算 this._alpha += spd; // もし アルファ が 100 以上になれば if (this._alpha>=100) { // この毎フレーム実行するイベントハンドラメソッドを削除 delete this.onEnterFrame; } }; } // ボタン「next_btn」クリック時にするイベントハンドラメソッドを定義 next_btn.onRelease = function():Void { // もし カウント用変数 cnt が weddingArr の最終要素番号未満のとき if (cnt<weddingArr.length-1) { // カウント用変数 cnt に 1 を加算 cnt++; } else { // それ以外は カウント用変数 cnt を 0 にする cnt = 0; } // フェードイン を開始させる関数 fadeIn を実行 // 引数(次にフェードインさせるMC) fadeIn(weddingArr[cnt]); }; // ボタン「back_btn」クリック時にするイベントハンドラメソッドを定義 back_btn.onRelease = function():Void { // もし カウント用変数 cnt が 0 より大きいとき if (cnt>0) { // カウント用変数 cnt から1 を減算 cnt--; } else { // それ以外は カウント用変数 cnt を weddingArr の最終要素番号 にする cnt = weddingArr.length-1; } // フェードイン を開始させる関数 fadeIn を実行 // 引数(次にフェードインさせるMC) fadeIn(weddingArr[cnt]); }; -----------------------------------------------------  

jitorow
質問者

お礼

画面からボタンを独立させると動きました!! 丁寧なご説明、本当に感謝いたします 有難うございましたっ!!!

jitorow
質問者

補足

ご回答誠に有難うございます。 早速実行をしてみましたが、変化が見れず・・でした。 行った内容をご説明させていただきますと ***************************************************** (1)タイムラインに一番初めのところに「weddingC_mc」を 貼り付けシンボルの変換でムービークリップへ インスタンス名を「weddingC_mc」 (2)ボタンを画像の両端へそれぞれ配置、右側が「next_btn」 左側に「back_btn」を置き、両方シンボルに変換にて 【ビットマップ】から【ボタン】へ変えインスタンス名を 「next_btn」「back_btn」に変更しました。 (3)次に「weddingC_mc」に重ねるように「weddingB_mc」を乗せて 上記と同じくシンボルの変換を行いインスタンス名も変更 (4)ボタンを「ライブラリ」のところからドラッグして 「weddingB_mc」に貼り付けました。 その際に「いくつかのライブラリアイテムがすでにドキュメント内 に存在してます」と警告されますが「概存のアイテムを置き換えない」 を選択して乗せました。 (5)後は(3)と(4)を繰り返しました (6)レイヤーの挿入にて新規レイヤーを作りBlurFiltan様に 書いていただきましたActionScriptを記述いたしまして 「制御」→「ムービープレビュー」で実行 *************************************************** と行いました。 どの手順がマズイでしょうか?? お忙しいとは思いますが、ご返答の程宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ActionScriptで、押したボタンの判別方法を教えてください。

    ActionScriptで、押したボタンの判別方法を教えてください。 ActionScript3.0で作成しています。 6フレームの【oya_mc】というムービークリップの各フレームに フレーム1ラベル[m1]に【ko1_mc】 フレーム2ラベル[m2]に【ko2_mc】 フレーム3ラベル[m3]に【ko3_mc】 フレーム4ラベル[m4]に【ko4_mc】 フレーム5ラベル[m5]に【ko5_mc】 フレーム6ラベル[m6]に【ko6_mc】 というムービークリップを配置しています。 配置しているムービークリップには、それぞれ6個のボタンを呼び出して配置しています。 【btn1】【btn2】【btn3】【btn4】【btn5】【btn6】 【btn3】を押したときに【oya_mc】を3フレーム目に移動。 【btn6】を押したときに【oya_mc】を6フレーム目に移動。 というようにしたいのですが、なかなかうまくいきません。 FLASH初心者ですが、どうかご指導よろしくお願いします。 【ko1_mc】に書いたスクリプトを抜粋して書きます。 ------- for(var i:int = 1; i <= 6; i++){ this["btn" + i].addEventListener(MouseEvent.CLICK,Down); function Down(mo:Event):void{ MovieClip(parent).gotoAndPlay("m"+i); } } ------- よろしくお願いします。

    • ベストアンサー
    • Flash
  • addChildでボタンを配置

    Flash CCで勉強中です 下記わからないことがあるので、教えてください。 (1) avtionscriptで下記のようにボタンを配置したら、 タイムライン上のレイヤーのせいかボタンが表示されません。 レイヤーを非表示にしてみるとちゃんとボタンは見えています。 addChildの部分をaddChildAt(_sinbol_btnhome,stage.numChildren-1)と最上位にしても 見えません。どのようにすればいいのでしょうか。 (2)下記ENTER_FRAMEイベントで起動直後のフレーム番号1でstopするように書いても止まらず  70で止まってしまいます。なぜでしょうか。起動直後に止まって、任意のアクション後スタートするように したいのですが、どのようにすれば良いでしょうか。 package { import flash.display.MovieClip; import flash.display.StageDisplayState; import flash.events.Event; import flash.events.MouseEvent; public class main extends MovieClip { private var cnt:int=0; public function main() { super(); //ボタン配置 var _btn:btn = new btn; _btn.x=3; _btn.y=462; addChild(_btn); _btn.addEventListener(MouseEvent.CLICK,btnhomeOnMouseDown); function btnhomeOnMouseDown(eventObj:Event):void { trace("BTN_DOWN"); } addEventListener(Event.ENTER_FRAME,onEnterFrane); } private function onEnterFrane(eventObj:Event):void { cnt +=1; trace(cnt.toString()); if(currentFrame == 1){ trace("初回起動") stop(); } if(currentFrame == 70){ trace("フレーム70") stop(); } } } }

    • ベストアンサー
    • Flash
  • 外部の画像を読み込んで並べたい

    お世話になります。外部の画像を読み込み、それを縦に並べるだけで、 難しいことは無い、と思って挑戦しましたが、すでにハマって、時間だけが過ぎております。 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や、エラーも見張ってみたのですが、問題無く読み込まれていました。 なぜ、表示されないのでしょうか? ご教授いただければ、幸いでございます。

  • フルスクリーン、画面右で切れた分だけ、左から表示

    制作環境AS3.0、CS4です。 フルスクリーンでMovieClipを右移動させて、 画面右で切れた分(部分)を左から表示させたいです。 (ドキュメントサイズとMovieClipは同サイズで 途切れることなくひと続きのようにループしたいです) フルスクリーン(画面可変)のため数値で指定できないため 応用がきかずに困ってます・・・ 以下、現状ソースです。 var speedX:Number=20; back_mc.addEventListener(Event.ENTER_FRAME, onEnterframe); function onEnterframe(eventObj:Event):void { var mc:MovieClip=eventObj.target as MovieClip; //ステージの右に出た分だけ・・・ if (mc.x+stage.stageWidth>stage.stageWidth) { //ステージの左に表示 mc.x-=stage.stageWidth-mc.x; } else { mc.x+=speedX; } } そもそも1つのMovieClipでつなぎあわせるのは、if文では無理かもしれませんが・・・ 詳しい方、ご教授お願いしたいです。

    • ベストアンサー
    • Flash
  • マウスホイールで地球儀を回転させたい

    質問です。 下記のスクリプトは地球儀をマウスで回転させるという物なのですが、 これをマウスホイールで回転させるためにframeにxmouseの値ではなくonWheelMouseの値を与えたいのですが、記述の仕方がわかりません。 知恵を貸してください。 on (press) { function run(mc) { cur = Math.floor((_xmouse - w1) / 10); pre = !pre ? (cur) : (pre); frame = cur - pre; frame = frame > 4 ? (4) : (frame); frame = frame < -4 ? (-4) : (frame); if (mc._currentframe + frame >= mc._totalframes) { mc.gotoAndStop(1); } // end if if (mc._currentframe + frame <= 1) { mc.gotoAndStop(mc._totalframes); } // end if mc._parent.b.gotoAndStop(mc._currentframe + frame); mc.gotoAndStop(mc._currentframe + frame); pre = cur; } // End of the function mm["t" + mm.OnName].WCD_Move({_alpha: 0}, {speed: 0.500000}); var w1 = this._width / 2; _parent._parent.rotate = false; intervalID = setInterval(run, 10, this); } on (release, releaseOutside){ pre = cur = false; clearInterval(intervalID); }

  • 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
  • AS3.0 でフェードイン、

    AS3.0 でフェードイン、フェードアウトを繰り返したいんです。 _btnをマウスオーバーするとimg_mcがフェードインし、 _btnをマウスアウトするとimg_mcがフェードアウトするというものをつくりたいのですが、 下記スクリプトだと一通り動作を完了すると、ボタンにマウスを持っていっても反応しなくなります。 繰り返し動作させるにはどうしたらよいのでしょうか? var img_mc:MovieClip; img_mc.alpha = 0; _btn.addEventListener(MouseEvent.MOUSE_OVER,xClick0); function xClick0(evt){ img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha); function imgAlpha(event:Event){ img_mc.alpha += 0.05; //スピード if (img_mc.alpha > 1){ img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha); } } } _btn.addEventListener(MouseEvent.MOUSE_OUT,xClick); function xClick(evt){ img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha2); function imgAlpha2(event:Event){ img_mc.alpha -= 0.05; //スピード if (img_mc.alpha == 0){ img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha2); } } }

    • ベストアンサー
    • Flash
  • actionscriptでfor文が正常に動かない

    自分ではどうやっても解決できなかったのでどうかご教授ください。 面倒な作りになっているので大変申し訳ないのですが、少ない数だと機能したものの、数を増やしたことで上手く動かなくなってしまいまして… ご面倒だとは思いますが、どうか教えていただきたいです。 actionscript2.0で、Photo0~23のMCがあり、各MCの中には5フレームを作っています。 Photo0~23をクリックすることでnextFrameで1ずつフレームが進むよう設定していています。 問題はここからなのですが、ボタンを押したら各MCの今現在表示しているフレームごとにリネームをしようと考えています。 例)()内表示されているフレーム数 Photo0(5),Photo1(3),Photo2(3),Photo3(1),Photo4(4),Photo5(2) ↓ Photo0(5),Photo4(4),Photo1(3),Photo2(3),Photo5(2),Photo3(1) (フレームの表示番号が多い順番に並べ替える(調べる)) ↓リネーム Photo0(元Photo0),Photo1(元P4),Photo2(元P3),Photo3(元P2),Photo4(元P5),Photo5(元3) 現在表示しているフレーム番号をMCの番号順(Photo0~23)順に調べるスクリプトは下記で出来ています。 しかし、いざリネームをさせると20や21までしかリネームできずに困っています。 var clip_addr:MovieClip = _root; Change_b.onPress= function(){ _global.px = 0; Clip_Align(); } function Clip_Align():Void { var i:Number, j:Number, px:Number; var ref:MovieClip; //表示フレームを順に調べる for (i=5; i>=1; i--) { //全てのMCをチェック for (j=0, px=0; j<=23; j++) { //走査するMCの参照を作成 ref = clip_addr["Photo"+j]; //該当するMCがあった場合、順にリネームする if (ref._currentframe == i) { ref._name= "Photo"+_global.px; //5から1の順に出てくるかを調べる/正常(しかし↓で21しか出ていない場合は21個しか出てこない) trace(i) //ちゃんとリネームされているか調べる/ここで毎回20や21などバラバラな数字が… trace(ref) //次のためにpxを更新 _global.px++; } } } } ここからずっと進めずに立ち往生してしまっている状態で、困っています… どこをどう直せば希望の動作をしてくれるのか、 もしくは、記述しているスクリプトがそもそもこれでは出来ないようでしたら、どう改変したらいいのか教えていただきたいです。 何卒よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • as3 getChildByNameに変数を利用する

    ※実際にやりたいことは違うのですが、 分かりやすくするため簡易的にしています。 ステージに配置された2つのインスタンスを y=300に移動するというものを作りたいと思っています。 (実際には100以上になるので動的に生成したいです。) var num:int = 2; var _mc:Array = []; var _mcName:Array = []; for(var i=0; i < num; i++){ _mc.push("test_mc"+i); _mcName.push("test_mc"+i); } for(var n=0; n < num; n++){ _mc[n] = new MovieClip; _mc[n].addEventListener(Event.ENTER_FRAME, function() { MovieClip(getChildByName(_mcName[n])).y = 300; }); } 上記を実行すると下記のエラーが出ます。 TypeError: Error #2007: パラメータ name は null 以外でなければなりません。 at flash.display::DisplayObjectContainer/getChildByName() at MethodInfo-1() 下記のように並べて記述するとうまくいくのですが・・・・ これを100個以上も書くのはばかばかしいので。。。 _mc[0] = new MovieClip; _mc[0」.addEventListener(Event.ENTER_FRAME, function() { MovieClip(getChildByName(_mcName[0])).y = 300; }); _mc[1] = new MovieClip; _mc[1」.addEventListener(Event.ENTER_FRAME, function() { MovieClip(getChildByName(_mcName[1])).y = 300; }); ご教授お願いいたします!

    • ベストアンサー
    • Flash
  • actionscriptに詳しい方助けてorz

    actionscript3.0を勉強中の初心者です。 現在、フルフラッシュサイトを制作中なのですが、 基本はactionscriptを使用しないで、 作っているのですが、 一部、雪を降らせる演出をactionscriptで実装しています。 そのスクリプトは組めたのですが、 実際にその演出をしたい階層がうまく変更できません。 現状は最前面になっているのですが、 それを最背面の一つ手前にしたいです。 具体的なビジョンとしては 最背面の背景→その上にある画像(部分的に切り抜かれて背景が見えます) この二つの間に雪を降らせたいのですが、 うまくいきません。 何か方法をご存知の方いたら教えていただけると助かります。 スクリプトは下記になります。 addEventListener(Event.ENTER_FRAME , onNewSnow) ; function onNewSnow(eventObj : Event) : void { if (Math.random() <0.3) { var snow_mc:snows = new snows(); snow_mc.x=stage.stageWidth*Math.random(); snow_mc.y=-20; snow_mc.scaleX=snow_mc.scaleY=Math.random()+0.5; addChild(snow_mc); snow_mc.addEventListener(Event.ENTER_FRAME, onSnowStep); } } function onSnowStep(eventObj:Event):void { var target_mc:MovieClip=eventObj.target as MovieClip; target_mc.rotation+=Math.ceil(20/target_mc.scaleX); target_mc.x+=4*Math.random()-2; target_mc.y+=5; if (target_mc.y >(stage.stageHeight+target_mc.height)) { target_mc.removeEventListener(Event.ENTER_FRAME, onSnowStep); removeChild(target_mc); } }

    • ベストアンサー
    • Flash