トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     AS3.0 3D表現したオブジェクトのマウス判定
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yosh-tosh
Åê¹ÆNo.41478
投稿日時: 2009-2-16 21:13
新米
居住地:
投稿: 13
使用環境:
MacOSX
Flash CS3
AS3.0
AS3.0 3D表現したオブジェクトのマウス判定
こんにちわ
初めて投稿させて頂きます。よろしくお願いします。

pc:Mac OSX

使用アプリ
flash cs3 AS3.0

3Dエンジンはpapervisionなどありますが、自作でエンジンを作りたいと思って勉強中です。
そこで、一つ壁にぶつかりました。

まず、こちらをご覧ください。
3D立方体

spriteオブジェクトの中に2つの立方体の頂点座標を入れて頂点座標に対してfor文でlineToを使っています。

オブジェクト構造
スプライト - トライアングルオブジェクト - 座標XYZのプロパティを持ったオブジェクト
[img=http://dropkicker-co.org/test/square.gif]オブジェクト構成[/img]


やりたい事は立方体1と立方体2それぞれにマウスイベントを付けたいのですが、ロジックの考え方が思いつきません。

一つのスプライトに一つの立方体しか入れない様にすればスプライトにマウスイベントを付ければいいと思いますが、2つの立方体が重なった時に立方体同士が繋がったようには表示できません。

自作のエンジンはZソート法を使っていますが頂点を管理しているトライアングルオブジェクトに対して使用しています。
従って、スプライトの中に立方体を2つ入れてあるし、立方体の重なりも表現しています。

表題でマウスイベントではなくマウス判定としたのは、マウスの座標と立方体の座標をチェックすれば良いのでは??と思ったのでそう書きました。

それを実現しているサイトのリンクを貼っておきます。
(木の上に居るキャラクターのマウス判定)
eco the zoo

どなたかこのロジックの考え方が分かる方教えて下さい。
よろしくお願いします。
SeeDa!!
Åê¹ÆNo.41479
投稿日時: 2009-2-16 21:30
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
Re: AS3.0 3D表現したオブジェクトのマウス判定
まず立方体ありきで、それぞれの立方体が独立したオブジェクトになっていないというのは、もっともマウスイベントを拾いにくい形かと…

まず2つの立方体を2つのオブジェクトにすることをお勧めします。それが出来れば3つ4つと存在しても簡単に対応できます。
そうしておけば、結果的にZソートも用意になります。

ただ今回のご質問「今の形を崩さないで」ということなら、三角の面のひとつひとつにマウスイベントを与えては如何でしょう?

もしくはもう少し面倒になりますが、平面に投影した時のXY座標を拾って、マウスのヒットエリアを平面に描くことができるかもしれません。

推測の解答でゴメンナサイ
yosh-tosh
Åê¹ÆNo.41491
投稿日時: 2009-2-17 23:28
新米
居住地:
投稿: 13
使用環境:
MacOSX
Flash CS3
AS3.0
Re: AS3.0 3D表現したオブジェクトのマウス判定
SeeDa!!さん

助言ありがとうございます。

SeeDa!!さんの言う通り、2つのオブジェクトを分割すれば、イベントを受け取るのは簡単ですね。

しかし、オブジェクト単位のZソートでは下のリンクの様な表現をしたいので難しいですね。
1.箱の中のボール
2.繋がったボール

三角の頂点座標を参照してラインを繋げるではなく、三角自体をaddChild()して全てにイベントを設定するか、平面投影したXYをつかってマウスのヒットエリアを作るか…かなりウロコです!!

でも、前者だと立方体ならまだしも、球体だともの凄い数のイベントを付ける事になりますね。

ヒットエリアを作成する方が現実的な感じがします。

バウンディングボックスを作るというのはどうでしょうか?
頂点の一番高い所と低い所、一番左にある所と右にある所を毎フレーム取得する。

なんかイメージが湧いてきました
SeeDa!!さんありがとうございました。
SeeDa!!
Åê¹ÆNo.41494
投稿日時: 2009-2-18 1:55
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
Re: AS3.0 3D表現したオブジェクトのマウス判定
引用:
yosh-toshさんは書きました:
しかし、オブジェクト単位のZソートでは下のリンクの様な表現をしたいので難しいですね。
1.箱の中のボール
2.繋がったボール

立方体が2つだといったのに、ややこしい形にした奴が居るんですよぉ?
なぁに?、やっちまったなぁ

引用:
バウンディングボックスを作るというのはどうでしょうか?
頂点の一番高い所と低い所、一番左にある所と右にある所を毎フレーム取得する。

常に動いてるなら四角でも問題ないかもしれません。

球だったら常時正面を向いた平面の丸をヒットエリアとして前面に置くっていうのはどうでしょう?
箱の中の球の場合は前面を向いている時だけ表示するとか…
逆に裏を向いている時に隠すとか…
SeeDa!!
Åê¹ÆNo.41495
投稿日時: 2009-2-18 2:05
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
Re: AS3.0 3D表現したオブジェクトのマウス判定
追記:
立方体に球は、側面4つと奥面、それに球と、6つのオブジェクトに分解すればzソートを使えます。
球が2つは、収束点が2つある形で描いているなら、接合面が口の開いた球にすれば、2つのオブジェクトにしてzソートすればいけそうです。

複雑な形であればあるほど、部品毎にグループ化すればzソートしやすくなります。
yosh-tosh
Åê¹ÆNo.41507
投稿日時: 2009-2-18 17:17
新米
居住地:
投稿: 13
使用環境:
MacOSX
Flash CS3
AS3.0
Re: AS3.0 3D表現したオブジェクトのマウス判定
SeeDa!!さん

返信遅れましてすいません。

やっちまいました。。。
自分は説明が下手なので質問の内容を理解してもらう為にサンプルを作ったのですが、モデリングが容易な立方体を作ったのが、誤解を招いた原因でした。
立方体に限らず、どんな形にでも対応出来るような考え方という事を説明すべきでした。いろいろ考えてくださっていたのにすいませんでした。

出来る限り、シチュエーションによって作業方法を変えるという事はしたくありませんで、マウスの判定を作る為のクラスや関数をつくり、汎用化して作業の効率化を計れるようにしたいのでした。


引用:
箱の中の球の場合は前面を向いている時だけ表示するとか… 逆に裏を向いている時に隠すとか…


オブジェクトがうしろを向いている時とか他のオブジェクトに隠れている時などにマウスの判定をするか否かの考慮も必要ですね。

先にリンクを貼ったeco the zooはこの用になってました。↓


返信を書いていて思ったんですがeco the zooの場合、三角形2つからなるパネルを用意して、そこにキャラクターのpng画像を読み込み、SeeDa!!さんの提案して下さった三角形自体にマウスのイベントを付けているのかも知れないですね。

この方法でちょっと検証してみます。
説明下手でご迷惑お掛けした事お詫びします。
yosh-tosh
Åê¹ÆNo.41535
投稿日時: 2009-2-20 18:53
新米
居住地:
投稿: 13
使用環境:
MacOSX
Flash CS3
AS3.0
Re: AS3.0 3D表現したオブジェクトのマウス判定
SeeDa!!さん

できました!!
完全に御陰さまです。ありがとうございます!!!

マウスヒットサンプル

XYZ座標を保持する3つの頂点をグループ化してトライアングルにするクラスにextends Spriteしてトライアングル自体をaddChildしました。

そして球体に該当するトライアングルのみにマウスイベントをつけました。

トライアングル自体をaddChildする事で他のオブジェクトに隠れたときの考慮もしないで済みました。

僕のPCがロースペックのせいか、トライアングルクラスをSpriteにした時点で描画処理が少し遅くなってしまいました。(マウスイベント付けない状態でも)

ポリゴンをローポリ化するなど改良が必要ですね。

他の方のPCではどう見えているでしょう???
よかったらコメントいただけるとありがたいです
yosh-tosh
Åê¹ÆNo.41537
投稿日時: 2009-2-20 20:39
新米
居住地:
投稿: 13
使用環境:
MacOSX
Flash CS3
AS3.0
Re: AS3.0 3D表現したオブジェクトのマウス判定
追記というか訂正というか。。。

当初、希望していたオブジェクトの重なりを表現しながらのマウス判定という事では、サンプルが分かりづらいのでもう一つリンク貼っておきます。

処理の速度の違いを比較しやすいようにイベントあり、なし二つを用意しておきます。

マウスイベント付き:
サンプル1

マウスイベント無し(トライアングルをextends Spriteしていない):
サンプル2

SeeDa!!
Åê¹ÆNo.41539
投稿日時: 2009-2-22 2:07
職人
居住地: Nagoya
投稿: 221
使用環境:
WinXP
Flash CS4
au:W33SA?
Re: AS3.0 3D表現したオブジェクトのマウス判定
yosh-toshさんが頑張ってるんで…
自分もそれらしいサンプルを練習がてら作ってみました。
3Dオブジェクトのマウス判定テスト

自分の当初の予定どおり、Spliteクラスを継承したBallクラスで描画して、それらをzソートするようにしてます。

この描画方法では重くなりすぎたので各ボールのフェースのソートには至ってません。
drawTrianglesで描いたほうが軽くなるんだろうなぁ
benzou
Åê¹ÆNo.41553
投稿日時: 2009-2-24 11:10
新米
居住地:
投稿: 3
使用環境:
WinXP,Flash MX2004
MacOS 10.4,Flash MX2004
Re: AS3.0 3D表現したオブジェクトのマウス判定
ああああ
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops