2014-09-20 1 views
0

Le problème avec mon projet de jeu de plate-forme actuel est que le personnage s'arrête avant de frapper un mur sur le côté gauche du personnage, et s'arrête trop tard sur le côté droit du personnage.Caractère hitTest Wall

CharacterLeftHitTest

CharacterRightHitTest

est le script ici lié au problème:

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; 

} 

Quelqu'un at-il rencontré ce problème? Toute aide sera très appréciée.

Mise à jour:

C'est le cœur du problème, pour une raison quelconque le caractère frappant le mur gauche sort vrai ici même si le personnage est toujours debout (à gauche n'est pas pressé).

enter image description here

+0

Cela ressemble à un problème de couper combien de mouvement devrait être fait que le personnage s'approche des objets en vérifiant simplement ce que la vitesse des caractères est quand ils sont près des objets. Par exemple, si leur vélocité est de 5 et qu'ils sont à 4 pixels de l'objet, laissez seulement le joueur déplacer 4 pixels pour qu'ils s'alignent avec l'objet. –

+0

Je vois ce que vous dites Sly Raskal, mais comment voulez-vous proposer que je remplis cette – DrakeTruber

Répondre

0

Eh bien, je me suis finalement résolu après plusieurs heures aggraver le problème. L'orientation de l'intérieur d'un MovieClip détermine sa position globale. Je n'ai jamais su cela. J'ai toujours pensé que peu importait la position de l'intérieur d'un MovieClip par rapport au centre du MovieClip. La leçon apprise, toujours centrer l'intérieur des MovieClips sur la scène du mc pour simplifier les choses.