電子書籍の厳選無料作品が豊富!

Flashで地図を作成しています。
大きめの地図なのでマスクをかけ、ドラックすると地図が移動され、非表示になっている箇所も表示できるように作成しました。

この地図に対して、更に各地名インスタンスを複数選択でき、選択された地名を地図横にテキストとして羅列させる仕組みを作りたいと思います。

移動する時の動作として、配置している全体地図をmap_mcとし、そのムービークリップに対して下記のようにスクリプトを記述しました。
onClipEvent (load)
{
press_flg = false;
drag_flg = false;
}

//マウスのボタンが押されたら
onClipEvent(mouseDown)
{
press_flg = true;
}

//マウスポインタが動かされたら
onClipEvent(mouseMove)
{
if(press_flg && (!drag_flg))
{
hidari = Stage.width-this._width/1.22;
ue = Stage.height-this._height/1.2;
migi = this._width/3.6;
sita = this._height/3.3;
this.startDrag(false, hidari, ue, migi, sita);
drag_flg = true;
}
}

//マウスボタンが押されて離されたら
onClipEvent(mouseUp)
{
if(drag_flg)
{
this.stopDrag();
}
else
{
※空欄;
}

press_flg = false;
drag_flg = false;

}

//マウスボタンが押され、範囲外で離されたら
on(release, dragOut)
{
this.stopDrag();

press_flg = false;
drag_flg = false;

}

今は動作確認のため、「※空欄」箇所にgetURLなどの記述をしていますが、ここにどのようなスクリプトを記述すれば希望の動作をするのかわからず、ネットで検索しても参考になるものを見つけられずにいます。
よろしくお願いします。

A 回答 (1件)

各地名インスタンスをムービークリップで作成して,map_mc の中に入れます。


そして,
地名を地図横にテキストとして羅列させるための
複数行入る縦長のダイナミックテキストを _root に作成します。

仮に上の各地名インスタンス は5つであったとして,
「area1_mc」,「area2_mc」,…,「area5_mc」
というインスタンス名を付けておいたとします。
また,
地名表示用のダイナミックテキストには
「choice_txt」 という "インスタンス名" を付けておいたとします。

階層構造は次のような感じになるということです。

 _root
  ├ choice_txt
  └ map_mc
     ├ area1_mc
     ├ area2_mc
     ├ area3_mc
     ├ area4_mc
     └ area5_mc


このようにした場合,
ご質問で書かれていらっしゃるスクリプトの「※空欄;」部分は,
次のような感じにすれば良いと思います。


if (this.area1_mc.hitTest(_root._xmouse, _root._ymouse, true))
{
_root.choice_txt.text += "江戸町\r";
}
if (this.area2_mc.hitTest(_root._xmouse, _root._ymouse, true))
{
_root.choice_txt.text += "明治町\r";
}
if (this.area3_mc.hitTest(_root._xmouse, _root._ymouse, true))
{
_root.choice_txt.text += "大正町\r";
}
if (this.area4_mc.hitTest(_root._xmouse, _root._ymouse, true))
{
_root.choice_txt.text += "昭和町\r";
}
if (this.area5_mc.hitTest(_root._xmouse, _root._ymouse, true))
{
_root.choice_txt.text += "平成町\r";
}


地名は地名で辻褄が合うように配列などに地名データとして格納しておけば,
for文 などループ文の使用でもっとスマートに書けるとは思います。
以上は,
そういうスマートな記述方法を説明した回答ではなく,
あくまでも,やり方の一例の大筋を回答したものだと思ってください。


========================================
なお,余談ですし,
こういうことを書き出すときりがなくなってしまうのですが,
地名の選択ミスをすることも考えられます。

もし上のようなスクリプトにしたとして,
地名の選択ミスをした場合,
その今選択した町名を1つだけ消すボタンを用意するとするならば,
そのボタンには次のように書けば良いと思います。

------------------------------------
// map_mc 上にボタンがあるときのみ必要
on (press)
{
_root.map_mc.drag_flg = true;
}

on (release)
{
txtArr = _root.choice_txt.text.split("\r");
txtArr.pop();
txtArr.pop();
if (txtArr.length == 0)
{
_root.choice_txt.text = "";
}
else
{
_root.choice_txt.text = txtArr.join("\r")+"\r";
}
}
------------------------------------


こういうもの(便利なアプリケーション)を作成しだすと,
いろんな機能やいろんな場合が考えられて,たいてい作業が長く長くかかります。がんばってください。
    • good
    • 0
この回答へのお礼

ありがとうございます!
うまく地名が表示できるようになりました!

余談…という事で、「地名の選択ミス」があった場合のスクリプトも書いていただきましたが、とても参考になりました。

BlurFiltanさんのおっしゃる通り、作り出していくと本当にいろんなケースが考えられて悩ましい限りです。
こういうのはやはり経験がものを言うのでしょうね。

初心者の私がチャレンジするのは無謀なアプリケーションかも知れませんが、Flashを理解するいい機会なので、ヘコタレずにがんばろうと思います。

本当にありがとうございました。

お礼日時:2008/05/06 16:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!