flashドラッグでの細かい移動制限

このQ&Aのポイント
  • flashとactionscriptの初心者です。
  • オブジェクトをドラッグして迷路を進ませるようなイメージです。
  • 壁に当たったらその場で止まり、ドラッグし直して動かせる方法を探しています。
回答を見る
  • ベストアンサー

flash  ドラッグでの細かい移動制限

お世話になります。flashとactionscriptの初心者です。 マウスでオブジェクトをドラッグしたとき、そのオブジェクトが別のオブジェクト(壁)をすり抜けないようにするための方法を探しています。(手書き絵を参照ください)。 作りたいものは、オブジェクトをドラッグして迷路を進ませるようなイメージです。 「オブジェクトをドラッグで動かして、壁に当たるとゲームオーバー」のような迷路のゲーム(イライラ棒みたいなもの)はたくさん見つかるのですが、自分が作りたいのは「壁に当たったらその場で止まる」「その場から(何事もなかったのように)ドラッグし直して動かせる」というものです。時間をかけて調べたり探したりしてみたのですが分からず途方に暮れています。 actionscriptは2.0での作成で考えていますが、3.0でもかまいません。初心者で質問の仕方もわかりにくく申し訳ないのですが、どうぞご教授よろしくお願いいたします。

  • Flash
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> 質問の仕方もわかりにくく申し訳ないのですが 大まかなことはわかるのですが 少し細かいこと(中まかなこと?)がわかりませんね。 その「中まかなこと?」によって考え方や可能/不可能が変わります。 問題は添付された図の「線(壁)」です。 この「線(壁)」の解釈のしかたによって変わります。 > (壁)をすり抜けないようにする とだけ書かれていらっしゃいますが その「線(壁)」の向こう(右側)には,行けるのか行けないのかがわかりません。 もし 『「線(壁)」の向こう(右側)には行けない』 とするなら比較的簡単な話で その「線(壁)」の x座標 でドラッグの x座標 を制限するか もしくは 「線(壁)」の向こう(右側)に「透明な塗り」でも描いておいて その「線(壁)」+「透明な塗り」 のエリアに侵入したドラッグ物を 何らかの方法で排除すれば良いというようなことになります。 私の勝手な推測ですが, そうではなくて 「線(壁)」の上や下を迂回すれば 『「線(壁)」の向こう(右側)には行ける』のですよね? ※ 参考図↓ その場合は, 次のようにするのが1つの方法です。 「線(壁)」をムービークリップに変換して 例えば「line_mc」というインスタンス名を付けます。 またドラッグするものもムービークリップに変換して 例えば「ball_mc」というインスタンス名を付けます。 その「line_mc」と「ball_mc」が存在するタイムラインのフレームに書くスクリプト例です↓。 --------------------------- //「ball_mc」を押したとき ball_mc.onPress = function():Void { //このMCをドラッグ開始 this.startDrag(); }; //「ball_mc」を放したときと外で放したとき ball_mc.onRelease = ball_mc.onReleaseOutside=function ():Void { //このMCのドラッグを終了 this.stopDrag(); }; //「ball_mc」の座標を保存しておく変数を用意 var tmp_x:Number = ball_mc._x; var tmp_y:Number = ball_mc._y; //マウスが動いたとき ball_mc.onMouseMove = function() { //もし「line_mc」がこのMCにヒットしていなければ if (!line_mc.hitTest(this)) { //このMCの座標を保存 tmp_x = this._x; tmp_y = this._y; } else { //「line_mc」がこのMCにヒットしたときは //このMCの座標を保存していた座標に戻す this._x = tmp_x; this._y = tmp_y; } }; --------------------------- ◎ ActionScript 2.0   要 Flash MX 2004 以上 ただこれ↑には 大きな問題点があります。 > 迷路のゲーム(イライラ棒みたいなもの)は > たくさん見つかるのですが それらのよく見るものは,たいてい壁が分厚くないでしょうか? Flash Player は,というか PC自体は, マウスの座標を連続的(アナログ的に)に検知しているのではなくて パルス的(デシタル的に)に検知しています。 つまり 数十分の1秒 間隔でマウスの座標を検知しています。 ですから「線(壁)」が薄い(細い)場合, 高速ドラッグされると「線(壁)」に当たった瞬間など無くなって 「線(壁)」をスッポ抜けてしまうのです。 ですから たいていの迷路のゲーム(イライラ棒みたいなもの)は壁を分厚くしています。 または ドラッグではなくキー操作などで物を動かす仕様にして速度制限をかけています。 (みなさんそういう工夫をして問題を乗りこえているのです。) もし 『「線(壁)」は厚さの無い線であってドラッグするものも点である』 みたいなものの場合, 本格的に壁のすり抜けを厳密に判定しようとすれば 独自で軌跡を線の方程式にして, その軌跡を線と壁の線との交点を求めるような数学的に複雑なスクリプトが必要になって来ます。 (条件などもさらに必要で私も頭が回らないのでココでは回答できません。) そこまでのことを求めないのでしたら, 高速ドラッグ時の壁のスッポ抜け問題を対処する工夫としては, 次のようにスクリプトを変更するのも1つの方法です。 --------------------------- //「ball_mc」を放したときと外で放したとき ball_mc.onRelease = ball_mc.onReleaseOutside=function ():Void { //このMCのドラッグを終了 this.stopDrag(); }; ---------------------------  ↓変更↓ --------------------------- //「ball_mc」を放したときとマウスが外れたとき ball_mc.onRelease = ball_mc.onDragOut=function ():Void { //このMCのドラッグを終了 this.stopDrag(); }; --------------------------- こうすると高速ドラッグできなくなるので, 壁のスッポ抜け問題がかなり生じにくくなります。 (ただしドラッグしにくくなります。) ものによっては さらに色々な問題点が出てくることもあると思います。 しかし何にしても 状況によって自分なりに工夫をすることが大切だと思います。

ej20eg
質問者

お礼

BlurFiltan様 分かりやすく詳細な説明、大変ありがとうございました。 まさに文章や図等で補足していただいた通りの悩みを持っていて、 自分の悩みを全て解決していただくことができました。感動しております。 まさかマウスの仕様の問題にまで関わる問題だったとは思いもしませんでした。 自分のflashでも命令を入れて動作確認ができました。 本当にありがとうございました!!

関連するQ&A

  • ゴミ箱のようなflashを作りたい

    actionscript初心者です(1.0か2.0) flashは CS4 を使ってます ステージにいくつかのオブジェクトと、3つの箱がある ↓ 任意のオブジェクトを1つドラッグして、任意の箱にドロップ ↓ 箱がふくらむ ※1つの箱に入るオブジェクトは1つまで といった感じのflashを作りたいのです オブジェクトのドラッグはなんとか書けますが、 箱の上でオブジェクトが消え、箱がふくらんだ箱に変わるところなどがわかりません・・・ いいサンプルなどご存知でしたら教えてください!

    • ベストアンサー
    • Flash
  • ステージ上でドラッグしたら回転する仕組みについて

    flashとactionscript初心者です。 AS3.0を利用してステージまたは背景画像上でドラッグをすると ドラッグした距離に応じてその場で回転をするmcというオブジェクトを 作りたいのですが、どのようにすればよいでしょうか。 調べても類似のものが無く困っています。 説明が下手でわかりにくいとは思いますがご回答よろしくお願いします。 ※添付画像の指の部分はマウスカーソルとして考えてください 作業環境 Adobe Flash Professional CC

  • オブジェクトをドラッグできるソフトは?

    教員です。 授業でパワーポイントで教材作成して操作することがあります。パワポは残念ながら、生徒に見せる画面上でオブジェクトをドラッグで移動させる機能がありません。たとえば、手元のマウスの動きに合わせて、象を画面の上から下にリアルタイムで移動させ、説明後、今度は、左から右に動かす等できないです。任意の方向に任意のタイミングでドラッグしたいのです。アニメ機能の軌跡では、事前に動く方向を仕込んでおかないといけません。スライドショーを開始したら、動く方向やタイミングを変えられません。 アニメーション機能で、クリックしたら(1)見えなかったオブジェクトが出現、(2)オブジェクトが消えるの、有用な機能です。これらに(3)任意の方向に任意のタイミングでドラッグできる機能があればパワポをもっと活用できるのに、と思います。この3機能があるソフトが探しています。  アピール、フェード、オブジェクト移動(マウス操作からドラッグで移動)できる適当なソフトをご存じないでしょうか。FlashのAction Script を10年前にやりかけて身についてないのです。簡易Flash系の簡易フリーソフトか、初心者用のゲーム作成ソフトあたりに使えそうなのがあるのでしょうか。     Power Point< 探しているソフト < Adobe Flash 適当なのがなければ、Flashで頑張りますが、どなたか良いソフトがあればお教えください。

  • オブジェクトを上下方向のみにドラッグさせる方法

    FLASH初心者です。オブジェクトを左右に動かさず、上下方向のみにマウスでドラッグさせるにはどういった方法があるでしょうか。 一応、自由にドラッグできるところまでは作れたのですが、移動方向を上下に限定させる事ができません。 使用ソフトはFlash Professional 8(WinXP)です。 よろしくお願いします。

  • ドラッグ&ドロップ&拡大できる地図

    actionscript初心者です。。 ただいま ドラッグ&ドロップ&拡大できる地図を 某サイトを参考に作成しています。 教えていただきたいのですが、 このサイトの http://hfm-kenchan.com/Lesson/contents/index.htm Q&Aサンプル作品集のNo.837「ドラッグ可能な二段階拡大画像」 を参考に地図を作成しておりました。。 なにぶん初心者なので いきなりのつまづき。。。 拡大前の画像(最初の100%の画像)もドラッグできるようにするにはどうすれば良いでしょう? 最初に50% 次に70% そして100%にしたいのですが。。。 50%の画像がドラッグできなくなってしまいます。 いろいろと調べてもわからず 途方にくれています。 教えてください、よろしくおねがいします。

  • 簡単な連打ゲームを作りたい。

    FlashMxで簡単な連打ゲームを作りたいと思ってます。 が、本を見てもいまいち理解できません。 あるオブジェクトをマウスで連打して、 制限時間内に50回連打できたらオブジェクトが形を変えてクリア、 できなかったらオブジェクトはそのままでゲームオーバー というようなゲームを作りたいのですが、どうやったらできるのでしょうか。 Flash初心者ですがよろしくお願いします。

    • ベストアンサー
    • Flash
  • flash画像の再生・ボタンによる切り替え

    初めて質問させていただきます。 flash初心者です。 CS5、ActionScript3.0で作成しております。 http://www.united-arrows.jp/ こちらのサイトのトップページにあるようなものを、flashで作成しようと考えております。 5枚の画像を順番に再生し、フェードインしながら切り替わり、また、5枚の画像に対応する5つのボタンのマウスオーバーに反応するようなものです。 上記サイトのように、表示していた画像を残しながらフェードインで切り替えとなると、重ね順の変更などが必要になってくるかと思われますが、初心者なものでActionScriptに関しての知識もほとんどなく、ネットや書籍で調べてはみたのですが全くわからず大変困っております。 どうか宜しくお願い致します。

    • ベストアンサー
    • Flash
  • Flashロールオーバーボタンと画像の変更

    Flash ActionScript初心者です。 http://www.asebino.com/ 上記URLのトップページで見るFlashと同じ様なものを作りたいのですが、どうしたら良いのでしょう? ボタン上にカーソルが来るとボタンがロールオーバーし別座標の画像がマスク処理され表示されます、その際、前の画像がデフォルトに戻らず、残ったままその画像の上に重なるように表示するにはどうしたら良いでしょう。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • FLASHでできること

    今度、自分のHP上でフラッシュを使おうかと思ってるんですが、まだなにぶんなにも知らないもので、よければ教えて欲しいです。 例えば、こういうものはフラッシュで作ることはできるのでしょうか? スロットゲームなのですが、かなり本格的なものです。 実際の機種のように、レバーをクリックするごとにランダムに乱数を発生させ、ボタンをクリックした場所から、テーブルを参照して揃わない時などの制御など、本物同等のクオリティーのあるものを作りたいのです。 まだ、フラッシュ初心者の自分なので、無理だとは思いますが、このような複雑な制御はフラッシュには可能なのでしょうか? また、可能だとしたら、どの程度の知識が必要なのでしょうか? もし実際に作られた方がいましたらぜひ教えてもらいたいです。 お願いします。

  • 時間制限付きのゲームの作り方

    最近「Flsh Maker2」を買って少しアニメを動かす程度なら出来るようになった、というくらいの初心者ですが、簡単なFlashを使ったゲームを作りたいと思っています。 早押しゲームのような感じで、ボタンを一定回数押すと、次の画像が表示されるようにしたいのですが、時間制限をつけるにはどうしたらいいでしょうか? 例えば、「10秒以内に5回ボタンが押せなければ、ゲームオーバーになる」という感じに。 Flash MakerはMXに比べると、出来ないこともあるようなので、出来るか出来ないかだけでも教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash