電子書籍の厳選無料作品が豊富!

FLASH CS3
AS2.0

まず、ここのサイトで7-04の減速しながら写真が止まるを参考にしました。http://book.mycom.co.jp/support/e5/actionscript10/

これをフレームにアクションを記述して修正しようとしたがうまく出来ず、自分のできる範囲で
次に到達しました。サムネイルには写真の表示に応じて四角い枠(インスタンス名:waku)を
移動させます。サムネイルのインスタンス名をbt1からbt4とします。


import mx.transitions.Tween;
import mx.transitions.easing.*;

bt1.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, 0, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 0, 1, true);
};

bt2.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -400,1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 100, 1, true);
};

bt3.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -800, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 200,1, true);
};

bt4.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -1200, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 300,1, true);
};

今、やろうとしていることはサムネイルに50%程度のフェードをかけ、ロールオーバーした時に
100%で表示するというものです。ムービーのスタートでは左端のサムネイルに四角い枠があり
100%で表示、他3つは50%。
その方法を教えてください。

A 回答 (1件)

> サムネイルに50%程度のフェードをかけ



この「50%のフェード」の意味がよくわかりません。

まず思いついたのは
フェードではなくてアルファ(_alpha/不透明度)ではないかということです。
「50%のアルファをかける」であれば意味がわかります。

その「50%のアルファをかける」場合の
とりあえず元のスクリプトをそんなに変えないバージョンのスクリプト例です↓。

//----------------------------------------
import mx.transitions.Tween;
import mx.transitions.easing.*;

//bt1~bt4のアルファを変える 関数changeAlpha の定義
//(引数:アルファを100にするボタンインスタンス)
function changeAlpha(btn:Button):Void {
for (var i:Number = 1; i<=4; i++) {
this["bt"+i]._alpha = 50;
}
btn._alpha = 100;
}

//関数changeAlpha を初回実行(引数:ボタン「bt1」)
changeAlpha(bt1);

bt1.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, 0, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 0, 1, true);
//関数changeAlpha を実行(引数:クリックされたボタン自身)
changeAlpha(this);
};

bt2.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -400, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 100, 1, true);
changeAlpha(this);
};

bt3.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -800, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 200, 1, true);
changeAlpha(this);
};

bt4.onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -1200, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, 300, 1, true);
changeAlpha(this);
};
//----------------------------------------



上のスクリプトは
同じこと(お決まりのパターン)を何度も書きすぎなので
上と同じ内容をもう少しまとめると
次のように書くこともできます。

//----------------------------------------
import mx.transitions.Tween;
import mx.transitions.easing.*;

//bt1~bt4のアルファを変える 関数changeAlpha の定義
//(引数:アルファを100にするボタンインスタンス)
function changeAlpha(btn:Button):Void {
for (var i:Number = 1; i<=4; i++) {
this["bt"+i]._alpha = 50;
}
btn._alpha = 100;
}

//関数changeAlpha を初回実行(引数:ボタン「bt1」)
changeAlpha(bt1);

//bt1~bt4に関するループ
for (var i:Number = 1; i<=4; i++) {
//各ボタンの 変数n に i-1 を保存しておく
this["bt"+i].n = i-1;
//各ボタンクリック時の動作
this["bt"+i].onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -this.n*400, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, this.n*100, 1, true);
//関数changeAlpha を実行(引数:クリックされたボタン自身)
changeAlpha(this);
};
}
//----------------------------------------




最初の話に戻ります。

> サムネイルに50%程度のフェードをかけ

の解釈についてですが,
次のような意味に捉えることもできます。

スクリプトでの状態説明になりますが
「50%のフェード」とはこんな感じのことでしょうか↓?

//----------------------------------------
import mx.transitions.Tween;
import mx.transitions.easing.*;

//bt2~bt4のアルファを50にする
for (var i:Number = 2; i<=4; i++) {
this["bt"+i]._alpha = 50;
}

//bt1~bt4に関するループ
for (var i:Number = 1; i<=4; i++) {
//各ボタンの 変数n に i の値を保存しておく
this["bt"+i].n = i;
//各ボタンクリック時の動作
this["bt"+i].onRelease = function() {
var mcTween = new Tween(Photo, "_x", Regular.easeOut, Photo._x, -(this.n-1)*400, 1, true);
var mcTween = new Tween(waku, "_x", Regular.easeOut, waku._x, (this.n-1)*100, 1, true);
for (i=1; i<=4; i++) {
if (i != this.n) {
var btTween = new Tween(this._parent["bt"+i], "_alpha", Regular.easeOut, this._parent["bt"+i]._alpha, 50, 1, true);
} else {
var btTween = new Tween(this, "_alpha", Regular.easeOut, this._alpha, 100, 1, true);
}
}
};
}
//----------------------------------------

 

 
===========

◎オマケ

> これをフレームにアクションを記述して
> 修正しようとしたがうまく出来ず、

元のファイルのムービークリップやボタン自体に書いてあるスクリプトを全部消して
4つのボタンに「bt1」~「bt4」というインスタンス名を付けた場合
_rootのフレームに書くアクションは次のようになります↓。

//----------------------------------------
var position:Number = 0;

Photo.onEnterFrame = function() {
this._x -= (this._x+position)/3;
};

for (var i = 1; i<=4; i++) {
this["bt"+i].n = i;
this["bt"+i].onRelease = function() {
position = Photo["p"+this.n]._x;
};
}
//----------------------------------------

※「Photo」の動く先の座標指定は
  「Photo」内にあるMC(p1~p4)の
  各座標が使われています。



※上記全スクリプト
  Flash Player 6 以上で動作
  ActionScript 2.0
    • good
    • 0
この回答へのお礼

いつもお世話になります。

> サムネイルに50%程度のフェードをかけ

と言うのは、フェードイン・フェードアウトのフェードを指します。だから後半に書かれている
>スクリプトでの状態説明になりますが
>「50%のフェード」とはこんな感じのことでしょうか↓?
が大変参考になります。

また、同じような構文をまとめる方法も教えていただきありがとうございます。応用できるよう
勉強してまいります。

そして、オマケもわざわざ書いてくれており重ね重ね感謝いたします。

お礼日時:2011/09/30 21:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!