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

onPressに関する質問

DPEの回答

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

スクリプトに誤りはないのですが、定義するタイミングが良くないようです。 ローカルでテストしてみても、loadMovie の直後に onPress を定義すると無効になってしまいます。 しかし、loadMovie から2、3つほど後のフレームで定義すると、この定義は有効になります。 インスタンスに on(press) で定義した時は、画像の読み込み終了後から press イベントが検出されるようになります。 http://okweb.jp/kotaeru.php3?q=992878 では、loadMovie の終了を待たずに onPress を定義しても上手くいっていましたので、どのくらいのタイミングから定義が有効になるか(厳密には読み込みが終わらなくてもいいのかどうか)、もしくは、本当は上手くいかないのにたまたま上手くいっていただけなのかどうかは分かりませんが・・・ 仮に、読み込みが終わる前に onPress を定義して、これが有効になるとしても、画像を読み込み中で何も表示されていないムービークリップがクリック可能(カーソルを移動すると形が変わる)というのは、少々不自然ではないでしょうか。 見ている人への配慮から考えても、onPress は読み込みの終了を待って定義した方がよさそうです。定義するまでは未定義のままですから、当然ながら、クリックしても何も起きませんし、カーソルの形も変わりません。 loadMovie には2種類あります。 画像や swf ファイルと置き換えるインスタンス名や階層( _level )を指定する loadMovie アクション( Flash Player 3 から使用可能)と、MovieClip オブジェクトのメソッドの1つである loadMovie( Flash Player 5 以降で使用可能)です。 loadMovie アクションは本当に読み込むだけの機能しかなく、読み込みの終了を検出する方法がありません。 MovieClip.loadMovie では読み込み終了時に data というイベントが発生し、読み込みの終了を検出できます。 ただし、loadMovie メソッドを呼び出したムービークリップインスタンスでは ***.onData = function ()・・・の書き方は正常に機能しませんので、onClipEvent(data) を利用する必要があります。

teddy1014
質問者

お礼

すみません。#2の「お礼」の内容について、私のミスに気が付きました。 「_parent」が抜けていました。 ただ、on(Press)にすると一度クリックしただけなのにgetURLの処理が2度とか3度実行される事があります。 on(release)にすると正しく1度だけの実行になります。 全く違う内容で恐縮ですが、ご存知でしたらお教えください。 #2の「補足」い対する回答も宜しく御願い致します。

teddy1014
質問者

補足

いつもお世話になります。 私も試してみましたが、ご指摘の通り少し後のフレームで定義すると正しく動きました。何故ですかねぇ?。 でも、今回は下記のようにサムネイルを表示した分だけ、クリック時の処理を関数で処理しています。 image_set()と言う関数の中で選択されたサムネイルの拡大画像を表示し、そのムービーに対してonPressを定義したいのです。 for( i = 1 ; i <= (var_setctr) ; i++ ) {  sheet[ i ][ "var_image_no" ] = i;  sheet[ i ].onPress = function () {   var_suffix = this.var_image_no;   image_set() ;  } ; } なかなかうまく動きません。 movieClipLoaderを試しに使ってみましたが、結構早くなった気がします。読込みが完了したかどうかを確認する前にロード出来ていたりするので、今までとは勝手が違うので戸惑っています。HELP文中の = function(target_mc:MovieClip, errorCode:String) の「target_mc」って何の事だか分かりませんが、そのまま使っていてもエラーにはならないし、正常に動いているようだし。 素人にとっては、なんと使い勝手の悪いHELPなんだと思います。これじゃ、HELPの為のHELPが必要です。

関連する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); } アドバイスをお願いします。