トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     ライブラリから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(i = 1; i<=3 ; i++) {
		(中略)
	newTargetY = newSquareHeight * i;
	trace(newTargetY);
	newSquare.onRollOver = function():Void {
		trace(newTargetY);
		this.onEnterFrame = function():Void {
			this._y += (newTargetY - this._y)/5;
		};
	};
}
で、確認してみてください。

forループでMovieClipに設定したイベントハンドラメソッドから変数を参照する
Buttonのthis

for(i = 1; i<=3 ; i++) {
		(中略)
	newSquare.newTargetY = newSquareHeight * i;
	trace(newSquare.newTargetY);
	newSquare.onRollOver = function():Void {
		trace(this.newTargetY);
		this.onEnterFrame = function():Void {
			this._y += (this.newTargetY - this._y)/5;
		};
	};
}


----------------
質問する際は、回答者に具体的な情報を与えてください。

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;
}

}
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops