| Name |
ルイ
|
| Date |
2003年06月02日 (月) 16時50分 |
| Message |
いつもお世話になってます!こんにちわ憲さん。
テキスト(.txt)を読み込んで、クリックでアップダウンするところまではできたのですが、onイベントにrolloverとしても、カーソルがボタンに乗っている間スクロールがつづかないのですが....これではダメということですよね?
たとえば日記など、.txtデータを読み込んで、カーソルがスクロールボタンに乗っている間、スクロールさせつづけたいときはどうしたらいいでしょうか?
前の記事のスライダー付きのテキストスクロールを参考にはさせていただいたのですが、スクリプトの意図するところが見ただけで分からないんです。
まだまだ、初心者なのでアドバイスお願いします。できれば簡単な方法を教えて貰えませんか??お願いします! |
Response
01
|
| 2003年06月03日
(火) 15時53分> 憲ちゃん
|
|
ルイさん、こんにちは(^^)
No.64のテキストスクロールの説明は・・・
functionで定義した(決めた)「mesScroll(num)」の動きを、
ボタンイベントが何であれ、1回づつしか実行させない仕組みになっているので、
スクロールを連続させるには、連続して「mesScroll(num)」を実行させるようにすることが必要です。
”連続して”というのは、一定の時間単位で同じことを繰り返すことをいいますが、
この時間の最小単位は「フレームレート(1/12秒=ひとつのフレームを再生し通過する時間)」です。
1フレームに実行するアクションを記載して、2フレームに「gotoAndPlay(1)」というように、
1〜2フレームのループをつくると、1/12秒ごとにアクションが実行されます。
3フレームに「gotoAndPlay(1)」を書いて1〜3フレームのループにすると1/6秒ごと、
13フレームに書けば1秒ごとに、1フレームのアクションの実行を繰り返します。
「No.64のテキストスクロール」で使用しているサンプル「scroll_txt2.fla」では、
説明のほかに、ボタンをプレスしたら、連続スクロールするようになっています。
仕組みは、ボタンをさらにムービークリップの中に入れて、

その中は図のような構成になっています。
下のボタンのボタンアクションは、
on(release){
gotoAndStop(2);
}
on(press){
gotoAndPlay(2);
}
何もしないときは、1フレームで停止していますが、
ボタンがクリック(押されたボタンが離れた瞬間)されると、2フレームに移動して停止。
アクションレイヤーの2フレームにスクロールの実行である「mesScroll(-1);」があるので、
1回だけ実行して停止します。
ボタンがプレスされると・・・
2フレームに移動して進め!ですから、「mesScroll(-1);」を実行してなおフレームを進め、
アクションレイヤーの5フレーム「gotoAndPlay(2);」によって、
再び2フレームに戻って「mesScroll(-1);」を実行し・・・を繰り返します。
この間3フレームありますから、1/12秒×3=1/4秒ごとに連続してスクロールします。
この部分のアクションを・・・
on (rollOver) {
play ();
}
on (rollOut) {
gotoAndStop (1);
}
と書き換えると、マウスオーバーなら(1フレームで停止しているタイムラインを)移動再生。
以後2〜5フレームのループにより1/4秒ごとにスクロール。
マウスから外れたら、1フレームに戻って停止(スクロールが止まる)。
この1/4秒が、ぎこちないときは5フレームの「gotoAndPlay(2)」を3フレームに書くと、
1/12秒ごと、つまり最小単位のフレームレートごとにスクロールします。
以上ですが・・・あとはご参考までに(^^;
「クリップアクション(ムービークリップに直接記載するアクション)」に、
「onClipEvent(enterFrame)」があり、これが「フレームレートごとに繰り返す」という、
ムービークリップのイベント(キッカケ)です。
これを利用すれば、上記のようにボタンをさらにムービークリップでくるまなくても、
もう少し簡単な構造で制作することができます。
さらに中央のスクロールバーもなくせば、スクロールの式自体も簡単になります。
前回の説明同様、「TXTスクロールセット」ムービークリップの中に、
テキストを表示する「ダイナミックテキスト」を配置、テキストの変数も同じ「message」とし、
あとは”上””下”ボタンだけを配置します。
ステージの「TXTスクロールセット」MC(インスタンス)を選択した状態で、
アクションパネルから直接、以下のアクションを記載。
onClipEvent (load) { ←MCが読み込まれたら
loadVariables ("profile3.txt", ""); ←外部テキストの読み込みを開始
num = 0; ←変数num に初期値として「0」を代入
}
onClipEvent (data) { ←(外部テキストのデータ)読み込みが完了したら
function mesScroll (num) { ←「mesScroll (num)」メソッドを以下のように定義(決定)
var nextScroll = message.scroll + num; ←以下は、前回の説明参照
if (nextScroll >= message.maxscroll) { ※ただし直接スクロールのアクションを
message.scroll = message.maxscroll; 書いているのでシンプルです。
} else if (nextScroll <= 0) {
message.scroll = 1;
} else {
message.scroll = nextScroll;
}
}
}
onClipEvent (enterFrame) { ←フレームレートごとに以下の処理を繰り返す。
mesScroll(num); ←(上で定義した)「mesScroll(num)」メソッドを実行
}
クリップイベントの「load」はMCが読み込まれた最初だけの処理で、
「data」も外部テキストのデータの読み込みが完了したときの1回きりの処理。
一番下の「enterFrame」は以後、1/12秒ごとに永久に繰り返し処理を行います。
そこでは、functionで決めたスクロール処理を毎回、実行していますが・・・
当初、変数numの値は「0」で、functionの中の最初の式、
「message.scroollに「0」を加えても「nextScroll」の値が変化しないから、
何度実行してもスクロールは起こりません。
そこでこの変数numの値をボタンから指定することで、動かそうというわけです。
このMCの中の”下ボタン”のボタンアクション・・・
on (rollOver) { ←マウスに乗ったら
num = 1; ←変数numに「1」を代入※その瞬間、上の「enterFrame」のnumが1に変わり
} スクロール開始、以後値が変わらない間、1/12秒ごとにスクロール
on (rollOut) { ←マウスから外れたら
num = 0; ←変数numに「0」を代入※その瞬間、スクロール停止。
}
”上”ボタンはスクロールの向きが逆ですから、それぞれ「1」を「-1」に代えるだけです。
さらにボタンアクションを続けて・・・
on (press) {
mesScroll(1);
num = 0;
}
としたら・・・
マウスオーバー以外にボタンがプレスされた瞬間、
ここでは「enterFrame」を通さず、直接「mesScroll(1)」を実行し、
変数numに「0」を代入して「enterFrame」に引き継がれますから、
1回だけスクロールさせて停止することになります。
つまり、このようにすることで、
マウスオーバーでは、連続してスクロールし、
クリックしたとき(厳密には押し込まれたとき)は、
その都度1行づつスクロールすることになります。
以下のサンプルは、後者の方法で作成したものです。
scroll_txt6.fla profile3.txt
連続スクロールができるだけ長く確認できるよう、TXTファイルには同文を3回書いています♪
|
|
Response
02
|
| 2003年06月04日
(水) 14時39分> ルイ
|
|
有難うございます!凄く分かりやすかったです〜っ!サンプルを参考にもう一度やってみます。憲さん大好き!!(笑)
|
|