2014-09-20 4 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; 

} 

Кто-нибудь еще сталкивался с этой проблемой? Любая помощь будет высоко ценится.

Update:

Это суть проблемы, по какой-то причине, характер удара по левой стене выходит правда здесь, даже когда персонаж стоит еще (левая не нажата).

enter image description here

+0

Звучит как проблема с измельчением того, сколько движения должно быть сделано, поскольку персонаж приближается к объектам, просто проверяя, что означает скорость символов, когда они близки к объектам. Например, если их скорость равна 5 и они находятся на расстоянии 4 пикселя от объекта, разрешите игроку перемещаться на 4 пикселя, чтобы они совпадали с объектом. –

+0

Я вижу, что вы говорите, Славный Раскаль, но как бы вы предложили мне выполнить это – DrakeTruber

ответ

0

Ну, после многих часов отягчающих я, наконец, решить эту проблему. Ориентация внутри мувиклипа определяет его общее положение. Я этого никогда не знал. Я всегда думал, что неважно, как внутри мувиклипа было расположено относительно центра мувиклипа. Извлеченный урок всегда сосредотачивает внутреннюю часть мувиклипов на стадии mc, чтобы упростить вещи.