Flash actionscript 3,按键碰撞检测

Flash actionscript 3, collision detection upon keypress

我试图让我的角色与我创建的墙发生碰撞,但我在这样做时遇到了困难,我尝试在其他线程中使用解决方案,但 none 奏效了。请帮助。本质上我让碰撞检测工作,但它只在点击鼠标事件时激活。

square1_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, drop);

function drag(e: MouseEvent): void {    
    e.target.startDrag();
}

function drop(): void {
    head_mc.x -= velocity;
    stopDrag();

    if (head_mc.hitTestObject(square2_mc)) {
        velocity = 0;    
        trace("Collision detected!");
    } else {
        trace("No collision.");
        velocity = 5;
    }
}

我想做的是,让我的玩家模型 head_mc 在与我的墙 square_mc 碰撞时停止向右移动。它仅在我单击对象时有效,我需要它通过仅使用箭头键将 head_mc 移动到块来工作。

您只能在点击时检测到碰撞,因为您将 hitTestObject 放在一个 MouseEvent 函数中。您可以做的是,不是在 MOUSE_UPMOUSE_DOWN 上测试碰撞,而是通过使用 TimerEvent 或直接通过 [=16= 调用函数,以频繁的时间间隔测试碰撞].这样,程序将在很短的时间间隔后继续检查碰撞,因此,当检测到碰撞时,该函数可以追踪 trace("Collision detected!"); 并且每一秒它都没有碰撞,它将继续追踪 trace("No collision."); 并且您的速度将设置为 5。

您可以这样添加函数:

function checkCollision(e: Event): void {
  if (head_mc.hitTestObject(square2_mc)) {
    velocity = 0;
    trace("Collision detected!");
  } else {
    trace("No collision.");
    velocity = 5;
  }
}

stage.addEventListener(Event.ENTER_FRAME, checkCollision);