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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     onClipEvent (enterFrame) の(load)時の設定を停止する。
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
takayasu
Åê¹ÆNo.8501
投稿日時: 2004-6-22 12:40
新米
居住地:
投稿: 16
使用環境:
MacOSX10.3.5.
FlashMX2004
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
森さん、野中さんレスありがとうございます。

まだまだ勉強中のため野中さんのスクリプトの中で解らない所があります。
しかし、自分である程度は理解しないと失礼な所もあると思いますので
この件についてもう少し理解してからまたご質問させていただきたいと思っております。
なるべく早めにまた質問させていただきたいと思っておりますのでどうぞよろしくお願い致します。
野中文雄
Åê¹ÆNo.8484
投稿日時: 2004-6-21 17:20
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
0から100の範囲を超えたら停止する処理は、すでにご紹介しています

MovieClip._alphaプロパティの値が1/256より小さくなると、加算しても増加しない理由は「落ち着かない数値など」のスレッドをご覧ください。
引用:
takayasuさんは書きました:
alphaをtraceして気が付いたのですが、
alphaが100ジャストにならないのと、だんだん薄くなる時に0を過ぎても
止まらない状態が続きます。

なぜこういった状態になるのでしょうか。
alphaを100と0ジャストで止められる方法とかはありますでしょうか?

MovieClip._alphaの最小値を固定する処理を加えると、こんな感じでしょう。
onClipEvent (load) {
    this._x = _root.StageX-(_root.StageMargin)/5;
    this._alpha = 0;
    alphaMax = 100;
    ImageMove = 3;
    nX = 399;
}
onClipEvent (enterFrame) {
    if (ImageMove>0) {
        if (ImageMove == 3 || ImageMove == 1) {
            if (Math.abs(nX-this._x)<0.5 && this._alpha>=100) {
                this._x = nX;
                this._alpha = 100;
                ImageMove = 0;
            } else {
                this._x += (nX-this._x)/5;
                nAlpha = (alphaMAX-this._alpha)/10;
                if (nAlpha>100/256) {
                    this._alpha += nAlpha;
                } else {
                    this._alpha += 100/256;
                }
            }
        } else if (ImageMove == 2) {
            if (this._alpha<=0) {
                this._alpha = 0;
                ImageMove = 0;
            } else {
                this._alpha -= (alphaMAX)/5;
            }
        }
        trace("Image_01M alpha = "+this._alpha);
    }
}

引用:
サンプルを制作してみました。
http://www.tigermobil.com/test.zip


----------------
 

森 巧尚
Åê¹ÆNo.8483
投稿日時: 2004-6-21 17:18
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
引用:

takayasuさんは書きました:
alphaが100ジャストにならないのと、だんだん薄くなる時に0を過ぎても
止まらない状態が続きます。
なぜこういった状態になるのでしょうか。

takayasuさんは、ご自分でImageMoveという変数で01や02の状態を切り替えておられますよね。それはなぜですか?
01のときが表示されるとき、02のときが消えていくときですよね。
onClipEvent (load) {
  this._x = -this._width;
  this._alpha = 0;
  alphaMax = 100;
}
onClipEvent (enterFrame) {
  if (ImageMove == 01) {
    this._x += (399 - this._x) / 5;
    this._alpha += (alphaMAX - this._alpha) / 10;
  }
  if (ImageMove == 02) {
    this._alpha -= (alphaMAX) / 5;
  }
  trace("Image_02M alpha = " + this._alpha);
}

例えば、02のときはalphaの値を引き算していますよね。alphaMAXには100が入っているので、100を5で割ると20。毎回alphaの値が20ずつ減っていくわけですから、それを延々と繰り返せばマイナスの値になっていくのは当然です。
引用:

alphaを100と0ジャストで止められる方法とかはありますでしょうか?

例えば、02の状態のとき、今は無条件にalphaの値を減らしているので、延々と減り続けていくわけですが、ここでifで条件分岐をすればいいのです。alphaの値が0より小さかったら、0ジャストにして止めればいいわけです。ImageMoveの値が01の時は増加、02のときは減少していくわけですから、それ以外の値にすればどちらの処理も行われません。その値は、それはtakayasuさんが決めればいいことですね。


----------------
森 巧尚
http://www.ymori.com

takayasu
Åê¹ÆNo.8482
投稿日時: 2004-6-21 16:33
新米
居住地:
投稿: 16
使用環境:
MacOSX10.3.5.
FlashMX2004
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
alphaをtraceして気が付いたのですが、
alphaが100ジャストにならないのと、だんだん薄くなる時に0を過ぎても
止まらない状態が続きます。

なぜこういった状態になるのでしょうか。
alphaを100と0ジャストで止められる方法とかはありますでしょうか?


サンプルを制作してみました。
http://www.tigermobil.com/test.zip
takayasu
Åê¹ÆNo.8399
投稿日時: 2004-6-17 3:22
新米
居住地:
投稿: 16
使用環境:
MacOSX10.3.5.
FlashMX2004
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
森 巧尚さん。

レスありがとうございます。

引用:

同じ処理をしているので同じスピードで移動するはずですよ。


なっておりました。。。


森さんの著書も購入して勉強させていただきますです。。。

森 巧尚
Åê¹ÆNo.8397
投稿日時: 2004-6-17 1:49
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
引用:

takayasuさんは書きました:
Bt_01Mを"Click"時にImage_1Mの動きがやはり倍速になってしまいます。

「Bt_01Mをクリックしたとき」は、「いつ」のスピードと比べて倍速になっていますか?

以前の間違いならHomeTextとHomeText02の変数が違うので「倍速になる」のは当然なのですが、同じImageMoveという1つの変数を使っているのであれば、
load直後は、ImageMoveが03になっていて

if (ImageMove == 03) {
    this._x += (399 - this._x) / 5;
    this._alpha += (aMAX - this._alpha) / 10;
}

だけが実行されますが、Bt_01MをクリックしたときにImageMoveが01になるので、

if (ImageMove == 01) {
    this._x += (399 - this._x) / 5;
    this._alpha += (aMAX - this._alpha) / 10;
}

だけしか実行されなくなるので、同じ処理をしているので同じスピードで移動するはずですよ。


----------------
森 巧尚
http://www.ymori.com

takayasu
Åê¹ÆNo.8396
投稿日時: 2004-6-17 1:03
新米
居住地:
投稿: 16
使用環境:
MacOSX10.3.5.
FlashMX2004
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
森 巧尚さん

まだまだ私の勉強不足や説明不足や記述ミスがあったりする中で
スクリプト解読及び再スクリプト考案していただきありがとうございます。



引用:

これが一番の原因ですね。見えている問題点がぜんぜん違っていた・・・


スミマセンです。。。



引用:

スクリプトを記述してやってみたら、説明されている通りの動きをしますよ????


Bt_01Mを"Click"時にImage_1Mの動きがやはり倍速になってしまいます。



引用:

この「繰り返したとき!」に「見え方が急に見えたり、移動しているように見えなかったりすることがある」などということではないでしょうか???


これもありましたが森さんのご提案により解決です。ありがとうございました。



以下訂正です。

スミマセンです。。。
Bt_1M.onRelease = function() {
Image_1M._x = _root.StageX + Image_2M._width;
...は
Bt_1M.onRelease = function() {
Image_1M._x = _root.StageX + Image_1M._width;
...です。

引用:

それから、
「//Bt_1MのMovieClipに記述」は「//Image_1MのMovieClipに記述」
「//Bt_2MのMovieClipに記述」は「//Image_2MのMovieClipに記述」
の間違いではないですか?


の間違いです。。。

森 巧尚
Åê¹ÆNo.8395
投稿日時: 2004-6-17 0:25
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
引用:

takayasuさんは書きました:
また質問の際に記入した
onClipEvent (enterFrame) {
if(HomeText == 03){
...は

onClipEvent (enterFrame) {
if(HomeText02 == 03){
の記入ミスでした。。。

これが一番の原因ですね。見えている問題点がぜんぜん違っていた・・・

まずこれで一つは原因が解決できたのですが、これであとは何が問題なのでしょうか??? スクリプトを記述してやってみたら、説明されている通りの動きをしますよ????

少し気になったのは
引用:
という事をボタンを押す事によって繰り返すといった感じです。

というところですが、この「繰り返したとき!」に「見え方が急に見えたり、移動しているように見えなかったりすることがある」などということではないでしょうか???

もしそれだとすると「ボタンを押したとき」にImage_1MやImage_2Mの「初期値」が初回(load直後)のものとは違うために状況が変わっているということではありませんか?

だとするとボタンのスクリプトをこうすればいいのでは?
Bt_1M.onRelease = function() {
    Image_1M._x = _root.StageX + Image_2M._width;
    Image_1M.ImageMove = 01;
    Image_2M.ImageMove = 02;
    Image_1M._alpha = 0;
    Image_1M.aMax = 100;
};
Bt_2M.onRelease = function() {
    Image_2M._x = _root.StageX + Image_2M._width;
    Image_2M.ImageMove = 01;
    Image_1M.ImageMove = 02;
    Image_2M._alpha = 0;
    Image_2M.aMax = 100;
};


それから、
「//Bt_1MのMovieClipに記述」は「//Image_1MのMovieClipに記述」
「//Bt_2MのMovieClipに記述」は「//Image_2MのMovieClipに記述」
の間違いではないですか?


----------------
森 巧尚
http://www.ymori.com

takayasu
Åê¹ÆNo.8394
投稿日時: 2004-6-17 0:02
新米
居住地:
投稿: 16
使用環境:
MacOSX10.3.5.
FlashMX2004
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
初めまして、takayasuと申します。
野中さんのwebや本も2冊購入し勉強させていただいております。

まだまだ私の勉強不足や説明不足があったりする中で
スクリプト解読及び再スクリプト考案していただきありがとうございます。



まず、やろうとしている動きですが
---
・ボタンが2つあります。(Bt_1M), (Bt_2M),とします。
((MovieCilpにシンボル化しています))
<読み込まれると同時にウインドウ内に表示されます>

・画像が2つあります。(Image_1M), (Image_2M),とします。
((MovieCilpにシンボル化して基準点は左上に設定))
--
--
<ボタン(Bt_1M)は画像の(Image_1M),に"項目1"として互いに密接に関係あるものです。>
<ボタン(Bt_2M)は画像の(Image_2M),に"項目2"として互いに密接に関係あるものです。>
--
---

/////
読み込まれたら画像のひとつ(Image_1M)は
「Stageの右端からStageの左端から399まで進み、止まります。と同時にアルファも0%から100%になります。」
この時、もう一つの画像(Image_2M)のthis._xはウインドウサイズを変えても見えないように
this._x = -this._width;
としています。

ボタン(Bt_2M)を"Click"すると
画像(Image_1M)は
_alphaが、だんだんと0%になります。
画像(Image_2M)は
「Stageの右端に瞬時に飛び、そこからStageの左端から399まで進み、止まります。と同時にアルファも0%から100%になります。」

そこからボタン(BT_1M)を"Click"すると
画像(Image_2M)は
_alphaが、だんだんと0%になります。
画像(Image_1M)は
「Stageの右端に瞬時に飛び、そこからStageの左端から399まで進み、止まります。と同時にアルファも0%から100%になります。」
/////
という事をボタンを押す事によって繰り返すといった感じです。





スクリプトはとりあえず下記のように記述しました。

//別レイヤーに記述
Bt_1M.onRelease = function() {
Image_1M._x = _root.StageX + Image_2M._width;
Image_1M.ImageMove = 01;
Image_2M.ImageMove = 02;
};

Bt_2M.onRelease = function() {
Image_2M._x = _root.StageX + Image_2M._width;
Image_2M.ImageMove = 01;
Image_1M.ImageMove = 02;
};

//Bt_1MのMovieClipに記述
onClipEvent (load) {
this._x = _root.StageX-(_root.StageMargin)/5;
this._alpha = 0;
aMax = 100;
ImageMove = 03;
}
onClipEvent (enterFrame) {
if(ImageMove == 03){
this._x += (399-this._x)/5;
this._alpha += (aMAX - this._alpha)/10;
}
if (ImageMove == 01) {
this._x += (399-this._x)/5;
this._alpha += (aMAX - this._alpha)/10;
}
if (ImageMove == 02) {
this._alpha -= (aMAX)/5;
}
}

//Bt_2MのMovieClipに記述
onClipEvent (load) {
this._x = -this._width;
this._alpha = 0;
aMax = 100;
}

onClipEvent (enterFrame) {
if (ImageMove == 01) {
this._x += (399-this._x)/5;
this._alpha += (aMAX - this._alpha)/10;
}
if (ImageMove == 02) {
this._alpha -= (aMAX)/5;
}
}












また質問の際に記入した
onClipEvent (enterFrame) {
if(HomeText == 03){
...は

onClipEvent (enterFrame) {
if(HomeText02 == 03){
の記入ミスでした。。。
森 巧尚
Åê¹ÆNo.8393
投稿日時: 2004-6-16 23:44
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: onClipEvent (enterFrame) の(load)時の設定を停止する。
私が前に言った
引用:
onClipEvent (load)で最初に、HomeText = nLoadと代入していて(ただし、このnLoadには値が入っていないので<空の文字列>が代入されることになります。HomeText = nLoadって何をしているのでしょう?)その後、HomeText02の値が 01の場合は、onClipEvent (enterFrame)で、毎回、if (HomeText == nLoad)とif (HomeText02 == 01)の両方がtrueになるわけですから、両方実行されて、倍のスピードになります。

はご理解戴けてましたでしょうか?野中さんも同じように指摘されています。

引用:

別の所に設定した条件によって
"HomeText02 == 01"
"HomeText02 == 02"
と振り分けるようにしています。

この01,02,については「今、01ですよ」「今は02ですよ」と振り分けて認識させる為の数字です。

ですので読み込んだ時は「03ですよ。」と定義しているつもりだったりしたのですが数字とかにしない方が良いのでしょうか?


だから、同じ原因ですよ。今の状況を示すHomeTextとHomeText02をどうして2つ用意する必要があるのですか?今の状況が2つになってしまいますよ。
「今、01ですよ」「今は02ですよ」と言っておきながら、同時に「今は03でもありますよ」と言っているわけです。
だから、「if(HomeText == 03){」を実行したあとに、「if(HomeText02 == 01){」の内容も実行されて、内容が同じですから、2回実行されることになって、倍のスピードになっているわけです。
つまり、1つの変数で状況を表すようにしてはどうですか?
HomeTextを使うのをやめて、HomeText02だけ使うようにしたらいいように思いますよ。

考え方(仕様と設計)の詳細をもう少し説明していただけないと具体的な解答は難しいですよ。
引用:
やろうとしていることは、MovieClipが読み込まれた時に
Stageの右端からStageMargin(ここではステージ左端から399と設定)
アルファを変えながら進むというものです。

というだけの説明だけでは足りないのですよ。この説明でおっしゃってることはすでに今のスクリプトで実現できていますから、できてますよ、としか言いようないですら。


----------------
森 巧尚
http://www.ymori.com

(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

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