0

我正在创建简单的 Flash 游戏。我已经为角色添加了与墙壁、舞台等的碰撞。但正如我现在看到的,碰撞是与我添加到舞台的所有对象发生的。当我添加背景时 - 角色无法移动(因为与背景发生碰撞)。如何避免它?

这是带有字符(英雄)的 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)){
.....
}

但它仅适用于第一阶段 1,其他 2 不起作用。

4

1 回答 1

0

我猜你的主类是一个DisplayObject,否则

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

会抛出一个错误,因为它正在针对自身测试该点是否命中。由于我猜您的背景是该对象的子对象,因此背景的像素与该点发生碰撞。试着打电话

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

ETC...

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

不正确,我认为您正在寻找

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