Lite)動的メニューを作るために外部ファイル読み込もうとしたけど。Lite)インスタンス名使えないから各オブジェクト状態変更はフレームで。タグみたいなもの)を作ってみました。(内容は今まで小ネタで出してきたものも含んでます)これが結構苦労したんですよね。トップページ表示したときにカーソルがボタンオーバーした時だけ背景色とテキスト色変えてスクロールさすというものです。一つのムービークリップを複数のインスタンスで共有化することができないので、表示する個数分用意します。(ボタンも同じ)・ムービークリップ側まず、ムービークリップ側の実装です。1フレーム目にダイナミックテキストを配置します。1フレーム目のアクションを下記のように記述。//フラグが立っている時だけスクロールする。//scrlCntはフラグ。//文字列長のピクセル分スクロールしたっぽいなら位置リセット。//ムービークリップの位置を左端に。2フレーム目にはenterFrameイベントの代用として1フレーム目にループするようにします。↑で作ったムービークリップをボタンに配置します。今回カーソルオーバー時に背景に色付けて、文字色を白にしたいので、アップとオーバーは別のキーフレームにします。オーバーのフレームで配置したムービークリップを選択し、プロパティから「カラー」で「着色」を選択し、文字色を決めます。背景色は別レイヤーを作り、短径ツールで適当に作ります。要はルートのムービークリップのことです)シーンにボタンを配置し、ボタンアクションに下記のようにスクリプト書きます。要はスクロールさすかどうかのフラグの状態を決めてるだけです。);}あと、1フレーム目のアクションスクリプトにフラグ関係の変数を定義しときます。false;}基本的にはこれで横スクロールテキストは完成するんですが、一つ問題が。それはムービークリップ自体をx方向に移動させてるため、横方向いっぱいになってしまうということです。いうことができないのです。悩んだあげく強硬手段でこの問題を解決することにしました。それは、背景絵を用意し、スクロールエリアとするところだけ切り抜いて、スクロールボタンよりも上のレイヤーに配置するというものです。これだと、スクロールエリアをはみでることはありませんが、作るのとメンテが入った時が厄介です。手段使ってますが、一応こんな感じで実装させてみました。ボタンを幾つか用意して、あるボタンを押すと任意のURLを開くっていう極々一般的なことをしようと思ってます。ネットでケータイ用のイベントハンドラ探して、ボタンのインスタンスに書いたのは下記のようなコードです。);}これで実行すると、ボタン2を押下しても、ボタン1のイベントが走ってしまうのです。keyPress"ボタン番号"についてです。ここで、on(keyPress"ボタン番号"){}はそのボタンにフォーカスがなくてもボタンを押せば反応するという記述が。swf起動してどこのボタンにもフォーカスが当たってない状態で決定ボタン押下するとボタン1のイベントハンドラが動いてます。書くと案の定、要件どおりに動きました。書いてやればよかったんですね。フォーカスない時に制御するもんだから、基本的に1つだけ実装するということもわかりました。書いてしまったが故にこの問題解決するのに相当時間がかかってしまいました。振り分けるという作りにしないと行けないということです。ボタンのマウスオーバー時にボタン内にあるダイナミックテキストの表示色を変更したいというものです。ダイナミックテキストは変数を使って任意のタイミングで変更できるようにします。ダイナミックテキストの文字列は変数で簡単に変更できますが、色とかその他のプロパティは難しいみたいですね。方法はあると思うんですが、3流PGが採用したのは下記の方法です。1.ムービークリップを作成し、その中にダイナミックテキストを配置(変数を指定しておく)。2.クリップの1フレーム目にダイナミックテキストを変更する処理を入れる。)3.↑で作成したムービークリップをボタンのアップとオーバー、ダウンフレームに配置。4.オーバーフレームで、配置したムービークリップを選択し、プロパティから「カラー」で「着色」を選択し、色を決める。動的にカラーを変更することはできませんが、あらかじめオーバー時はこの色にするってきまってる場合は使えます。アクセスするという方法がOKWave:ActionScript(携帯)についてに書かれてました。イベントがサポートされてません。やってフレーム毎の処理すりゃええんじゃということになりますが、下記のようにフレームをループさせればいいようです。1フレーム目に戻るようにする。とほとんど同じ事が実現可能となります。Lite1.1ではonClipEvent(enterFrame)が使えません。Lite)動的メニューを作るために外部ファイル読み込もうとしたけど。今回動的なメニューを作ろうと思い、メニューに表示する文字列を定義したテキストファイルを用意し、それを最初に読み込んでダイナミックテキスト変数に代入ってことを考えました。関数で出来るっぽいです。コードはこんな感じです。_root);テキストファイルの中身はこんな感じです。strLink0=メニュー1の文字列&strLink1=メニュー2の文字列&strLink2=メニュー3の文字列で、ちゃんと読めたかどうかを確認するためのコード。1.1では配列をサポートしてないので、変数名末尾に数値を加えて仮想配列とするといいらしいです。ムービークリップの1フレーム目に書いて動かしてみたんですが、全然読み込まれている気配がありません。走らないようにしてるようです。これは、swf再生しただけでユーザーが自動的に携帯情報などを取得されないようするための仕様のようですが、非常にうっとしいです。今回は初期表示のメニュー内容を動的に変えたいのに、ユーザーのキー操作が無いとダメだったら意味ないですね。いうことで、結局swf内部にテキスト埋め込むことしかできないという結論に至りました。ニュースのヘッドライン表示してるんですが、どうやって動的に変えてるんでしょうね。ボタンを配置して、オーバーフレームにとあるムービークリップを置いて、そのムービークリップに対してムービークリップアクションを書いてみたんですが、全然動いてる風に見えません。調べてみると、「Flash4のActionScriptでは,クリップアクションが使用できないため,...」というのを見つけました。クリップアクションが記述できないんですね。ムービークリップ内のフレームアクションに書いてもいいんですが、そうするとインスタンス毎に違う処理をさせたい時にシンボルをインスタンス数分作らないと行けないので、部品の共通化ができなくなるんですよね。Lite)インスタンス名使えないから各オブジェクト状態変更はフレームで。今回したいこと:ボタンにマウスオーバーしたら、そのボタンに対応したバナーや説明を表示したい。イベントハンドラで、特定のインスタンスの中のオブジェクトを変更させてやろうと思ったんですが、それが難しいみたいなんで、タイムラインのフレームにそれぞれバナー表示したフレームや説明用吹き出しを表示したフレームを定義して、マウスオーバーしたらそのフレームに飛ばすようにしました。要は、あるイベント後の状態を全てフレームで表現さすということです。仕様が厳しいため、仕方ない。ラボ!!:ランダムで画像を変える方法です。ここでは、各フレームにランダムに表示したい画像を置いて、乱数の結果をもとにそのフレームに飛ばすというものみたいです。インスタンス名が指定できないようです。いって、シンボル内のダイナミックテキストに割り当てた変数を使って、文字列を代入すると、そのシンボルから生成されたボタン全てが同じ文字列が入ってしまいます。仕方ないので、ボタン毎にシンボルをつくことにしました。部品の汎用化という点からは反しますが、仕方ないです。なんか、いい方法無いでしょうかね。追記(2009/8/31):どうやらムービークリップにはインスタンス名を付けることができ、それを使ってクリップ内のオブジェクトにアクセスできるようです。文字列を代入することで、ダイナミックテキストの文字列を変更できるようです。ボタンにインスタンス名はつけれないので、ボタン内のアップやオーバーフレームにムービークリップ配置して、インスタンス名つけてもボタン内ではムービークリップインスタンス名はサポートされないみたいですね。ボタン内にインスタンス名付きで配置したムービークリップのフレームアクションに下記のスクリプトを書いてみました。いうもので、設定したインスタンス名は返ってきませんでした。後、ターゲットパスも下記スクリプトで取ってみましたが、やはりボタンとその中のムービークリップということでこちらで設定した名前は返ってこないっぽいです。出力の結果:/instance6/instance8つまり、ボタンの中に入ったムービークリップを含むオブジェクトは外のスクリプトから操作不能ということです。テスト開発が始まりました。本題ですが、ボタンにロールオーバーすると、黄色の枠がついてしまいます。フォーカス(ボタン枠)を外すには?に枠を除けるためのコードがありました。1フレーム目に入れるといいようです。情シスで何でも屋の三流プログラマのコーディング、サーバ管理、PC生活関係のメモ書き。このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。29検索カテゴリ全体Linuxサーバがらみ.Net開発PHP開発C/C++開発JavaSQLツール思ったこととかニュースとか。メッセージを入力してください。