• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:onPressに関する質問)

onPressに関する質問

DPEの回答

  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

拡大画像もクリックできるようにしたい、ということでしょうか? 拡大画像を表示する部分は1つでしょうか?1つでしたら、読み込み先のムービークリップとして、ステージなり何かのムービークリップ内なりに配置しているムービークリップ(ご質問文にあるスクリプトでいうところの、image_mc に相当するもの)があるかと思います。これに on(press) を指定するのが、一番簡単です。 onPress = function () ・・・では、拡大画像の表示部分に画像を読み込み直す度に無効になってしまいます。on(press) を設定したムービークリップインスタンスでは、何度も loadMovie で画像を読み直しても、クリックの検出はずっと行われます。 (ただし、画像を読み込んでいる間は一時的に検出されなくなります) 拡大画像の表示部分が1つではなく複数の場合は、サムネイル表示部分と同じ要領で、全ての読み込みの完了を待ってから onPress を定義してはいかがでしょうか。 ----------------  ***.onLoadError = function ( target_mc:MovieClip , errorCode:String ) ・・・ ↑target_mc や errorCode は仮引数といって、関数を定義する時だけ使われる仮の引数です。 実在する変数を引数にして関数を定義すると、その変数専用の関数になって汎用性がなくなってしまいます。 そこで、仮の引数を使って関数を定義するわけです。関数を呼び出すと、定義の時に仮引数で書いた部分が引数で渡されてきた実在の変数や値と置き換わり、処理が行われます。 先のエラーイベントの関数で言いますと、エラーが起きて実際に関数が呼び出される時は、第1引数にエラーが発生したムービークリップへの参照、第2引数にエラーの種類を表す文字列が渡されます。関数の中で target_mc や errorCode と書いた部分が、これらと入れ換わると思ってください。 関数の中でこれらの情報をどのように使うかは自由です。不要なら利用しなくても構いませんし、文法上も問題はありません。 MovieClip の loadMovie は、1つのムービークリップにつき1件の読み込みしか管理できません。 1件しか管理できないということは、画像が読み込まれる対象も読み込みの進捗情報を持っているのも、必然的に自分自身ということになりますから、”どのムービークリップか?”という指定は不要です。(オブジェクト名がそのまま、画像が読み込まれるムービークリップの指定になります) MovieClipLoader は、1つのオブジェクトで何件もの読み込みを管理できます。 そのため、どのムービークリップでイベントが起きたのかを判別できる設計になっています。 例えば、読み込む画像がいくつかあって、読み込み終了後にとりあえず非表示にしておきたい場合は、  onClipEvent(data)  {   this._visible = false;  } MovieClip.loadMovie では、このスクリプトを全部のムービークリップインスタンスに書かなければなりません。 MovieClipLoader の onLoadInit イベントハンドラを利用すると、  load_obj.onLoadInit = function ( target_mc:MovieClip )  {   target_mc._visible = false;  }; この定義を1回だけしておくだけで、画像がいくつあっても、load_obj という MovieClipLoader オブジェクトの loadClip メソッドで読み込む限り、いずれも読み込み完了と同時に非表示になります。 ちなみに、今まで何となく使ってきた LoadVars.onLoad イベントハンドラの引数 success も、実は仮引数です。onLoad イベントが発生した時、つまり読み込みが終わった時、読み込みが成功した場合は true( 1 )、失敗した場合は false( 0 )を引数として、関数が呼び出されていただけのことです。 仮引数の名前は自由に決められます。target_mc ではなく target_clip 、success の代わりに load_status などにしても、同じように動作します。 > 素人にとっては、なんと使い勝手の悪いHELPなんだと思います。これじゃ、HELPの為のHELPが必要です。 まあ、Flash に限らずどのソフトでも、ヘルプは分かりにくいです。 特に ActionScript のサンプルは、ただでさえもメソッドなどが長い名前になっているのに、変数やオブジェクトに my******などと長~い名前を付けているので、プログラムが分かりにくくなっています。 おまけに、ActionScript 2.0 から取り入れられた、” : ”で区切って変数などの型を明示する書き方で書かれており、これがまたゴチャゴチャして余計に見にくいです。 今までご紹介したサンプルは、スクリプトがゴチャゴチャすると分かりにくいかと思い、型の明示は省略させていただきました。あってもなくても動作自体にはあまり関係ありませんが、気になるようでしたら適宜追加してください。

teddy1014
質問者

お礼

すみません、教えて下さい。 ムービークリップのアクションとして、 on(Press) { getURL("http://www.xxxx.com/prd.aspx?sid="+var_product) ; } こんなScriptを記述しました。 1フレームには、 var var_product = "" ; switch(var_menu) {  case "aaa":   var_product = "11101" ;   break ;  case "bbb":   var_product = "11102" ;   break ;  case "ccc":   var_product = "11302" ;   break ;  default:   break ; } このようなScriptを記述しました。 1フレームでは正しくvar_productの内容が入っていますが、ムービークリップのアクション内でTraceで確認すると var_productがundefinedになってしまいます。 var_product以外の変数も全てundefinedになります。 フレーム構成は、 1フレーム:変数の定義、関数、上記のmenuの判定。       ScrollBar,Mask,サムネイル 5フレーム:上記ムービークリップを配置。 6~7フレーム:JPEGの読み込み、設定 ムービークリップは、当初1フレームに配置していましたが、タイミングの問題があるのではと思って5フレームにズラしてみました。

teddy1014
質問者

補足

拡大画像クリックの件、ありがとうございます。確かにそうですね、読み込む先は今回は一箇所だけ(image_mc)ですのでムービークリップアクションで良いわけですよね。 「MovieClipLoader は、1つのオブジェクトで何件もの読み込みを管理できます。」 この意味をもう少しお聞かせください。(理解出来ていません。) 今回はサムネイル表示するJPEGのファイル名をカンマで区切ったテキストを作成し初期処理で配列に取り込み、それを基にしてJPEGの読込み処理を行なっています。 2フレームにloadClipを定義し、「complete」の処理でduplicateMovieClip以降の処理と、次のJPEGの読込みのためにインデックスのカウントアップを行なって1フレームにジャンプさせています。(ここで読込みのループをさせています。) onLoadErrorの定義で最終的な処理を行なうフレームにジャンプさせて終了しています。 ここで、私もcompleteの処理の前に、例えばonLoadStartかonLoadInitの定義で次の読込みを実施する、即ちloadClip()を関数内で定義しておき、2件目以降はonLoadStart内でonLoadClip()が定義されている関数を呼び出すようにすればと思っていましたが、読み込む際に配列から情報を取り出す為とduplicateMovieClipで複写したムービークリップにインスタンス名を付ける為にカウントアップしているインデックスの値が狂ってしまわないかと心配になり躊躇しているところです。 その代わりと言っては何ですが、ロードした画像をそのままにしておくよりもunLoadした方が動作がスムーズになると聞いて、サムネイルを含めロードしたJPEGなどはすぐにunLoadする記述を入れました。 これって正しいのでしょうか?。unLoadもLoadと同様にI/Oが発生すると言う事で、処理的には負荷がかかる事にはならないのでしょうか?。

関連するQ&A

  • マウス位置によって画像を切り替える

    ステージ上のマウス位置を読み取り、その座標によって画像を切り替えるFlashを作成中なのですが、上手くいきません。 流れとしては 画像のファイルを読み込む ↓ 画像のファイル分だけムービークリップを作成 ↓ マウスの座標に応じて画像(ムービークリップを切り替える) というものです。 下記のようにかいています。 ●1フレーム目 //各画像の変数読み込み jpg1 = "test1.jpg"; jpg2 = "test2.jpg"; jpg3 = "test3.jpg"; jpg4 = "test4.jpg"; //初期配置 //空のMCを作成し、その中に画像変数を読み込ませる。 _root.createEmptyMovieClip("image_mc0",4); _root.createEmptyMovieClip("image_mc1",3); _root.createEmptyMovieClip("image_mc2",2); _root.createEmptyMovieClip("image_mc3",1); _root.image_mc0.loadMovie(_root.jpg1); _root.image_mc1.loadMovie(_root.jpg2); _root.image_mc2.loadMovie(_root.jpg3); _root.image_mc3.loadMovie(_root.jpg4); //マウスが押されたときに変数MCclickをオンにする _root.mouse_mc.onPress = function() { MCclick = true; trace( "押された時の変数 " +_root.MCclick); } //マウスが離れた時に変数MCclickをオフにする _root.mouse_mc.onRelease = function() { MCclick = false; trace( "離れた時の変数 " +_root.MCclick); nowpoint = (_root._xmouse); trace( "今の位置" + nowpoint); } //マウスがボタン領域外にいった時に変数MCclickをオフにする _root.mouse_mc.dragOut = function() { MCclick = false; trace( "どっかいった時の変数 " +_root.MCclick); } stop(); ●ステージ上にかぶせている透明なMC(mouse_mc) //MCclickがオンの時変数mc_xの値をとり続ける onClipEvent (mouseMove) { if (_root.MCclick) { _root.mc_x = (_root._xmouse); trace( "押された時の変数mc_xの位置 " + _root.mc_x); trace( "マウスを押したままの変数 " + _root.MCclick); //100以下の時に画像1を表示 if((_root.mc_x >= 0) || (_root.mc_x <= 100)){ _root.image_mc0._visible = true; _root.image_mc1._visible = false; _root.image_mc2._visible = false; } else if((_root.mc_x >= 100) || (_root.mc_x <= 200)){ _root.image_mc0._visible = false; _root.image_mc1._visible = true; _root.image_mc2._visible = false; } else if((_root.mc_x >= 200) || (_root.mc_x <= 300)){ _root.image_mc0._visible = false; _root.image_mc1._visible = false; _root.image_mc2._visible = true; } } } この書き方で一応動作はするのですが、1枚目と2枚目の画像の切り返しか動作が行われなくて困っています。 画像のサイズ、ステージのサイズは両方とも 400*400です。

    • ベストアンサー
    • Flash
  • loadMovieしたムービークリップのボタン化

    ムービークリップにloadMovieで1.jpgをロードし、それをボタンにしたいのですが、下のスクリプトではうまく動作しません。 menu01_mc.loadMovie("1.jpg"); menu01_mc._xscale=10; menu01_mc._yscale=10; menu01_mc.onRelease = function(){ gotoAndStop(5); } 最初のloadMovieの部分をなくし、 menu01_mc.onRelease = function(){ gotoAndStop(5); } とするとちゃんと動作します。 loadMovieしたムービークリップはボタンにできないのでしょうか? FlashCS3、actionscript2.0で作成しています。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • クリック押下中にキーボードを押すとクリックを離したことになってしまう!

    タイトルの通りです。 まずマウスでmc1をクリックと「クリックしている」と表示されるのですが、そのままクリックした状態でなにかのキーを押すと「クリックを離した」とでてしまうのです。 _root.mc1.onPress = function(){ trace("クリックをしている") } _root.mc1.onRelease = function(){ trace("クリックを離した") } クリックを押下し続けている間は「押し続けているのだ」という情報を得る方法はないのでしょうか?

    • ベストアンサー
    • Flash
  • eval関数を利用して複数の処理を1つのfunctionで行う

    こんにちは。 困ったので質問させてください。 今、MX2004のFLASHを使ってあるゲームを作成しています。 「XXX」とリンゲージ名をつけたムービークリップを          for(i=0;i<=100;i++){     obj = _root.attachMovie("XXX", "mc"+i, i);//MCの作成     obj._x = table_x[i];//X軸の値の格納テーブル     obj._y = table_y[i];//Y軸の値の格納テーブル     } で100個のムービックリップを画面上に『mc+連番(以下「mc●●」)』と名前をつけてで作成しました。 この画面上に作成したムービークリップmc●●をクリックするとTraceで「OK」と表示したいのですが・・・     mc1.onMouseUp = function(){       Trace("OK");     }     mc2.onMouseUp = function(){       Trace("OK");     }     mc3.onMouseUp = function(){       Trace("OK");     }     ・     ・×97回     ・ この様にmc●●と同じ数だけ100回同じような文を記述する方法しかないのでしょうか? 個人的には 『eval("_root.mc"+i)』を利用して同じような構文は削除したいのですが良い方法が思いつきません。 何か良い方法がありましたらご教授ください。 お願いします。

  • ムービークリップのボタン化

    menu01_mcというムービークリップをボタンにしたいのですが、 ボタン自体に on (release) { _root.photo_mc.loadMovie("1.jpg"); } と書くと正常に動くのですが、 タイムライン上に menu01_mc.onRelease = function(){ _root.photo_mc.loadMovie("1.jpg"); } と書くと動きません。 どのようにすればいいのでしょうか? わかる方教えてください。よろしくお願いします。

  • 【action script】複数のMCを・・・

    環境:Flash8 actionscript2.0 10こ程度のムービークリップをそれぞれクリックした時に同じ動きをさせる文を1つにまとめることは可能でしょうか? ムービークリップそれぞれに mc1 mc2 mc3 …mc10 とインスタンス名をつけています。 さらにその下位層に mc1  └kai_mc mc2 └kai_mc ・ ・ ・ mc10 └kai_mc と置いています。 このそれぞれのムービークリップをクリックした際、その下位層のムービークリップを次のフレームに移動させたいと考えています。 それぞれ個別に書くと _root.mc1.onRelease=function(){ _root.mc1.kai_mc.nextFrame() } と書いていたのですが、ムービークリップの数を増やすかも知れずムービークリップの数分書くのは大変なので1つにまとめたいと考えています。 自分で以下のように書いてみました。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ _root["mc"+i].kai_mc.nextFrame() } } うまくいかないので試行錯誤したりtraceで調べたりしたのですがどうもよくわかりません。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ trace(i) } } で出力すると 11と表示されるのでpassが違うとは思うのですが・・・ iを1~10で指定しているのになぜ11となるのでしょうか? どうすればpass指定できるのでしょうか? そもそものやり方、考え方が違うかどうかも含め、教えて頂きたく質問しました。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScript2.0のイベントについて

    親ムービークリップに配置した子ムービークリップのイベントが実行されなくて困っています。 親ムービークリップ自体には下記のイベントを設定しています。親ムービークリップはattachMovieで動的に配置しています。 onRollOver・・・onEnterFrameを設定 onRollOut・・・onEnterFrameを削除 子ムービークリップを配置して子ムービークリックにイベントを設定しました。onEnterFrameをは実行されますが、onReleaseが実行されず困っています。 function Parent() { this.onRollOver = function() { this.onEnterFrame = function(){・・・} } this.onRollOut = function(){ delete this.onEnterFrame; } this["child_mc"].onRelease = function() { trace('a') // 実行されない } this["child_mc"].onEnterFrame = function() { trace('b') // 実行される } } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ _root.attachMovie("Parent", "parent_mc", _root.getNextHighestDepth(), new Parent()); 子ムービークリップはオーサリングで静的にParentに配置し、プロパティでchild_mcと設定しています。 onReleaseは実行できず、そこで止まっています。 なんでも良いので教えてください。

    • ベストアンサー
    • Flash
  • 複数ボタンの生成 - actionscript

    以前複数のムービークリップを作る方法を 教えていただいたのですが、そのムービークリップ をボタンにしたいのですがうまく行きません。 for (var i = 1; i<5; i++) {   _root.createEmptyMovieClip("mc"+i, i);   var load_mc = _root["mc"+i];   _root.test = load_mc;   var jpg = i+".jpg";   load_mc.loadMovie(jpg);   i = i-1;   load_mc._x = i*200;   i = i+1; } onEnterFrame = function () {   for(var t=1;t<5;t++){ var load_mct = _root["mc"+t]; load_mct.onPress = function(){ trace(t);   }  if(_xmouse>540 && _root.mc1._x<=-1) {   for (var j = 1; j<5; j++) { var load_mcj = _root["mc"+j]; load_mcj._x += 10;   }  }  if(_xmouse<10 && _root.mc1._x>=-1*((test*200)-560)) {   for (var j = 1; j<5; j++) { var load_mcj = _root["mc"+j]; load_mcj._x -= 10;   }  } } 多分EnterFrameの中に記述するのがおかしい と思うのですが、いったいどこに記述しないと いけないのがわからないので、どなたか ご教授ください。

    • ベストアンサー
    • Flash
  • Flash ActionScript(アクションスクリプト)の挙動

    Flash ActionScript(アクションスクリプト)の挙動が 思うようにならず困っています。 ●使用ツール  Macromedia Flash MX ●やりたいこと  ムービークリップ【mc_4_0】【mc_4_1】【mc_4_2】が配置されている。  各ムービークリップにマウスが乗っているかを毎フレーム判定し、  乗っていればx/yscaleを1.5倍に、乗っていなければ1倍に戻す。 ●現在の処理  ○メインタイムラインの処理 ---------------------------- //最初のシーンを設定 _global.scene = SceneMcSelect //毎フレーム、シーン関数を呼ぶ onEnterFrame = function() { //現在シーンを呼ぶ eval( _global.scene )(); } ----------------------------  ○SceneMcSelect関数の定義 ---------------------------- function SceneMcSelect(){ for( count = 0 ; count < 3 ; count++ ){ //マウスが乗ったか? eval("mc_4_" + count).onRollOver = function(){ trace(count); eval("mc_4_" + count)._xscale = 150; eval("mc_4_" + count)._yscale = 150; } //マウスが離れたか? eval("mc_4_" + count).onRollOut = function(){ trace(count); eval("mc_4_" + count)._xscale = 100; eval("mc_4_" + count)._yscale = 100; } } } ---------------------------- ●現在の挙動  onRollOverやonRollOutの判定は正しく行われているようですが、  x/yscaleの変更処理が行われません。  traceでcountの値を確認すると、なぜか【3】になっています。 難しい処理をしているわけではないと思うのですが、 思うとおりの挙動にならず困っています。 何か間違いや見落とし等ございましたら、ご指摘お願いいたします。

    • ベストアンサー
    • Flash
  • FLASHでムービークリップ名を変数で持つ場合のloadmovie

    FLASHMXで空ムービークリップを作成して その中に外部SWFを読み込むスクリプトを書いています。 外部ファイルはa0.swfからa10.swfまであるのでそれを全て読み込む為に 空ムービークリップ名を変数で持ちたいのですが loadmvieの行では変数と認識してくれないようで何も表示されません。 (traceの行の2つの変数は正常に表示されますし  直接ムービークリップ名を入れれば読込もできます) おそらく下のソースの例だとpart_mcは変数名なのに そのままムービークリップ名と捕らえられてしまっているようです。 どのようにすれば変数と認識してくれるのでしょう? for (var i = 0; i<10; i++) { var part_mc = "a10" + i + "_mc"; var loadfile = "a" + i + ".swf"; _root.createEmptyMovieClip(part_mc, 100+i); _root.part_mc.loadMovie(loadfile); _root.part_mc._x = i * 10; trace(loadfile); trace(part_mc); } アドバイスをお願いします。