人物击中测试墙

时间:2014-09-20 23:06:05

标签: actionscript-3 flash hittest

我目前的平台游戏项目存在的问题是角色在击中角色左侧的墙壁之前停止,并且在角色的右侧停止太晚。

CharacterLeftHitTest

CharacterRightHitTest

以下是与问题相关的脚本:

char.topBumping=false;
char.bottomBumping=false;
char.leftBumping=false;
char.rightBumping=false;

char.speed=0;
char.maxSpeedConstant=10;
char.minSpeedConstant=-10;

char.xVel=0;
char.yVel=0;

stage.addEventListener(Event.ENTER_FRAME,EnterFrame);
function EnterFrame(e:Event){


    //local points
    top_left_point_local = new Point(char.top_left.x,char.top_left.y);
    bottom_left_point_local = new Point(char.bottom_left.x,char.bottom_left.y);

    top_right_point_local = new Point(char.top_right.x,char.top_right.y);
    bottom_right_point_local = new Point(char.bottom_right.x,char.bottom_right.y);

    //global points
    top_left_point = new Point(char.localToGlobal(top_left_point_local).x,char.localToGlobal(top_left_point_local).y);
    bottom_left_point = new Point(char.localToGlobal(bottom_left_point_local).x,char.localToGlobal(bottom_left_point_local).y);

    top_right_point = new Point(char.localToGlobal(top_right_point_local).x,char.localToGlobal(top_right_point_local).y);
    bottom_right_point = new Point(char.localToGlobal(bottom_right_point_local).x,char.localToGlobal(bottom_right_point_local).y);


    if(ground.hitTestPoint(top_left_point.x,top_left_point.y,true)){
        char.leftBumping=true;
    }
    if(ground.hitTestPoint(bottom_left_point.x,bottom_left_point.y,true)){
        char.leftBumping=true;
    }


    if(!ground.hitTestPoint(top_left_point.x,top_left_point.y,true)&&!ground.hitTestPoint(bottom_left_point.x,bottom_left_point.y,true)){
        char.leftBumping=false;
    }


    if(ground.hitTestPoint(top_right_point.x,top_right_point.y,true)){
        char.rightBumping=true;
    }
    if(ground.hitTestPoint(bottom_right_point.x,bottom_right_point.y,true)){
        char.rightBumping=true;
    }
    if(!ground.hitTestPoint(top_right_point.x,top_right_point.y,true)&&!ground.hitTestPoint(bottom_right_point.x,bottom_right_point.y,true)){
        char.rightBumping=false;
    }

    if(char.rightBumping){
        if(char.xVel>0){
            char.xVel=0;
            char.speed=0;
        }
    }
    if(char.leftBumping){
        if(char.xVel<0){
            char.xVel=0;
            char.speed=0;
        }
    }


    char.x+=char.xVel;
    char.y+=char.yVel;

}

还有其他人遇到过这个问题吗?任何帮助将不胜感激。

更新

这是问题的核心,由于某种原因,即使角色静止不动(左边没有按下),撞到左墙的角色也会出现在这里。

enter image description here

1 个答案:

答案 0 :(得分:0)

好吧,经过多次加剧,我终于解决了这个问题。动画片段内部的方向决定了它的整体位置。我从来不知道。我一直认为影片剪辑的内部与影片剪辑中心的定位并不重要。经验教训,总是将影片剪辑的内部集中在mc的舞台上以简化事情。