• 締切済み

ポインタをmcに追随させるには?

ポインタをmcに追随させるには? mcをスライドさせるTween使用のas2サンプルを、 クリックをロールオーバーにして、クリックにリンクを設定するものにアレンジ。 [フレーム] import mx.utils.Delegate; import caurina.transitions.Tweener; function tw(_x1:Number,_x2:Number,_x3:Number,_mc1:MovieClip,_mc2:MovieClip,_mc3:MovieClip):Void{ Tweener.addTween (_mc1,{_x:_x1,_y:80,time:2,transition:"easeOutBack"}); Tweener.addTween (_mc2,{_x:_x2,_y:80,time:2,transition:"easeOutBack"}); Tweener.addTween (_mc3,{_x:_x3,_y:80,time:2,transition:"easeOutBack"}); } panel01_mc.onRollOver = Delegate.create (this,function():Void{ tw (200,300,100,panel01_mc,panel02_mc,panel03_mc); }); panel02_mc.onRollOver = Delegate.create (this,function():Void{ tw (100,200,300,panel01_mc,panel02_mc,panel03_mc); }); panel03_mc.onRollOver = Delegate.create (this,function():Void{ tw (300,100,200,panel01_mc,panel02_mc,panel03_mc); }); [ムービークリップ] on(rollOver){ topDepth = _parent.getNextHighestDepth(); this.swapDepths(topDepth); } on(release){ getURL("index.html"); } 問題は、前面中央にスライドするmcに連動して、 中央からスライドする別のmcにポインタが反応(ロールオーバー)すること。 ロールオーバーでmcがスライドした際、 ともにポインタを自動的に追随させる方法がありましたらお教えください。 もちろん別の解決方法があれば、そちらの方をお教えいただければ助かります。 当方はas3ではタイムラインのコントロールもおぼつかないレベルです。

みんなの回答

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

> ポインタをmcに追随させるには? それ以下の部分で何を書かれているのかわかりませんが(どういう動作をさせているのか絵が出て来ませんが), 何はともあれ, 「ポインタをmcに追随させる」 という犯罪に近い行為はできないと思った方が良いですね。 ポインタの位置は閲覧者が決めるんです。 サイトやアプリケーションの作者が決めるものではありません。 勝手にポインタが動いて, 勝手に何かをクリックされたら 「あなた自身」 が困るでしょう。 例: 「1000万円払いますか?」→ 自動的に「[OK]ボタン」 クリック。 つまり 閲覧者が困るようなことをしようとすることがそもそも間違ってますし, そういうこともできない仕様になっていると思います。 (そもそもポインタクラスやポインタオブジェクトなんてない。) (あなたが閲覧者を困らせることをしようと思っていなくても誰かが困らせる可能性を多分に含む。) 「『mcをポインタに』追従させる」ことならできますよ。 また 「『mcなどで作られた疑似ポインタをmcに』追従させる」ことならできます。

NeueHaas
質問者

お礼

回答ありがとうございます。 “絵”を説明しますと、 W200:H140横長mcの3個の構成で、2個を左右並べて1個が前面中央にある形です。 前面mcからみると、背面2個のmcのどちらか左右のはみ出ている部分に、 ロールオーバー(元サンプルではクリック)すると選択された1個のmcが前面中央にスライドし、 同時にもと前面中央にあったmcがスライドしたmcの位置に背面移動する内容です。 問題はこの背面移動するmcにポインタが反応(ロールオーバー)することです。 ですので「ポインタをmcに追従」の考えはあくまで解決のひとつの手段で、目的ではなかったのですが、ご指摘ような問題があるとは不明でありました。勉強になります。 クリックでイベント処理、ダブルクリックでリンクぐらいが妥当なのでしょうか?

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

関連するQ&A

  • tweenerを使ったスライドショー

    過去ログに似たような内容がありましたが、私の質問する内容は画像の座標について教えてください。グーグルのサイトよりtweenerをダウンロードしました。アクションスクリプトはここで見せてもらいました。http://exyz.cocolog-nifty.com/good_sleep/2007/12/au_45b8.html サンプルは画像が3枚のところ私は5枚にしました。 panel01_mc.onRollOver = Delegate.create(this, function ():Void { tw(0,400,40,panel01_mc,panel02_mc,panel03_mc,panel04_mc,panel05_mc);   ^^^^^^^ ここの考え方(しくみ)が知りたいのです。いろいろやりましたが思うように動きません。 FLASH CS3 アクションスクリプト2.0 /*ライブラリ読込*/ import mx.utils.Delegate; import caurina.transitions.Tweener; /*トゥイーンをさせる関数*/ function tw(_x1:Number, _x2:Number, _x3:Number, _x4:Number, _x5:Number, mc1:MovieClip, _mc2:MovieClip, _mc3:MovieClip, _mc4:MovieClip, _mc5:MovieClip):Void { Tweener.addTween(_mc1,{_x:_x1, _y:0, time:1, transition:"easelnOutCubic"}); Tweener.addTween(_mc2,{_x:_x2, _y:0, time:1, transition:"easelnOutCubic"}); Tweener.addTween(_mc3,{_x:_x3, _y:0, time:1, transition:"easelnOutCubic"}); Tweener.addTween(_mc4,{_x:_x4, _y:0, time:1, transition:"easelnOutCubic"}); Tweener.addTween(_mc5,{_x:_x5, _y:0, time:1, transition:"easelnOutCubic"}); } /*パネルごとの動作*/ // パネル01 panel01_mc.onRollOver = Delegate.create(this, function ():Void { tw(0,400,40,panel01_mc,panel02_mc,panel03_mc,panel04_mc,panel05_mc); }); // パネル02 panel02_mc.onRollOver = Delegate.create(this, function ():Void { tw(0,0,400,panel01_mc,panel02_mc,panel03_mc,panel04_mc,panel05_mc); }); // パネル03 panel03_mc.onRollOver = Delegate.create(this, function ():Void { tw(0,370,400,panel01_mc,panel02_mc,panel03_mc,panel04_mc,panel05_mc); }); // パネル04 panel04_mc.onRollOver = Delegate.create(this, function ():Void { tw(0,90,400,panel01_mc,panel02_mc,panel03_mc,panel04_mc,panel05_mc); }); // パネル05 panel05_mc.onRollOver = Delegate.create(this, function ():Void { tw(0,90,120,panel01_mc,panel02_mc,panel03_mc,panel04_mc,panel05_mc); });

    • ベストアンサー
    • Flash
  • スライドメニュー

    以下のサンプルデータをダウンロードしCS3で開き http://exyz.cocolog-nifty.com/good_sleep/2007/12/au_45b8.html 新たにムービークリップをmc_panel04を適当なところに 配置し、以下のように他のムービークリップに真似て 書きましたが、まったく動かなくなりました。どうすればよいのでしょうか? /*--------------------------- ライブラリ読込 ---------------------------*/ import mx.utils.Delegate; import caurina.transitions.Tweener; /*--------------------------- トゥイーンをさせる関数 ---------------------------*/ function tw(_x1:Number,_x2:Number,_x3:Number,_x4:Number_mc1:MovieClip,_mc2:MovieClip,_mc3:MovieClip,_mc4:MovieClip):Void{ Tweener.addTween (_mc1,{_x:_x1,_y:0,time:1,transition:"easelnOutCubic"}); Tweener.addTween (_mc2,{_x:_x2,_y:0,time:1,transition:"easelnOutCubic"}); Tweener.addTween (_mc3,{_x:_x3,_y:0,time:1,transition:"easelnOutCubic"}); Tweener.addTween (_mc4,{_x:_x4,_y:0,time:1,transition:"easelnOutCubic"}); } /*--------------------------- パネルごとの動作 ---------------------------*/ // パネル01 panel01_mc.onRollOver = Delegate.create (this,function():Void{ tw (0,300,330,360panel01_mc,panel02_mc,panel03_mc,panel04_mc); }); // パネル02 panel02_mc.onRollOver = Delegate.create (this,function():Void{ tw (0,20,330,360.panel01_mc,panel02_mc,panel03_mc,panel04_mc); }); // パネル03 panel03_mc.onRollOver = Delegate.create (this,function():Void{ tw (0,20,40,360.panel01_mc,panel02_mc,panel03_mc,panel04_mc); }); panel04_mc.onRollOver = Delegate.create (this,function():Void{ tw (0,20,40,60.panel01_mc,panel02_mc,panel03_mc,panel04_mc); });

    • ベストアンサー
    • Flash
  • Tweenerの繰り返しについて

    こんばんわ。 Tweenerの繰り返しについてですが、 3つの写真があり、それぞれライブラリで書き出し済みです。 そして、その3つの写真をフェードイン・フェードアウトで切り替えることに成功したのですが、その3つの写真を続けて繰り返し(無限ループ)ができません。 TweenerのonCompleteを使ってtween(myMc,i)に戻ってもスタックオーバーフローになってしまい、うまくいきません。 こちらソースになります↓ for (var i:int=1; i<=3; i++) { var mc_str:String = "photo0" + i; var myClassMc:Class = Class(getDefinitionByName(mc_str)); var myMc:MovieClip = new myClassMc(); main_mc.addChild (myMc); myMc.visible = false; myMc.name = mc_str; tween (myMc,i); } function tween (MC:MovieClip, num:Number):void { var _num:Number = num - 1; if (num >= 1) { trace (_num+"枚目通過"); Tweener.addTween(MC, { alpha:0, onComplete:function():void{MC.visible=true;},delay:1+(_num*5) }); trace (_num+"枚目終わり"); Tweener.addTween (MC, { alpha:1, transition:"linear", time:3, delay:1+(_num*5) }); trace (_num+"枚目準備完了!"); } } どうか、ご教授のほうよろしくお願いします。

    • ベストアンサー
    • Flash
  • 画面をドラッグ

    ActionScript3.0で画面をドラッグして移動させるflashを作っています。 マウスを離してからも少しだけ動くように*2.75しています。 しかしhoge_mcが画面外に出た時にif文やflagを使って止めようとすると進む力が残っているっぽくて確実に止まってくれません。 どなたかこの問題の解決法が分かる方いませんか? *ソースです。(ステージにhoge_mcを置けば動きます。) import caurina.transitions.Tweener; var startX:Number = 0; var cameraRange:Number = 0; var tweenNum:Boolean =false; this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, onUp); function onDown(event:MouseEvent):void { tweenNum = false; this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove,false); startX = event.stageX; this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove,false); } function onUp(event:MouseEvent):void { this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove,false); } function onMove(event:MouseEvent):void { trace(hoge_mc.x); if(tweenNum == true){ Tweener.removeTweens(hoge_mc); return; } var cameraIkata = event.stageX - startX; hoge_mc.x += cameraIkata; cameraRange = cameraRange + cameraIkata; Tweener.addTween(hoge_mc, {x:cameraRange*2.75, time:3, transition:"easeOut"}); startX = event.stageX; } stage.addEventListener(Event.ENTER_FRAME,loop); function loop(e:Event):void { if (hoge_mc.x > 401) { tweenNum = true; Tweener.removeTweens(hoge_mc); hoge_mc.x = 400.5; } if (hoge_mc.x < 0) { tweenNum = true; Tweener.removeTweens(hoge_mc); hoge_mc.x = 0.5; } }

  • ac3 tweener の 色変換について

    tweenerを使って、オブジェクとの色が変化する様子を確認しようと試したところ、以下の記述の中で_colorが認識されません。ある方のページから引用したものをほとんどそのまま試しているのですが、どのように修正したらよろしいでしょうか?お願いします。 package { import flash.display.*; import caurina.transitions.Tweener; import flash.events.MouseEvent; [SWF( backgroundColor='0xFFFFFF', width='300', frameRate='30')] public class Tweener_Test extends Sprite { public function Tweener_Test() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; init(); } private function init():void{ var Box:Sprite = new Sprite(); Box.graphics.beginFill(0x000000); Box.graphics.drawRect(0,0,50,50); Box.graphics.endFill(); addChild(Box); Box.addEventListener(MouseEvent.CLICK,function():void{ Tweener.addTween(Box, {_color:0xFF0000,x:120,time:2,transition:"linear"}); }); } } }

    • ベストアンサー
    • Flash
  • adobe flashアクションスクリプト内の優先順位について。

    adobe flashアクションスクリプト内の優先順位について。 こんにちは。 まだflashをあたり始めて1~2週間ほどしかたっておらず、初歩的で 意味の分からない質問かもしれませんが、教えて頂けると助かります。 アコーディオンメニューを作りたくて、下記のサイトを参考に作成しました。 http://exyz.cocolog-nifty.com/good_sleep/2007/12/au_45b8.html 質問はこのメニューに、flashからマウスが離れると、メニュー1(パネル1)の状態に戻るように するにはどうするのが一番良いのか、ということです。 とにかくまだ用語が分かっておらず、結局 panel02_mc.onRollOut = Delegate.create (this,function():Void{ tw (0,300,320,panel01_mc,panel02_mc,panel03_mc); }); panel03_mc.ononRollOut = Delegate.create (this,function():Void{ tw (0,300,320,panel01_mc,panel02_mc,panel03_mc); }); を付け加える事で思った通りの動きにはなったのですが、ここで疑問がでてきました。 メニュー2からマウスをメニュー3の位置へ動かすと、 メニュー1の状態に戻る命令と、メニュー3の位置へ動く命令が重なっていると思うのです。 実際には、きちんとメニュー3の位置へ動くのですが、アクションスクリプトには ムービークリップの重なり順や、アクションスクリプトにおいて上からの順など 命令文に対しての優先順位があるのでしょうか? なんだか、動くけどもおかしなアクションスクリプトの書き方をしているのではないかと心配で。 本当は、メニュー2かつメニュー3からマウスが離れるとメニュー1の状態に戻るという 命令文をいれたかったのですが...。

    • ベストアンサー
    • Flash
  • ロールオーバーで下の画像を表示させる

    質問番号:7020788を参考にしています。 http://okwave.jp/qa/q7020788.html 一番下に写真(400x400)を置き、その上にmc0~mc3(200×200)を4つ配置しました。 mc0にロールオーバーすればmc0がフェードアウトして200×200だけが写真を見え るようにしたいと考えています。 同様にmc1にロールオーバーすればmc1がフェードアウトします。 しかし、どのmcにロールオーバーしてもmc0~mc3の全体がフェードアウトしてし まい、私が思っておるように動作いたしません。 次にアクションスクリプトを示します。 mport fl.transitions.*; import fl.transitions.easing.*; mc0.addEventListener(MouseEvent.ROLL_OVER,onrollOver); mc1.addEventListener(MouseEvent.ROLL_OVER,onrollOver); mc2.addEventListener(MouseEvent.ROLL_OVER,onrollOver); mc3.addEventListener(MouseEvent.ROLL_OVER,onrollOver); function onrollOver(eventObj:Event):void { for (var i:Number = 0; i<=3; i++) { TransitionManager.start(this, {type:Fade, direction:Transition.OUT, duration:2, easing:None.easeNone}); removeEventListener(MouseEvent.ROLL_OVER,onrollOver); } } FLASH CS3でアクションスクリプトは3.0で作っています。どうか対処策を教えて いただきたく思います。

    • ベストアンサー
    • Flash
  • mcのスクロール

    以下のムービーを作ったのですが動作がおかしいです。 ----------------ステージ------------- | [ボタン]  [photo(mc_0とmc_1)] | ------------------------------------- 【ムービーの説明】 load時:photo(mc)がmcPos[-203]の位置に移動 enterframe:ボタンにmouseoverでそれぞれの座標に移動 ※photoは同じものを二枚重ねて、それぞれにmc_0とmc_1とインスタンス名をつけて、異なるスピードで移動。「//」で斜めにマスクを作っているので、ひとつの写真が斜めにずれながら移動しているように見える 【おかしな動作】 loading動作してない状態(FlashMXで単にCtrl+Enter)した状態だと再生時に「mcPos」の「-203」にphotoは移動するのですが、loadingを動作させると再生時にphotoが移動しない。ボタンにonRollOverしたときには、ちゃんとそれぞれの座標に移動します。ただ再生時に「mcPos」の「-203」に移動しない。 /---rootの1フレーム目(ローディング)---/ this.stop(); defWidth = bar._width; if (getBytesLoaded() == getBytesTotal()) {gotoAndStop("start");} this.onEnterFrame = function(){ per = Math.floor(getBytesLoaded()/getBytesTotal()*100); loading = "Now Loading..."+per+"%"; bar._width = defWidth*(per/100); }; /---rootの2フレーム目---/ this.stop(); mc_0.setMask(mask_0); mc_1.setMask(mask_1); mcPos=new Array(); mcPos=[-203, -589, -1361, 183, -975, -1747]; this.onLoad=function(){a=0;}; this.onEnterFrame = function(){ mc_0._x += (mcPos[a]-mc_0._x)/1.4; mc_1._x += (mcPos[a]-mc_1._x)/2; }; /---rootの2フレーム目(インターフェイス)---/ ボタン(mc)の編集画面 on(rollOver){_root.a = 0;gotoAndStop("top");} on(rollOut){gotoAndStop("out");} on (release, releaseOutside){getURL("index.html");}

    • ベストアンサー
    • Flash
  • AS3.0 カスタムクラスのMCをMainで呼び出

    AS3.0 カスタムクラスのMCをMain.asで呼び出ししたいのですが、上手く機能しません。 どうして動かないのか具体的に教えてもらえると助かります。 エラー・コード:Main.as, Line 20 1180: Call to a possibly undefined method createBox. 【Main.as】 package{ import flash.display.*; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; import boxClass; public class Main extends Sprite{ //property private var item:boxClass; //constractor public function Main(){ box(); } //method public function box():void{ item=new boxClass(); item.createBox(this); } } } 【boxClass.as】 package{ import flash.display.*; import flash.events.Event; public class boxClass extends MovieClip{//boxクラス //property private var thisClass:Object; //constractor public function boxClass():void{} //method public function createBox(tm:MovieClip):void{ thisClass = this; trace("テスト"); var mc:boxMC=new boxMC(); thisClass.addChild(mc); } } }

  • addChildの使い方

    ロールオーバーで下の画像を表示させる:を参考にしています。 http://okwave.jp/qa/q7020788.html ここはアクションスクリプト2.0でしたが、私はFLASH CS3 アクションスクリプト3.0で 作っています。 その回答をもとに100X100のロールオーバー用の画像を16個表示させるために 書きました。ステージは400x400です。 for (var i:Number = 0; i<=15; i++) { if (i != 0) { var my_mc:MC = new MC(); my_mc.x = i%4*100; my_mc.y = Math.floor(i/4)*100; addChild(my_mc); } } 16個で埋め尽くすことはできましたが、my_mcに番号をつけるなどして配列を使って やらなければならないと考えますが方法がわかりません。今は16番目(iが15)しか ロールオーバーしません。 全体のアクションスクリプトを書きます。 import fl.transitions.*; import fl.transitions.easing.*; for (var i:Number = 0; i<=15; i++) { if (i != 0) { var my_mc:MC = new MC(); my_mc.x = i%4*100; my_mc.y = Math.floor(i/4)*100; addChild(my_mc); } } my_mc.addEventListener(MouseEvent.ROLL_OVER,onrollOver); function onrollOver(eventObj:Event):void { //ロールオーバーイベントを受けたインスタンスを取得 var target_mc:MovieClip = MovieClip(eventObj.currentTarget); //そのインスタンスをフェードアウト TransitionManager.start(target_mc, {type:Fade, direction:Transition.OUT, duration:2, easing:None.easeNone}); //そのインスタンスのイベントリスナーを削除 target_mc.removeEventListener(MouseEvent.ROLL_OVER,onrollOver); }

    • ベストアンサー
    • Flash