2010-09-22 79 views
1

我有一个可以向上,向下,向左和向右移动的MovieClip。如果MovieClip碰到墙上,MC会弹跳,不应该移动过墙壁 - 但如果您继续按下上,下,左或右键,并且不放开 - MovieClip将会越过墙壁。我试图找出一种办法,阻止这种情况发生。 link of movement设置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; 

     } 

回答

2

试着听听你的影片剪辑与enterFrame事件,位置时,影片剪辑是出界,你可以卸下键盘事件监听器或触发相反的键盘事件,并在该影片剪辑反弹相反的方向

请注意,它可能与你的hitWall)冲突(方法,所以你可能最终不得不使用一个解决方案比其他

0

基本上,每次移动的对象时,你必须测试,看看它正在与墙壁相撞。如果是,那么您必须将其设置在“安全”区域内。你会在你的frameloop的底部做这些测试。