• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Flash オブジェクトに二つの機能をつけた場合)

Flashオブジェクトに二つの機能をつけた場合

このQ&Aのポイント
  • Flashオブジェクトにロールオーバーとドラッグ&ドロップの機能を追加する方法を知りたいです
  • オブジェクトのフレームごとにロールオーバーとドラッグ&ドロップの機能を実装したいです
  • 以前の質問で教えていただいた変数フラグを使用する方法も試しましたが、長い記述やfor文が難しいです

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

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

つまり,  onRollOver & onRollOut  と  onPress & onReleas  とが かぶらないので,  再定義できす,前の onRollOver & onRollOut が残ってしまう。 ということですね。 そういう場合は delete すれば良いでしょう。 具体的例としては, s1 フレームのスクリプトが次のような感じである場合, for (var i:Number = 1; i<=3; i++) { _root["MC"+i].onRollOver = function():Void { this._alpha = 50; }; _root["MC"+i].onRollOut = function():Void { this._alpha = 100; }; } s2 フレームのスクリプトは次のようにすれば良いということです。 for (i=1; i<=3; i++) { // ↓ delete delete _root["MC"+i].onRollOver; delete _root["MC"+i].onRollOut; _root["MC"+i].onPress = function():Void { this.startDrag(); }; _root["MC"+i].onRelease = function():Void { this.stopDrag(); }; }

vamse77
質問者

補足

いつもありがとうございます!! ご回答いただいた内容で自分も試してみたのですが,実はもっと複雑にオブジェクトを作っていて,あとひと工夫だとは思うのですが,行き詰まってしまいました(汗) また,もうひとつ疑問が生まれてしまったので,こちらもご解決していただけるなら... 実際に書いているASを記述させていただきます. 〈s1フレーム〉 nDepth = 0; for (var i:Number =1; i<=80; i++) { _root["MC"+i].onPress = function():Void { this.swapDepths(++_parent.nDepth); this.startDrag(true); mx = this._x; my = this._y; } _root["MC"+i].onRelease = function():Void { for (j=1; j<=80; j++) { if (this.hitTest(_root["back"+j])) { bx = _root["back"+j]._x; by = _root["back"+j]._y; this._x = bx; this._y = by; _root["MC"+j]._x = mx; _root["MC"+j]._y = my; this.stopDrag(); } } } _root["MC"+i].onReleaseOutside = function():Void { this.stopDrag(); } } this.onMouseMove = function():Void{ updateAfterEvent(); }; ☆ここでは,次のような操作を理想としています. 「1~80のMCが1~80のbackの上に配置してある.          ↓ MCをドラッグして,1~80のbackの上ににヒットしたとき, もともと配置してあったMCと位置を交換する.」 何度かうまく機能してくれるのですが,繰り返しドラッグをし続けると,一回目にPressしたとき保存した座標を,三回目のドラッグ座標で代入したり...だんだんMC同士が重なったりします...困りました. 上記のことが新たに発生した問題です. 次に記述することが前回の引き続きになります. 〈s2フレーム〉 nDepth = 0; for(i=1; i<=80; i++) { delete _root["MC"+i].onPress; delete _root["MC"+i].onRelease; } _________________________________________________________ for(i=1; i<=80; i++) { _root["MC"+i]["mc"+i].onRollOver = function():Void { this.swapDepths(++_parent.nDepth); this._xscale = 200; this._yscale = 200; for(j=1; j<=80; j++){ this["m"+j]._x = 35; this["m"+j]._y = -9; this["m"+j]._xscale = 100; this["m"+j]._yscale = 100; } } _root["MC"+i]["mc"+i].onRollOut = function():Void { this.onEnterFrame = function(){ this._xscale = 100; this._yscale = 100; for(j=1; j<=80; j++){ this["m"+j]._x = 40; this["m"+j]._y = -26; this["m"+j]._xscale = 250; this["m"+j]._yscale = 250; } } } } ☆ここでいきなり出てくる”mc”と”m”ですが, これはMCの上にattachMovieで読み込んでいるオブジェクトです. 上記の「________________ 」の部分まではうまく機能してくれるのですが,_root["MC"+i]["mc"+i]のロールオーバー等の操作ができません. もちろん,_root["MC"]だけの記述でも試してみましたが,MCのヒット領域をmcに侵されているからなのか,うまくマウスに反応してくれません. 質問が増えてしまった上に,まだ未熟なASをお見せすることになって...でも困ってます.もしお分かりになりましたら,ご解決のほどよろしくお願いします.