0

シンプルなフラッシュゲームを作っています。キャラクターと壁、ステージなどの衝突を追加しました。しかし、今のところ衝突は、ステージに追加するすべてのオブジェクトとの衝突です。背景を追加すると、キャラクターは移動できません(背景との衝突のため)。それを避ける方法は?

キャラクター (Hero) の myCollisionList は次のとおりです。

        var myCollisionList:CollisionList = new CollisionList(Hero);
        myCollisionList.addItem(stage1);
        myCollisionList.addItem(stage2);
        myCollisionList.addItem(stage3);

文字を左側に移動するコードの一部を次に示します。背景を追加すると、常にトレースが表示されます(「壁に触れています!」)。それを避ける方法は?

     if(left){
                                Hero.x_speed = -walkspeed;
                                setDirection(1);

                                if(myCollisionList.checkCollisions().length > 0) { // checking if is anything in collision list

// I think here is problem, but don't know how to fix It?
             if (hitTestPoint(char.x - 26, char.y+20, true)){ //checking if character touching any object (have collision with anything)

                                    trace("Touching wall!");
                                    Hero.x_speed = 0;
                                }
                                else {
                                    Hero.x_speed = 8;   
                                }}

私も HitTestObject を使用しようとしました (ただし、可能であれば、HitTestPoint を使用する必要があります)

if (Hero.HitTestObject(stage1 || stage2 || stage3)){
.....
}

ただし、最初のstage1でのみ機能し、他の2つは機能しません。

4

1 に答える 1

0

あなたのメインクラスはDisplayObjectだと思います。

hitTestPoint(char.x - 26, char.y+20, true)

ヒットのためにポイント自体をテストしているため、エラーがスローされます。あなたの背景はこのオブジェクトの子だと思うので、背景のピクセルがポイントと衝突します。電話してみる

stage1.hitTestPoint(char.x - 26, char.y+20, true)

等...

また

if (Hero.HitTestObject(stage1 || stage2 || stage3))

は間違っています。あなたが探していると思います

if (Hero.HitTestObject(stage1) || 
    Hero.HitTestObject(stage2) || 
    Hero.HitTestObject(stage3))
于 2013-09-16T14:46:55.267 に答える