
商店街の地図をFLASHで作ることになりました。
ユーザーが拡大・縮小や、ドラッグを行って地図上にある店のアイコンを選択、指定したHTMLにジャンプするようなものを作ろうと考えています。
そこで質問なのですが、地図上に店の名前を入れてしまうとどうしても拡大しすぎで見にくくなってしまいますよね?
各種ダイアログに出るようなポップアップヘルプのような感じでマウスオーバー時に店名を表示させることはできますでしょうか?
地図をいくら拡大・縮小させても店名表示部分のサイズは一定で行いたいのですが・・。
ソースを載せることができないのでわかりにくい質問内容になってしまって申し訳ありません。
どなたか対処法をご存知の方がいらしたら教えてもらえると嬉しいです。
環境はWin版Flash MXです。
No.1ベストアンサー
- 回答日時:
要するに、ポップアップと地図・アイコンが、違う座標系になっていればいいのだと思います。
こんな方針で考えてみてはいかがでしょう。
地図の図面の上に店のアイコンのムービークリップを配置したムービークリップ、Map を作ります。アイコンには、それぞれインスタンス名を付けます。
それとは別に、ポップアップ用のムービークリップを作ります。フキダシでもポップアップチップのようなものでも構いませんが、テキストを表示するのでテキストフィールドが必要です。テキストは空にして、テキストフィールドに変数を設定します。(ここでは、仮に s_name とします)これのインスタンスを、非表示にしてステージのどこかに置いておきます。
アイコンの上にマウスカーソルが乗ったら、ポップアップのテキストフィールドの変数 s_name に店名を設定して、アイコンの傍に表示します。ポップアップは _root にありますから、Map のムービークリップが拡大・縮小されていても影響は受けません。
アイコンからマウスカーソルが外れたら、ポップアップは非表示にします。ついでに、s_name の中身をヌルストリング("")にしておくのが無難です。
ポップアップを設置する関数と消去する関数は、別々に作ります。アイコンにマウスカーソルが乗った/外れた時の処理は、Flash MX から使えるようになった、MovieClip オブジェクトの onRollOver、onRollOut イベントハンドラを使って、イベントが発生する度に関数を呼ぶようにスクリプトを組みます。
店名は関数を呼ぶ時に引数で渡してもいいのですが、同じシンボルから複数のアイコンを作る場合などは、コンポーネントを利用すると便利かも知れませんね。
コンポーネントの詳細は省略しますが、一言で言うなれば、パラメータのあるムービークリップのようなものです。ムービークリップとして作ったものにパラメータを定義すると、コンポーネントに変わります。
例えば、喫茶店のシンボル「 cafe 」に、コンポーネント定義で「 shop_name 」という変数を定義するとします。「 cafe 」のインスタンスは全て「 shop_name 」というパラメータを持ち、各インスタンスの「 shop_name 」に、それぞれ違う値や文字列を設定できるようになります。ActionScript では、インスタンス名.shop_name の形で参照します。
それから、今回の処理で問題になるのはポップアップの表示位置です。ポップアップの表示位置はアイコンの座標から決めますが、ポップアップは _root、アイコンは Map と、それぞれ違う座標系にあるので、単にアイコンの座標+○○とすると、位置がズレてしまいます。そこで、アイコンの座標をステージの座標(グローバル座標)に直す必要が出てきます。この変換には、MovieClip オブジェクトの localToGlobal メソッドを使います。
とりあえず、ステージに地図のシンボル「Map」のインスタンス「 map 」と、ポップアップの「 popup_chip 」というインスタンスがあるとします。「 map 」の中には「 shop1 」「 shop2 」というインスタンスがあり、この2つは、コンポーネント「 icon 」のインスタンスです。「 icon 」にはパラメータ「 shop_name 」(タイプは String )が定義されていて、各インスタンスにそれぞれの店名が入っているものとします。
ポップアップを設置・消去する関数を、メインのタイムラインのフレームアクションで設定します。大体、こんな感じになるかと思います。
(↓このスクリプトをコピーして使う時は、各行の行頭に入っている全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)
//ポップアップの設置
//引数はアイコンのインスタンスの名前
function Set_PopUp (icon_name)
{
var clip_name;
temp = new Object();
clip_name = "_root.map." + icon_name;
//アイコンの座標をステージの座標に変換
temp.x = eval(clip_name)._x;
temp.y = eval(clip_name)._y;
_root.map.localToGlobal(temp);
//ポップアップを、アイコンの上方に表示
popup_chip._x = temp.x
popup_chip._y = temp.y-60;
//ポップアップに店名を設定
popup_chip.s_name = eval(clip_name).shop_name;
//ポップアップを可視にする
popup_chip._visible = true;
}
//ポップアップを消す
function Delete_PopUp()
{
//ポップアップに表示する文字をクリア
popup_chip.s_name = "";
//ポップアップを見えなくする
popup_chip._visible = false;
}
続けて、「 shop1 」「 shop2 」のムービークリップで、onRollOver イベントが発生した時には Set_PopUp 関数を、onRollOut イベントが発生した時には Delete_PopUp 関数を呼ぶように定義します。(「 shop2 」の方は省略しますが、map.shop2.・・・として、同様に定義して下さい)
//「 shop1 」にカーソルが乗ったらポップアップを表示
map.shop1.onRollOver = function ()
{
Set_PopUp (this._name);
}
//アイコンからカーソルが外れたらポップアップを非表示に
map.shop1.onRollOut = function ()
{
Delete_PopUp();
}
コンポーネントのパラメータは複数定義できます。HPのアドレスを変数「url」として定義しておけば、クリックした時に、パラメータで持つURLのページを表示させることも可能です。
//「shop1」がクリックされたらHPを表示
map.shop1.onRelease = function ()
{
getURL(this.url , _blank);
}
なお、map を拡大・縮小する時に、map.onPress や map.onRelease を使うと、map 全体がクリックのヒット領域として認識されてしまい、map にあるアイコン上でのロールオーバー・ロールアウトが検出されなくなることがあるようなので、ご注意下さい。
長くなってすみませんでした。
とても丁寧に教えて頂きましてありがとうございます。
非常にわかりやすかったので初心者の僕としましても嬉しい限りです。
特にlocalToGlobalを用いての座標の取得は思いもつかなかったので、これを機に勉強をしたいと思います。
教えて頂いたASもわかりやすく、感謝しています。
短いお礼で申し訳ありません。ご回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- その他(IT・Webサービス) Yahooの地図の文字サイズ、googleの地図の画面分割 1 2022/05/21 12:31
- Windows 8 Route Generator の使い方 1 2023/05/03 00:36
- ドライブ・ストレージ HDDの未割り当て領域が認識されない 7 2022/11/27 18:51
- 地図・道路 こんな地図 2 2023/06/25 11:42
- Google Maps Google Maps にお店の名前を表示する方法は? 2 2022/12/26 16:21
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/06/23 15:02
- ガーデニング・家庭菜園 写真(7月22日撮影)の花の名を教えてください。 4 2022/08/06 23:05
- 引越し・部屋探し 埼玉県で民度の高い地域について 4 2023/03/29 22:36
- マルウェア・コンピュータウイルス FlashPlayerの削除とマルウェア感染について 5 2023/02/23 20:52
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iPhoneで誤ってポッ◯キットとい...
-
●指定したURLを開かなくするソ...
-
FLASHで作る地図につて
-
メールソフト「Thunderbird」で...
-
メールアドレス毎に、音を変え...
-
勝手に中国語のポップアップ・...
-
ウイルスバスター14.ポップ...
-
Adblockでポップアップを許可し...
-
無料のホームページスペースで…。
-
Google Chrome インターネット...
-
メール受信をポップアップで教...
-
タスクバー上のアイコンにカー...
-
ブロックできないポップアップ。
-
ウイルスですか?不安なので教...
-
Adblock plusについて
-
Excelのポップアップ
-
Just PDF 5 proでポップアップ...
-
AVGの「ウェブブラウザ」という...
-
windows7のinternet explore
-
ポップアップの位置を固定する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メールソフト「Thunderbird」で...
-
Google Chrome インターネット...
-
何故か本日からMcAfee の警告が...
-
Google Chrome Portable
-
office365 対処方法を教えてく...
-
MT4のアラート設定で、アラート...
-
タスクバー上のアイコンにカー...
-
VNCでctr+alt+deleteキーでタス...
-
FileMaker Proで時分のみ表示さ...
-
ちょっとだけアダルトをスマホ...
-
VBAで 候補の語句が出なくなり...
-
ブラウザのウインドウが勝手に...
-
JavaScriptを使用したリンク先...
-
iPhoneで誤ってポッ◯キットとい...
-
『Avast!5』でネットワークシー...
-
Jwordについて
-
ヤフオクの終了時間直前に知ら...
-
勝手に中国語のポップアップ・...
-
メーラーのお知らせ機能
-
1台のPC(XP)で特定ユーザーに...
おすすめ情報