1

ステージに動的に追加されたオブジェクトのグリッドがあります。オブジェクトは Class Red または Class Blue のいずれかですが、クラスでヒット テストを実行するにはどうすればよいですか? 赤いオブジェクトにぶつかると、青いオブジェクトが消えるようにします。ビデオまたはチュートリアルへのリンクがあれば、助けてください。ありがとう。

4

3 に答える 3

3

衝突検出キットを使用する必要があります

http://code.google.com/p/collisiondetectionkit/

于 2011-07-23T00:17:10.670 に答える
3

ここにチュートリアルへのリンクがあり、その下に基本原理を示すそのチュートリアルからの抜粋があります。

import flash.events.Event;

this.addEventListener( Event.ENTER_FRAME, handleCollision)

function handleCollision( e:Event ):void
{
    if(circle_mc.hitTestObject(rect_mc))
       {
           output_txt.text = "HIT"
       }
       else
       {
           output_txt.text = "MISS"
       }
}

http://www.designscripting.com/2011/05/hittest-as3-for-collision-detection-flash-actionscript-3/

あなたがやりたいことは、おそらく上記のコードを Blue クラス内に埋め込んでから、基本的に、ステージ上のオブジェクトにヒットしたかどうかを確認して確認し、そのタイプが Red または必要なものであることを確認することです。次に、結果に基づいて必要なことを行います。

import flash.events.Event;
import mypackage.Red;

this.addEventListener( Event.ENTER_FRAME, handleCollision)

function handleCollision( e:Event ):void
{
    if(stage){
        var i:int = 0;
        for(i; i < stage.numChildren; ++i){
            if(this.hitTestObject(stage.getChildAt(i) && stage.getChildAt(i) != this){
                if(stage.getChildAt(i) is Red){
                   //This object has collided with a Red object
                }
            }
        }
    }        
}

私は頭のてっぺんからそのコードをまとめましたが、「すぐに」機能しない場合は、基本原則を使用して、それに応じて変更してください。また、すべてのフレームでステージのすべての子を同時にスキャンする多くのオブジェクトをすべて持つと、最終的には非常に集中的なタスクになり、アプリの処理が遅くなります。より望ましいのは、すべての子をチェックして誰が誰と衝突するかを確認する 2 つの入れ子になった for ループを持つ単一の enter_frame イベントをどこかに置くことです。 .

于 2011-07-23T00:22:34.587 に答える
1

http://www.foundation-flash.com/tutorials/as3hittesting/

于 2011-07-23T00:20:26.003 に答える