- ベストアンサー
flashのムービークリップにリンクを複数張る方法
- flash初心者です。ムービークリップのMATRIXと円運動関数を使用して、3Dに回転するナビゲーションを作成したいのですが、ムービークリップ毎に個別にリンクを貼る方法が分からず、行き詰っています。緊急なので、早めにお返事いただけるとありがたいです。
- ナビゲーションとしての意味がなくなってしまうため、全てのムービークリップに1つのURLが適用されてしまいます。URLを付け足してみたり試したのですが、うまくいきません。
- ムービークリップに個別のリンクを貼る方法を教えていただきたいです。お願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> 全てのムービークリップに1つのURLが適用されてしまい > ナビゲーションとしての意味がなくなってしまいます。 とりあえずそれは当たり前の話ですよね? url は 1つだけ↓ しか用意していないわけですから。 var url = ("http://www.yahoo.co.jp/"); > 緊急なので、早めにお返事いただけるとありがたいです。 本当に早急なのであれば, 複雑に考えず sp1~sp10 に対して1つずつ個々に sp○.onRelease=function() { getURL("○○", "_blank"); }; を指定すれば良いだけなのではないのでしょうか? つまり 具体的に書けば,ご質問で書かれている this.onRelease = function() { getURL(url, "_blank"); }; の3行を削除して, さらに ご質問で書かれていらしゃるスクリプトの後にでも sp1.onRelease=function() { getURL("AAA.html", "_blank"); }; sp2.onRelease=function() { getURL("BBB.html", "_blank"); }; sp3.onRelease=function() { getURL("CCC.html", "_blank"); }; //… sp4~sp9 は省略… sp10.onRelease=function() { getURL("JJJ.html", "_blank"); }; のようなことを書き足せば良いだけでしょう? これが基本です。 . ===別法=============== 以上のような基本がわかっていらっしゃる上で さらに ご質問で書かれていらっしゃるような for文 などで処理を済ませたい場合は次のようになります。 ※書き換え箇所多数のため全文を記入↓ //------------------------------- import flash.geom.Matrix; import flash.filters.BlurFilter; var composer:Array = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"); //★【追加(変更)】URLを配列に登録 var url:Array = new Array(); url[0] = "AAA.html"; url[1] = "BBB.html"; url[2] = "CCC.html"; url[3] = "DDD.html"; url[4] = "EEE.html"; url[5] = "FFF.html"; url[6] = "GGG.html"; url[7] = "HHH.html"; url[8] = "III.html"; url[9] = "JJJ.html"; var num = 10; var speed:Number; var diff:Number = 0; var rd:Number; var a:Number; var depth:Number; var v:Number; this.createEmptyMovieClip("composerNameBox", 100); composerNameBox.createTextField("tf", 120, 0, 0, 220, 25); composerNameBox._x = -10; composerNameBox._y = 145; for (i=1; i<=num; i++) { var mc = this.attachMovie("sp"+i, "sp"+i, i); mc.n = i; mc.onEnterFrame = circulating; // //★【注意】onRollOver や onRelease などは // 関数 circulating から全て出す(入れてはダメ) // mc.onRollOver = function() { this.rollover = true; composerNameBox.tf.text = composer[this.n-1]; txtFormat(composerNameBox); }; // mc.onRollOut = function() { this.rollover = false; composerNameBox.tf.text = ""; }; // mc.onRelease = function() { getURL(url[this.n-1], "_blank"); }; } function circulating() { speed = (Stage.width/2-_xmouse)*0.005*0.001*Math.PI; diff += speed; rd = diff+this.n/num*2*Math.PI; a = Math.sin(rd); b = 0.3*Math.cos(rd); c = 0; d = 1; mcx = 100-200*Math.cos(rd); mcy = 40+40*Math.sin(rd); var myMatrix:Matrix = new Matrix(a, b, c, d, mcx, mcy); this.transform.matrix = myMatrix; depth = Math.floor((3+Math.sin(rd))*2500); this.swapDepths(depth); if (this.rollover) { v = 5; } else { v = Math.floor((1-Math.sin(rd))*5.5); } blurChange(this); } function blurChange(this_mc) { //★【注意】BlurFilter の第3引数は 1~3 var myBlur:BlurFilter = new BlurFilter(v, v, 3); this_mc.filters = [myBlur]; } function txtFormat(mc) { var format = new TextFormat(); with (format) { size = 12; color = 0x000000; align = "center"; bold = true; } mc.tf.setTextFormat(format); } //------------------------------- 上記スクリプトに 次のように書いた部分があります。 //★【注意】onRollOver や onRelease などは // 関数 circulating から全て出す(入れてはダメ) これは, 今回の場合 onRollOver… や onRollOver… や onRelease… などの イベントハンドラメソッドを onEnterFrame… でわざわざ毎フレーム毎フレーム定義し直す必要がないからです。
お礼
できました!!ありがとうございます!! まさかこんな単純な事とは思ってませんでした(笑) 今回は時間がなかったのでチュートリアルの付きのjqueryで似たような感じのものを無理やり実装してしまったんですが、これで今後はflashでも対応できます。本当にありがとうございました。 これを機にActionScriptの方も少しは勉強したいと思います。