- ベストアンサー
メニュースクロール
質問です。 メニューがスクロールするFLASHを作りたいのですが うまくゆきません。 ボタンにポインタを置いた時にスクロールさせるところまでは出来たのですがポインタを離して放置しておくと、勝手にスクロールしてくれるようにしたいのです。 setIntervalがヒントだというトコロまではなんとか漕ぎ着けたのですが actionscriptはほとんど分からないため、困っています。 どうかご教授のほどお願いいたします。 環境はWindows2000にてFLASH8professionalを使用しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
スクリプト自体より, Flash 作成方法の説明の方が書きにくく, また,理解しにくいのではないかと思いますが, 一応回答させてもらうとして。 おそらく, 作られているものと構造が違うと思うので, (ボタンにポインタを置いた時にスクロールさせるところまでは出来たのでしたら簡単なはずです。) 新規ドキュメントを作成してください。 新規ドキュメントの作成で, 矩形ツールを選択し, ステージ上に,横200px × 縦100px くらいの(大きさは適当で良いです), 周りの線付き長方形のシェイプ(図形)を描いてください。 塗りの色も線の色も何色でも良いです。 □□□□□□□□□□□□□□□□ □□□□□□□■■■■■■■□□ □□□□□□□■回回回回回■□□ □□□□□□□■回回回回回■□□ □□□□□□□■■■■■■■□□ □□□□□□□□□□□□□□□□ その線付き塗りの長方形をコピペで, 縦向きにキッチリ4つ並べてください。 □□□□□□□□□□□□□□□□ □□□□□□□■■■■■■■□□ □□□□□□□■回回回回回■□□ □□□□□□□■回回回回回■□□ □□□□□□□■■■■■■■□□ □□□□□□□■回回回回回■□□ □□□□□□□■回回回回回■□□ □□□□□□□■■■■■■■□□ □□□□□□□■回回回回回■□□ □□□□□□□■回回回回回■□□ □□□□□□□■■■■■■■□□ □□□□□□□■回回回回回■□□ □□□□□□□■回回回回回■□□ □□□□□□□■■■■■■■□□ □□□□□□□□□□□□□□□□ 4色の塗りの色は違う方がわかりやすいので, 何か違う色に塗ってください。 □□□□□□□□□□□□□□□□ □□□□□□□■■■■■■■□□ □□□□□□□■回回回回回■□□ □□□□□□□■回回回回回■□□ □□□□□□□■■■■■■■□□ □□□□□□□■回□回□回■□□ □□□□□□□■□回□回□■□□ □□□□□□□■■■■■■■□□ □□□□□□□■回■回■回■□□ □□□□□□□■■回■回回■□□ □□□□□□□■■■■■■■□□ □□□□□□□■□□□□□■□□ □□□□□□□■□□□□□■□□ □□□□□□□■■■■■■■□□ □□□□□□□□□□□□□□□□ その長方形の集合体を全て選択し, 「修正」→「シンボルに変換」 でムービークリップに変換します。 そして,ステージ上のそのムービークリップを選択して, 下のプロパティインスペクタで慰安スタンス名を付けます。 この説明では, 「slideMC」 というインスタンス名にしておきます。 そして,一番最初に描いた,一番上の長方形が, ちょうど最初に表示してほしい場所に来るように, 「slideMC」 を移動させてください。 新規でレイヤーを追加して, そのレイヤーのキーフレームに,次のように書けば, 書かれているURLのような動きをするムービークリップが完成します。 -------------------------------------- //スピードの設定(可変) var spd = 3/10; // // フラグの初期値を設定 var flg = 0; // // 各変数の初期値を代入(目標座標を記録) var slideY0 = slideMC._y; var slideY1 = slideMC._y-(slideMC._height/4); var slideY2 = slideMC._y-(2*slideMC._height/4); var slideY3 = slideMC._y-(3*slideMC._height/4); // // 1フレーム進む時間ごとに毎回実行 _root.slideMC.onEnterFrame = function() { // slideMC の y座標を slideY? に近づける this._y += (_root["slideY"+_root.flg]-this._y)*_root.spd; }; // // ユーザー定義関数 slideMove の定義 function slideMove() { // flg の 値が 3 より小さければ if (_root.flg<3) { // flg の値に 1 を加算 _root.flg++; } else { // それ以外の場合は flg を 0 にする。 _root.flg = 0; } } // // 4000ミリ秒(4秒)ごとに slideMove を実行 myID = setInterval(slideMove, 4000); -------------------------------------- ご質問で書かれているように, setInterval関数 を使ってみました。 各ボタンなのですが, ボタンで,「slideMC」 を移動させようとするのではなく, ボタンで _root の 変数flg(フラグの意味) の値を変えてください。 上から3番目のものを正面に表示させたいのでしたら, そのボタンに書くスクリプトは, on (release) { _root.flg = 2; } となります。 flg の値は 一応上の場合, 0 から始めていますから, 3番目は 0.1.2 で 2 になります。 1つの長方形は同じ大きさの絵でも良いですし,写真でも良いです。 また,4つに限るわけではありません。 4以外の場合は, // 各変数の初期値を代入(目標座標を記録) var slideY0 = slideMC._y; var slideY1 = slideMC._y-(slideMC._height/4); var slideY2 = slideMC._y-(2*slideMC._height/4); var slideY3 = slideMC._y-(3*slideMC._height/4); このあたりを修正してください。
お礼
大変丁寧な回答を有り難う御座います。 フラグ設定をよく理解していなかったので これを機会に基礎からキッチリと勉強しようと思います。 お忙しい中丁寧な回答誠に有り難う御座いました。