D0503221 揺れながら拡大縮小するスクリプトの応用で…
Name 阿部
Date 2005年03月22日 (火) 08時32分
Message おはようございます。
3月15日の「揺れながら拡大縮小するスクリプトが動きません」のファイルサンプルをさらに
違った動きをしてみようと思いました。
縦に動く事は出来ました。
しかし、最初は縦に揺れて、ボタンを押すと揺れながら広大するのは失敗しました。各MCにonClipEvent (load) を入れていたのですが、
片方だけ揺れて、もう1つが揺れません。
お忙しいところをすみませんが、御指導をお願いします。
Response 01
2005年03月22日 (火) 12時30分> 憲ちゃん 
こんにちわ、阿部さん♪

肝心な内容が抜けていますので、なさりたいことが具体的にイメージできませんm(_ _)m(^^;

最初”何をどうしたときに、テキストがどの場所で”縦にゆれて、
ボタンを押すと”どこ(上下?・左右?)に向かって”揺れながら拡大させようとしたとき、
”どのようになった(揺れないだけ?)から”失敗ということになったのでしょう?
元の状態に戻すときはどうしますか?

そして、各MCに「onClipEvent(load)」に”どんなスクリプト”を入れ、
「enterFrame」内やボタンにどんなスクリプトを記載されましたか?
Response 02
2005年03月22日 (火) 14時45分> 阿部 
すみません。説明が足らなくて。
最初は文字が上から下へ落ちる感じで揺れます。
(3月15日の「テキストが動きません」のファイルサンプルでは最初は左から右へ揺れますね)
ボタンを押すと(押すというよりロールオーバーです)広大するのというのは3月18日の「mcが揺れておおきくなったり、小さくなるに
は..?」と同じです。
大元に配置したMC1のスクリプトは縦に揺れるように
onClipEvent (load) {
x_fin = -10;
}
onClipEvent (enterFrame) {
x = mov._y;
dx = (dx+(x_fin-x)/acc)/smorz;
x += dx;
mov._y = x;
}
_xを_yに書き換えただけです。
MC1の中、つまり、入れ子にMC2を作成して
onClipEvent (load) {
   this._xscale = this._yscale = 0;
   function sMove(mScale,acc,conv) {
     theScale = theScale*acc+(mScale-this._yscale)*conv;
     this._xscale = this._yscale += theScale;
   }
 }
 onClipEvent (enterFrame) {
   if (this.hitTest(_root._xmouse,_root._ymouse,1)) {
      sMove(130,0.8,0.2);
   } else {
     sMove(100,0.8,0.2);
   }
 }
と記述しました。
失敗したファイルは捨ててしまったのでどんな動きだったのか忘れましたが、どちらかが動かなかったと思います。
宜しくお願いします。
Response 03
2005年03月22日 (火) 23時39分> 憲ちゃん 
ここでは言葉が頼りですから、この場合”ボタンを押す”と”ロールオーバー”とでは
大きな違いで次の展開イメージが全く別のものになります(^^;
”どちらかが動かなかった”の意味も憲ちゃんにとっては依然ナゾですが??

スクリプトの記載について文法等にミスはないようですので、一応何らかの動作はしますが・・・
合わせ技に使う前回の拡大縮小は、ボタンとは関係なく、
「ムービークリップに乗ったとき」の動作を規定していますから、
”ボタンにロールオーバー”しても動作するはずはありませんね!!
したがって「文字」の上にマウスを持っていくことで、揺れながら拡大することになります。
以下のサンプルの左側が、お示しいただいたスクリプトの動作状態です。

そして…おっしゃるような内容で、”ボタンにロールオーバー”したとき「文字MC」を拡大し、
”ロールアウト”したときに元の大きさに縮小させようとするなら、
ボタンと「文字MC」を関連付けることを考えてください。

関連付けるための方法にも色々ありますが、例えば「zoom」という変数を元のMCに定義するとします。

 onClipEvent (load) {
   y_fin = 180;
   zoom = false;←変数zoomを定義(使えるように記載)し、それを「偽:OFF」に設定。
 }
 onClipEvent (enterFrame) {
   ・・・ここは上下移動のスクリプト・・・
 }

その中の「文字MC(インスタンス名:mov)」のクリップアクションで、

 onClipEvent (load) {
   this._xscale = this._yscale = 0;
   function sMove(mScale,acc,conv) {
     theScale = theScale*acc+(mScale-this._yscale)*conv;
     this._xscale = this._yscale += theScale;
   }
 }
 onClipEvent (enterFrame) {
   if (_parent.zoom) { ひとつ上のMC階層(_parent)にある変数zoomが「真:ON」なら※※
     sMove(150,0.8,0.2);←揺れながら拡大
   } else { そうでない(「偽:OFF」)なら
     sMove(100,0.8,0.2);←揺れながら縮小
   }
 }

※ここの条件文の記載は、(_parent.zoom == true)の省略形です。
最初「zoom = false」に設定していますから、条件を満たさず大きさ「100」のままです。
※この部分、前回は「if (this.hitTest(_root._xmouse,_root._ymouse,1)) { 」だったので、
「マウスが自分自身に乗ったとき」に拡大したのでした。

そして「zoom」について、ボタンのボタンアクションで、

 on (press) {
   if (y_fin == 0) {
   ・・・縦移動の関係の設定・・・
   }
 }           ※以下を追記
 on (rollOver) { ボタンにマウスが乗った瞬間
   zoom = true;←変数zoomを「真:ON」に設定(上記の条件文を満たし拡大開始)
 }
 on (rollOut) { 乗っていたマウスがボタンの外に出た瞬間
   zoom = false;←変数zoomを「偽:OFF」に設定(上記の条件文を満たさず縮小開始)
 }


zoom6.fla

右側のサンプルがそのスクリプトの結果です。
Response 04
2005年03月23日 (水) 08時27分> 阿部 
憲ちゃん、おはようございます。
タイムラインの1フレームに変数を入れてMCの中に_root.変数を入れるのでしたか。あとはfalseは予想出来たので同じように作ってありましたがそれだけでは動かなかったんですね。もうちょいだったな〜
何度もサンプルファイルを作って頂いて本当に有り難うございました。
Response 05
2005年03月23日 (水) 09時08分> 阿部 
憲ちゃん、何度もすみません。こちらの説明不足で申し訳ございません。
サンプルファイルを解析してみましたら最初、下へ落ちるように揺れる時、同時に広大してしまいますね。最初は広大せず、そのまま落ちるように揺れます。そしてロールオーバーしますと広大します。
やはり、onClipEvent (load)を2つ使うと一緒に動いてしまいますね?どうすれば最初広大せず、落ちるように揺れればよいでしょうか?本当に申し訳ございませんが、宜しくお願いします。
Response 06
2005年03月23日 (水) 16時12分> 憲ちゃん 
> onClipEvent (load)を2つ使うと一緒に動いてしまいますね?
全くの”あてずっぽう”でおっしゃておられるのではないかと思います(笑)

このサイトの目的は、トップページの最初に掲げていますように・・
”FLASHを自力で考え作成しようという意欲ある方を応援するのが目的”です(^^;
提供されたスクリプトをただ移植するだけでなく、意味を理解されてご自分で応用するのに、
その命題は大変良い材料かと思います(*^-^*

決して意地悪で教えないのではありません(笑)それほどむつかしいことではないので・・・
ご自分のために是非この命題をご自分で解決してみてください。

スクリプトの単語の狭い意味(例えば _xscaleはMCの横幅サイズ(%))だけでなく、
1行1行の記載が個々のMCなどに対してどのような作用を及ぼしているかを実際に思い描きながら、
全体を理解してください。これが”ファイルを解析する”ということです(^^;
スクリプトを解析するうえで基本的なことは、
アクションスクリプト講座の第1回〜第4回に記載していますので、
今後のためにもご一読されることをお勧めします♪
きっとスクリプトに対する世界観が変わり、もやもやした霧が晴れたように身近に感じられるように
なられると思います(^^g/~~
Response 07
2005年03月23日 (水) 17時11分> 阿部 
憲ちゃん、分かりました。自力で勉強してみます。
少しはスクリプト知識がアップしたいもんですからね。
どうもありがとうございました。
Response 08
2005年03月23日 (水) 17時42分> 阿部 
zoom = false;←変数zoomを定義(使えるように記載)し、それを「偽:OFF」に設定。
  ↑
最初、広大をしないスクリプトですよね。なのに広大してしまいます。
試しにzoom = false;を削除しても同じ動きでした。
私の知る限りですが、最初、広大しないようにzoom = false;を付け
ればそれで良いはずなんですが..?違うでしょうか?
ヒントをお願いします。
Response 09
2005年03月24日 (木) 02時28分> 憲ちゃん 
憲ちゃんは、ヒントも含めいつでも慎重に言葉を選んでお返事させていただいているつもりです。

> 少しはスクリプト知識がアップしたいもんですからね。

知識は参考書をみれば書いていますから、必要最低限で十分です。
阿部さんに応用できる「知恵」を身に付けていただくために、
ここは憲ちゃんも我慢のしどころです(*^-^;
------------------------------------------
答えは・・・

 onClipEvent (load) {
   this._xscale = this._yscale = 0;←これを削除
   function sMove(mScale,acc,conv) {
     theScale = theScale*acc+(mScale-this._yscale)*conv;
     this._xscale = this._yscale += theScale;
   }
 }

(2005.04.07追記)

このページの先頭へ