2010-09-22 5 views
1

J'ai un MovieClip qui peut se déplacer vers le haut, le bas, la gauche et la droite. Si le MovieClip frappe un mur, le MC rebondit, et ne devrait pas passer devant le mur - mais si vous continuez à appuyer sur votre touche haut, bas, gauche ou droite et que vous ne lâchez pas, le MovieClip passera le mur. J'essaie de trouver un moyen d'empêcher cela de se produire. link of movementLimite limite de MovieClip (AS3)

// function hitWall -------------------------------------------------------------- 
    function hitWall(event:Event):void { 
     if (box.hitTestObject(wall)) { 
       box.y+=6; 
      } else if (box.hitTestObject(wall2)) { 
       box.y-=6; 

      } else if (box.hitTestObject(wall3)) { 
       box.x+=6; 

      } else if (box.hitTestObject(wall4)) { 
       box.x-=6; 
      } 

    } 

    // function keyDownEvent ------------------------------------------------------------ 
    function keyDownEvent(event:KeyboardEvent):void { 
     switch (event.keyCode) { 
      case Keyboard.UP: 
       keyUpward = true; 
       keyDownward = false; 
       break; 

      case Keyboard.DOWN: 
       keyDownward = true; 
       keyUpward = false; 
       break; 

      case Keyboard.LEFT: 
       keyLeft = true; 
       keyRight = false; 
       break; 

      case Keyboard.RIGHT: 
       keyRight = true; 
       keyLeft = false; 
       break; 
     } 
     } 

    // function keyUpEvent ------------------------------------------------------------ 
    function keyUpEvent(event:KeyboardEvent):void { 
     switch (event.keyCode) { 

      case Keyboard.UP: 
       keyUpward = false; 
       break; 

      case Keyboard.DOWN: 
       keyDownward = false; 
       break; 

      case Keyboard.LEFT: 
       keyLeft = false; 
       break; 

      case Keyboard.RIGHT: 
       keyRight = false; 
       break; 
     } 
     } 

    // function frameloop ------------------------------------------------------------ 
    function frameloop(event:Event):void { 

     if (keyUpward) { 
      forwardMove -=2; 
     } 
     if (keyDownward) { 
      forwardMove += 2; 
     } 
     if (keyLeft) { 
      sideMove -= 2; 
     } 
     if (keyRight) { 
      sideMove += 2; 
     } 

     forwardMove +=(0-forwardMove)/inertia; 
     sideMove +=(0-sideMove)/inertia; 

     box.y+=forwardMove; 
     box.x+=sideMove; 

     } 

Répondre

2

Essayez d'écouter la position de votre MovieClip avec un événement enterFrame, lorsque le MovieClip est hors limites, vous pouvez supprimer l'écouteur d'événement du clavier ou de déclencher un événement de clavier opposé et faire rebondir MovieClip dans la direction opposée

S'il vous plaît noter qu'il peut entrer en conflit avec votre méthode hitWall() de sorte que vous pouvez finir par avoir à utiliser une solution sur l'autre

0

en gros, chaque fois que vous déplacez l'objet, vous devez tester pour voir si il est en collision avec le mur. Si c'est le cas, vous devez définir sa position juste à l'intérieur de la zone "sûre". Vous feriez ces tests au bas de votre frameloop.