アプリ版:「スタンプのみでお礼する」機能のリリースについて

AS3.0 でフェードイン、フェードアウトを繰り返したいんです。
_btnをマウスオーバーするとimg_mcがフェードインし、
_btnをマウスアウトするとimg_mcがフェードアウトするというものをつくりたいのですが、
下記スクリプトだと一通り動作を完了すると、ボタンにマウスを持っていっても反応しなくなります。
繰り返し動作させるにはどうしたらよいのでしょうか?


var img_mc:MovieClip;

img_mc.alpha = 0;

_btn.addEventListener(MouseEvent.MOUSE_OVER,xClick0);
function xClick0(evt){
img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha);
function imgAlpha(event:Event){
img_mc.alpha += 0.05; //スピード
if (img_mc.alpha > 1){
img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha);
}
}
}

_btn.addEventListener(MouseEvent.MOUSE_OUT,xClick);
function xClick(evt){
img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha2);
function imgAlpha2(event:Event){
img_mc.alpha -= 0.05; //スピード
if (img_mc.alpha == 0){
img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha2);
}
}
}

A 回答 (1件)

 


まず alpha の値ですが
この alpha はすごくアナログ的なものなのです。

例えばフラグ的に使うことはできません。
例:「alphaが0だったら1にする 1だったら0にする」
  というようなことをするときに alpha の値は使えません。

雰囲気で言えば 「alpha=1」 は 「水1リットル」 みたいなものです。

実体として「正確に 水1リットル を汲み取れる人や装置」はこの世に存在しません。
日常生活での 水1リットル は必ず誤差を含みます。
正確な 水1リットル は数学的な概念として存在するだけです(理科的には存在しません)。

というわけで,
alpha の値がキッチリと 0 になることなどまずないので

if (img_mc.alpha == 0){
img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha2);
}

この
  if(img_mc.alpha == 0)
がダメです。

その上に書かれていらっしゃる
  if (img_mc.alpha > 1)
と同じように
  if(img_mc.alpha <= 0)
または
  if (img_mc.alpha < 0)
のようにする必要があります。


==================

あと
img_mc の alpha が 0→1 や 1→0 と "変化している最中" に
_btn から マウスオーバー したり マウスアウト された場合の処理が抜けていますね。

それと function の定義場所がおかしかったりもします。

その辺りのことも入れると
スクリプトは次のようになります。

-----------------------
var img_mc:MovieClip;

img_mc.alpha = 0;

_btn.addEventListener(MouseEvent.MOUSE_OVER,xClick0);

function xClick0(evt) {
img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha2);
img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha);
}

function imgAlpha(event:Event) {
img_mc.alpha += 0.05;//スピード
if (img_mc.alpha>1) {
img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha);
}
}

_btn.addEventListener(MouseEvent.MOUSE_OUT,xClick);

function xClick(evt) {
img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha);
img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha2);
}

function imgAlpha2(event:Event) {
img_mc.alpha-=0.05;//スピード
if (img_mc.alpha==0) {
img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha2);
}
}
-----------------------
 
 
「AS3.0 でフェードイン、」の回答画像1
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
すごく丁寧に回答していただいたおかげで、
すんなり理解できました。
ありがとうございました!

お礼日時:2010/12/13 00:47

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