- ベストアンサー
enterframeでのムービー制御とテキスト変数の代入(続き)
先に教えていただいた感じでみようみまねで途中まで作成しましたが また行き詰まりを感じたので質問させてください。 ■(四角)の移動と自動的にトピックスを流す事は出来るようになったのですが 1 | 2 | 3 | 4 | 5 | までのボタンをクリックした時にボタンの動きがブレます。 これはどのようにしたら宜しいのでしょうか。 まねしてるサイト http://www.septeni.co.jp/ ↑のNEWS TOPICS部分
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> クリックしても"sikaku"は戻ってきません。 本当に何処へ行ってしまったのでしょうか… という呑気なことを言ってる場合ではないですね。 スクリプトを見てわかるとおり,「sikaku」の制御は,勝手に作った「counter」ムービークリップの2フレーム目のスクリプトにしかでてきません。 onEnterFrame = function () { _root.sikaku._x += (_root["btn"+I]._x-_root.sikaku._x)*0.5;}; ここの部分だけです。 ボタンにも「sikaku」の制御は全く入れていません。 ボタンをクリックした場合,「counter」を2フレームにgotoすることで間接的に制御しています。 だから間違っているのは上のスクリプト部分もしくはその数行前の変数Iの部分となります。 どこか違っているところはないでしょうか? これで動くのですが。 念のため,ムービークリップの2フレーム目のフレームアクション I++; if (I>=6) { I = 1; } onEnterFrame = function () { _root.sikaku._x += (_root["btn"+I]._x-_root.sikaku._x)*0.5;}; _root.TEXTBAR.gotoAndPlay((I*50)-44); ボタンの中のアクション(これはボタン5のもの) on (press) { _root.TEXTBAR.gotoAndPlay(206); _root.counter.I = 4; tellTarget ("_root.counter") { gotoAndPlay(2); } } これだけです。 ボタンには「sikaku」に関するスクリプトは全く入っていません。
その他の回答 (2)
>> 1:TEXT01はインしてきますがTEXT02以降は初期位置で待機… フレームアクション _root.TEXTBAR.gotoAndPlay((I*50)-44); を付け足されたのですね。 _root.TEXTBAR.gotoAndPlay((I*50)+56); ではうまく行きませんか。 最初-44にしてやってみたのですが,どうも1ずれるので+56にしたのです。 -44でも「TEXT02以降は初期位置で待機」現象は起こらないので問題点とはずれているかもしれません。 これは下の「>> 2:」以降で関係なくなるのでどちらでも良いです。 >> 2:下記がぶれるという状態になります。 "ぶれ"の意味がわかりました。 場所,位置ではなくて時間的にぶれるということだったのですね。 インターバルの初期化で,スクリプトを作成しようかと思いましたが, いい方法が思い浮かびません。 ムービークリップで他のムービークリップを制御する方法は考たので,その方法を書いておきます。 なるべく元のスクリプトをそのまま使うようにはしています。 「レイヤー8」の1フレーム目のフレームアクションをまず消します。 ~~ムービー制御MCの作成~~ (レイヤー8の) 見えない場所(画面外)に任意の形・色・大きさのムービークリップを作ります。 そのムービークリップのインスタンス名を仮に「counter」としておきます。 フレームレートが12で待ち時間が4500であることから, 「counter」のフレームを,12×4.5+1=55,55フレームにします。 1フレーム目にフレームアクションとして I = 0; を書きます。 2フレーム目にフレームアクションとして I++; if (I>=6) { I = 1; } onEnterFrame = function () { _root.sikaku._x += (_root["btn"+I]._x-_root.sikaku._x)*0.5;}; _root.TEXTBAR.gotoAndPlay((I*50)-44); を書きます。 55フレーム目に gotoAndPlay(2); を書きます。 ~~各ボタンのスクリプト~~ ---ボタン1--- on (press) { _root.TEXTBAR.gotoAndPlay(6); _root.counter.I = 0; tellTarget ("_root.counter") { gotoAndPlay(2); } } ---ボタン2--- on (press) { _root.TEXTBAR.gotoAndPlay(56); _root.counter.I = 1; tellTarget ("_root.counter") { gotoAndPlay(2); } } これをボタン5まで書いて行きます。 ボタンによって違うところは2行目(6)や(56)の数値と 3行目_root.counter.I = ○; の○の部分の2箇所です。 ○にはボタン番号-1の数値を入れます。 これで,「counter」によって他のMCが制御できると思います。 時間的ぶれも起こりません。 インターバルを初期化するというより, ストップウォッチを準備して,そのストップウォッチのタイマーが, 45000になったとき,I++などのスクリプトを実行させるという スクリプトにすると,うまくいくかもしれませんが, 良い書き方が思い浮かびません。 スクリプトだけで他のムービークリップを制御する方法は, 他の方の回答がもしあれば,そちらを参考にしてくださった方が良いかもしれません。
FLAファイルとTETファイルを拝見させていただきました。 他の人にも見やすくて良くできていると思います。 ご質問されているのは,動き全体ではなくて, ボタン(sikaku?)の動きのことですよね。 パブリッシュしてみたところ, ブレるという現象がみあたらないのですが, どんなふうにブレるのでしょうか。 sikakuの縦位置(_y)がbtn1~5より少し上にズレているのはわかるのですが, このことでしょうか? このことであれば, スクリプトには横軸(_x)しか使っていないため, sikakuの最初の位置を少し下にズラすとbtn1~5にちょうどかぶさるようになると思います。 でもこのことではないのですよね。 ブレの意味がわかりませんので,補足説明おねがいします。 全然違う件ですが,細かい点を少し… ◎btn4とbtn5のスクリプトの最初の行 on (release) ではなくてon (press)だと思います。 btn1~3はon (press)になっています。 ◎各btnのスクリプト フレームの中に書かれている変数Iを btn2であればI=2に,btn3であればI=3にそれぞれセットしなおすスクリプトを入れておくと, クリックした次のsikakuが次のボタンの上にくると思います。 on (press) { _root.TEXTBAR.gotoAndPlay(○○); I = ○; } ◎フレームのスクリプト onEnterFrameの次に _root.TEXTBAR.gotoAndPlay((I*50)+6); という行をつけたせば,TEXTBARがsikakuと同期して動きます。 (タイミングが同期するだけで速さは同期しませんが。) ◎フレームのスクリプト setInterval(COUNT, 500); 500はもう少し上げて,3000~5000くらいにすると, 見本(?)に近づきます。 という感のを感じました。 ブレに関しては何も言えない状態です。
補足
細かい部分も指摘していただきましてありがとうございました! まだまだはじめたばかりですのでどんな点でも指摘していただけると幸いです。 補足させていただきます。 教えていただいた感じで修正してみました。 ---------------------------------------- ▼フレームのAS I = 1; //カウント用変数 function COUNT() { onEnterFrame=function(){ _root.TEXTBAR.gotoAndPlay((I*50)-44); //_root.TEXTBAR.gotoAndPlay((I*50)+6); //教えていただいた上記ですがIが1の時TEXT1が読み込まれないと思い↑に変更しました。 //(ムービークリップ"bar_mov"の7フレーム7がずれていたので6へ修正) sikaku._x +=(this["btn"+I]._x - sikaku._x)*0.5; } I++; if (I>=6) { I = 1; } } //一定時間で関数呼び出し setInterval(COUNT,4500) ---------------------------------------- ▼各透明btnのAS(I=2の場合↓) on (press) { onEnterFrame = function(){ sikaku._x +=(btn2._x - sikaku._x)*0.5; _root.TEXTBAR.gotoAndPlay(56); I = 2; } } ---------------------------------------- 関数の設定とかがまだ完全に把握しきれていませんので 書き方が間違っていましたらご指摘お願い致します。 現在の問題点。 1:TEXT01はインしてきますがTEXT02以降は初期位置で待機してしまい それ以降はインしてこない。 クリックしても1以外はインしてきません。 1 | 2 | 3 | ■ | 5 この状態で"1"をクリックするとTEXT04がインしてくる。 2:下記がぶれるという状態になります。 1 | 2 | ■ | 4 | 5 この状態で"5"をクリックするとします。 そうしますと↓のような状態になりますが 1 | 2 | 3 | 4 | ■ 通常各ボタンでの■の待機時間が10とした場合、 "5"に待機する時間が短く(10以下)すぐに ■ | 2 | 3 | 4 | 5 になってしまいます。 "3"に待機していた時間が10に近いほどクリックした場所の待機時間が短くなる感じです。 クリックしたらセットインターバルがリセットされるという設定は無いでしょうか?
補足
補足ありがとう御座いました! 下記の補足でクリックした時のインのタイミングと 同じタイミングでインすることはできるようになりました。 が、、 補足いただいたスクリプトですと今度は"sikaku"の制御ができず パブリッシュプレビューすると"sikaku"がずっと右側に移動してしまい 画面から見えなくなってしまう状態です。 クリックしても"sikaku"は戻ってきません。 "sikaku"を制御するにはどうしたらよいのでしょうか。。