- ベストアンサー
Flashのスクロールバー表示に関する問題
- 外部テキストを読み込んでいる際に、スクロールバーの表示や反応がうまくいかない問題が発生しています。
- スクロールバーの部分が上下に長く表示されてしまったり、マウスでスクロールできず矢印を押さないと移動できない状態になったりしています。
- さらに、外部テキストが全部表示されずにスクロールで表示しきれない問題も発生しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
なんとなくですが, うまく行かない根本原因は, 変数名とインスタンス名の混同,そしてさらにファイル名までも混同してしまっている点にあるように思えますよ。 >> 初心者なモノで説明不足かもしれませんが ええ,十分説明不足ですねぇ。 書かれている内容からでは, 現状がどうなっているのかわからないので, すごい推測(妄想とも言う)を入れて, 想像&検証してみなければなりません。 字数制限もありますから,質問で詳しく説明するのも難しいのですけどね。 > onClipEvent (load) {… ここから推測するに, テキストフィールド を作成して, そのテキストフィールドをムービークリップの中にわざわざ入れてあるのですね。 ムービークリップ の内と外では階層が変わりますから, スクリプトを作成する上で,特にこの点は押さえておくべき重要ポイントなのです。 > this.loadVariables("txt.html"); 「txt.html」??? ここから推測するに, 外部テキストデータはHTMLタグ入りデータなのですね。 (この↑推測には自信がありません。) 純粋なHTMLは Flash では扱えませんから, 実際は HTML ではなく,HTMLタグ入りテキストだと思います。 というわけで,勝手にこちらで「txt.html」内のデータを作成し SWF と同じフォルダに保存しました。 ---「txt.html」-------------------------- myhtml=aaa<br>bbb<br>ccc<br>ddd<br>eee<br>fff<br>ggg<br>hhh<br>iii<br>jjj<br>kkk<br>lll<br>mmm<br>nnn ------------------------------------- >> 質問:Flash スクロールバー表示 そしてここから推測するに, テキストフィールド を作成して, そのテキストフィールドにコンポーネントの「UIScrollBar」を付けたいのですね。 (この↑推測にも自信がありません。) ===以上のような不確実な推測を元に回答します=== テキストフィールドに,「UIScrollBar」を付ける場合, 「UIScrollBar」をセットする対象物は, テキストフィールドというインスタンス (テキストフィールドという物体そのもの) です。 変数は単なる値の入れ物です。テキストフィールドそのものではありません。 書かれているスクリプトや説明からでは,テキストフィールドのインスタンス名がわかりません。 > scrollbar.setScrollTarget(txt.html); これは人間が見ても意味不明です。 「scrollbar」というインスタンス名の「UIScrollBar」を, 「txt.html」を対象にセットする。 という意味になります。 「txt.html」は,外部テキストのファイル名ではありませんか。 「UIScrollBar」をセットする対象物は,テキストフィールドです。 それに, > onClipEvent (data) {… で,データが読み込まれる度に何度もセットする必要はありません。 セットするのは1回で良いのです。 また, テキストフィールド にコンポーネントの「UIScrollBar」をドラッグ&ドロップしてやると, 自動的にテキストフィールドにはインスタンス名が付いて(すでに付けていればそのままで), 「UIScrollBar」の「パラメータ」には自動的に _targetInstanceName に,そのインスタンス名が付きますから,スクリプトでセットする必要も全くありません。 また, 「UIScrollBar」はインスタンスであるテキストフィールドにセットされるのですから, テキストデータもテキストフィールドというテキストインスタンスに代入しなければなりません。 ===というわけで========================== 書かれている内容から推測できる状態をなるべく変えずに, うまく行く方法例を書きます。 まず, テキストフィールド入りムービークリップ の編集に入ります。 ムービークリップ内のテキストフィールドに,インスタンス名を付けてください。 この説明では 「TextField」 というインスタンス名を付けたとしておきます。 次に, 「UIScrollBar」を選択して, 「パラメータ」の _targetInstanceName の欄に,「TextField」と書いて(コピペして)ください。 「UIScrollBar」自体のインスタンス名は,書かれている内容から推測すると, 「scrollbar」と付けられているようですからそれはそのままでかまいません。 そして, ムービーの編集に戻って, そのテキストフィールド入りムービークリップ に次のようなスクリプトを書きます(コピペ可能)。 ------------------------------------- onClipEvent (load) { this.loadVariables("txt.html"); // ↓必要???(おそらく不要) scrollbar.setScrollTarget(TextField); } onClipEvent (data) { this.TextField.htmlText = myhtml; } ------------------------------------- これで行けると思います。 外部テキスト(「txt.html」)は,上にも書いたとおり, ------------------------------ myhtml=aaa<br>bbb<br>ccc<br>ddd<br>eee<br>fff<br>ggg<br>hhh<br>iii<br>jjj<br>kkk<br>lll<br>mmm<br>nnn ------------------------------ のような形にしてあります。 この,頭の「myhtml」という変数名を取ってきて, 「TextField」にその値を入れています。 >> ◆*.flaだと上下の矢印も表示されない白い棒のまま。 そういうものです。そういう仕様です。 なお, その他テキストフィールドに関しての参考URLと,引用を書いておきます。 「テキストフィールドのインスタンス名と変数名について」 http://livedocs.macromedia.com/flash/8_jp/main/00001418.html > テキストフィールドのインスタンス名と変数名を混同 > しないでください。テキストフィールドの変数名は、 > テキストフィールドに含まれているテキストを参照する > 変数であり、オブジェクトへの参照ではありません。 「ScrollBarコンポーネントのスクロールバーがアクティブにならない」 http://www.fumiononaka.com/TechNotes/Flash/FN0303006.html > TextFieldにはインスタンス名に加えて変数名も使用でき > ますが、スクリプトに混乱を生じるおそれがありますので、 > 変数名は削除することをお勧めします。
お礼
いろいろやってみたんですが、おっしゃるとおりメチャクチャでしたね; 本当にすみません。 結局 http://acchan.s55.xrea.com/flash.html#sampleから移植したような形で なんとか改善されました。 本当に丁寧に教えていただきましてありがとうございます。 まだまだわからないことだらけですが今後ともよろしくお願いします。 今回は本当にありがとうございました。