メイン 迷える子羊の部屋【初心者専用】 ライブラリからattachしてロールオーバー | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
zakisin | Åê¹ÆNo.25014 投稿日時: 2006-4-21 1:25 |
半人前 居住地: hyougo 投稿: 35
使用環境:
WinXP Flash8 |
ライブラリからattachしてロールオーバー お世話になります。
以前ボタンのロールオーバーでいろいろ教えていただいたのですが http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=4760&forum=8&viewmode=flat&order=DESC&start=0 今回はボタンもライブラリから動的に作成しようと思い。 http://hyougono-suke.daa.jp/test3.html var initX:Number =50; var initY:Number =50; var myButtonSpace:Number = 5; var myMenuSpace:Number = 3; var buttons:Array = ["button1","button2","button3"]; var menus:Array = ["menu1","menu2","menu3"]; for(i:Number = 0; i < buttons.length ; i++) { var newButton = _root.attachMovie("myButtonOri", "nButton"+i, i); var newbuttonWidth = newButton._width; var newTargetX = newbuttonWidth + myButtonSpace; newButton._x = initX + newTargetX * i; newButton._y = initY; newButton.onRollOver =function():Void { for(n:Number = 1 ; n <= menus.length ; n++) { var newMenu = this.attachMovie("myMenuOri", "nMenu"+n, n); var newMenuHeight = newMenu._height; var newTargetY = newMenuHeight * n; newMenu._x = 0; newMenu._y = newTargetY; } }; newButton.onRollOut =function():Void { for(n:Number = 1 ; n <= menus.length ; n++) { var newMenu = this["nMenu"+n]; newMenu.removeMovieClip(); } }; } を作成いたしました。 次にボタンから出てくるメニューを前回つくったonEnterFrameで プルダウンするようにしようと思ったのですが、 http://hyougono-suke.daa.jp/test6.html メニューが一つしか出ませんでした。 var initX:Number =50; var initY:Number =50; var myButtonSpace:Number = 5; var buttons:Array = ["button1","button2","button3"]; var menus:Array = ["menu1","menu2","menu3"]; for(i:Number = 0; i < buttons.length ; i++) { var newButton = _root.attachMovie("myButtonOri", "nButton"+i, i); var newbuttonWidth = newButton._width; var newTargetX = newbuttonWidth + myButtonSpace; newButton._x = initX + newTargetX * i; newButton._y = initY; newButton.onRollOver =function():Void { for(n:Number = 1 ; n <= menus.length ; n++) { var newMenu = this.attachMovie("myMenuOri", "nMenu"+n, n); var newMenuHeight = newMenu._height; var newTargetY = newMenuHeight * n trace(newTargetY); newMenu._x = 0; this.onEnterFrame = function():Void{ newMenu._y += (newTargetY - newMenu._y) / 5; } } }; newButton.onRollOut =function():Void { for(n:Number = 1 ; n <= menus.length ; n++) { var newMenu = this["nMenu"+n]; newMenu.removeMovieClip(); } }; } 多分onEnterFrameのとこがおかしいと思い、 自分なりにスクリプトを少なくしてテスト用のスクリプトを 記述してみました。 http://hyougono-suke.daa.jp/test4.html この時は一応三つメニューが出ていると思います。 (でも三つのメニューは全部同じ座標に移動してしまうのですが、、) for(i = 1; i<=3 ; i++) { newSquare = _root.attachMovie("square1","newSquare" +i,i); _root.newSquare._x = 100; _root.newSquare._y = 0; newSquareHeight = newSquare._height; newTargetY = newSquareHeight * i; trace(newTargetY); newSquare.onRollOver = function():Void{ this.onEnterFrame = function():Void{ this._y += (newTargetY - this._y)/5; } } } 説明が長くなって申し訳ありません。よろしくお願いいたします。 |
ひろゆき | Åê¹ÆNo.25025 投稿日時: 2006-4-21 5:38 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: ライブラリからattachしてロールオーバー 引用:
(でも三つのメニューは全部同じ座標に移動してしまうのですが、、)
「forループでMovieClipに設定したイベントハンドラメソッドから変数を参照する」 「Buttonのthis」
|
zakisin | Åê¹ÆNo.25043 投稿日時: 2006-4-21 19:30 |
半人前 居住地: hyougo 投稿: 35
使用環境:
WinXP Flash8 |
Re: ライブラリからattachしてロールオーバー ありがとうございます!
各インスタンスごとに個別に設定することと、 ターゲットパスについて理解する事ができました。 //動的に作られるムービークリップの大きさは height=30; width =100; for(i = 1; i<=3 ; ++i) { newSquare = _root.attachMovie("square1","newSquare" +i,i); _root.newSquare._x = 100; _root.newSquare._y = 0; newSquareHeight = newSquare._height; newTargetY = newSquareHeight * i; trace(newTargetY); //出力結果は 30 60 90 newSquare.onRollOver = function():Void{ trace(newTargetY); /*出力結果は 90 90 90 イベントハンドラ内での変数はターゲットパスが付いてない状態ではデフォルト参照である スクリプトが記述されたタイムライン上のnewTargetYを指す だからforが終わったあとにカウンタ変数iに入っている90が参照される*/ this.onEnterFrame = function():Void{ this._y += (newTargetY - this._y)/5; } } } for(i = 1; i<=3 ; i++) { newSquare = _root.attachMovie("square1","newSquare" +i,i); _root.newSquare._x = 100; _root.newSquare._y = 0; newSquareHeight = newSquare._height; newSquare.newTargetY = newSquareHeight * i; //各インスタンスの値として newSquareHeight * i を個別にムービークリップに設定 trace(newSquare.newTargetY); newSquare.onRollOver = function():Void{ trace(this.newTargetY); /*this.newTargetYとしないとスクリプトを記述した タイムライン変数を参照してしまう(デフォルト参照)*/ this.onEnterFrame = function():Void{ this._y += (this.newTargetY - this._y)/5; } } } |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |