2014-09-20 3 views
0

현재 플랫폼 게임 프로젝트의 문제점은 캐릭터의 왼쪽면 벽에 부딪 치기 전에 캐릭터가 멈추고 캐릭터의 오른쪽면에서 너무 늦게 멈추는 것입니다.캐릭터 hitTest Wall

다음

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

+0

소리가 개체 근처에있을 때 문자의 속도가 무엇인지 확인하기 만하면 문자가 물체에 가까워지면서 얼마나 많은 움직임을 만들어야하는지와 같은 문제가 있습니다. 예를 들어, 속도가 5이고 대상에서 4 픽셀 떨어진 경우 플레이어가 개체를 따라갈 수 있도록 4 픽셀만큼 이동하게하십시오. –

+0

나는 당신의 말을 알 수있다. Sally Raskal,하지만 당신은 어떻게 이것을 제안하겠습니까? – DrakeTruber

답변

0

음, 많은 악화 시간 후에 나는 마침내 문제를 해결했다. 무비 클립 내부의 방향이 전체 위치를 결정합니다. 나는 결코 그것을 알지 못했다. 저는 항상 영화 클립의 내부가 영화 클립 센터와 관련하여 어떻게 배치되었는지는 중요하지 않다고 생각했습니다. 수업을 단순화하기 위해 항상 영화 클립의 내부를 MC의 무대로 배정하는 교훈을 얻었습니다.