Flash as3拖放物理

时间:2014-06-28 10:40:48

标签: flash physics gravity

在Flash cc as3中我想知道如何修复我遇到的问题,问题是我正在制作拖放游戏。当你拖动它移动的物体时,当它掉落时,重力会将它拉到地面。但是我需要知道如何让物体不要在半空中停下来,而是在x轴上稍微移动然后着陆,而不是如果你尽可能地将它扔得很难它会停在空中和陆地而不是优雅着陆...

这是我的代码

var drag:Number = 1;

gotoAndStop(1, "Minigame-Block");

Block1.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag_4);

function fl_ClickToDrag_4(event:MouseEvent):void
{
    Block1.startDrag()
    gravity = 0
}

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop_4);

function fl_ReleaseToDrop_4(event:MouseEvent):void
{
    Block1.stopDrag();
    gravity = 0.9
}

{
    var gravity = 0.9;
var floor = 711.95;
Block1.y = floor;
Block1.speedY = 0;
Block1.impulsion = 10;
stage.addEventListener(Event.ENTER_FRAME, enterframe);
function enterframe(e:Event) {
    Block1.speedY += gravity;
    Block1.y += Block1.speedY;
    if(Block1.y > floor) {
        Block1.speedY = 0;
        Block1.y = floor

    }

}
stage.addEventListener(KeyboardEvent.KEY_DOWN, space);
function space(e:KeyboardEvent) {
    if(e.keyCode == Keyboard.SPACE) {
        Block1.speedY = -Block1.impulsion
    }
}
}

1 个答案:

答案 0 :(得分:1)

在没有空气阻力的世界中,物体速度的x分量保持不变,而y分量由于重力而以恒定速率变化。如果用户保持物体静止并掉落,它应该垂直落下,但如果它们扔掉它,它应该落入弹道弧(抛物线)。

您要做的是在拖动过程中记录速度的x分量,然后在该分量下降时继续将该分量添加到x位置。这意味着实现一个MOUSE_MOVE处理程序,它从前一个x位置减去当前x位置,除以自上一个事件以来经过的帧数,并将其存储为Block1.speedX。然后只需添加行

Block1.y += Block1.speedY;
Block1.x += Block1.speedX;  // <--

您可以对此进行更详细的说明,并将speedX计算为移动平均线;这将使物理学感觉更加真实。