【问题标题】:Create vectors and collisions创建向量和碰撞
【发布时间】:2014-04-25 05:53:53
【问题描述】:

我有一个球和一根棍子(用于台球比赛)。

首先将球放在桌子的位置。在点击球时,球杆出现,我们可以通过点击球来确定球杆放置的角度(点击时我们确定鼠标相对于球中心的角度,并将球杆放置在该角度接触球)。

所以现在棍子也在桌子上。现在我只沿着那个角度拖动棍子,如果拖动到另一个角度而不是初始角度,它会返回 false。

在拖动结束时,我正在计算棒移动的距离,并且棒返回到接触球的初始位置。然后我试图根据球杆的角度和球杆移动的距离来移动球。

球在这里移动,但与其中任何一个无关。这已成为我的问题我已经更新了小提琴here

strikerGroup.on('dragend', function () {
    var strikerLastPos = strikerGroup.getAbsolutePosition();
    strikerGroup.setPosition(initStrikerGrpX, initStrikerGrpY);
    striker.speedX = striker.speedY = 2;
    var strikerGrpDistMoved = Math.sqrt(((strikerLastPos.x - strikerGroup.getAbsolutePosition().x) * (strikerLastPos.x - strikerGroup.getAbsolutePosition().x)) + ((strikerLastPos.y - strikerGroup.getAbsolutePosition().y) * (strikerLastPos.y - strikerGroup.getAbsolutePosition().y)));
    var newX = striker.getX() + (Math.cos(theta) * strikerGrpDistMoved);
    var newY = striker.getY() - (Math.sin(theta) * strikerGrpDistMoved);
    var strikerMove = new Kinetic.Tween({
        node: striker,
        duration: 5,
        x: newX,
        y: newY,
        easing: Kinetic.Easings.EaseInOut
    });
    console.log(striker.getX());
    strikerMove.play();
    layer.batchDraw();
    // strikerGroup striked the striker!!!!
});

【问题讨论】:

    标签: javascript jquery kineticjs collision game-physics


    【解决方案1】:

    你可以这样计算台球杆与球的角度:

    var dx = ballX - stickX;
    var dy = ballY - stickY;
    var angle = Math.atan2(dy,dx);
    

    然后你可以像这样沿着那个角度移动球:

    var newBallX = ballX + desiredRollDistance * Math.cos(angle);
    var newBallY = ballY + desiredRollDistance * Math.sin(angle);
    

    您想要的滚动距离取决于球杆被拉离球的距离。

    球杆被拉得越远 == 球移动得越远。

    你可以这样计算从球杆到球的距离:

    var dx = ballX - stickX;
    var dy = ballY - stickY;
    var lengthFromStickToBall = Math.sqrt(dx*dx+dy*dy);
    

    这是一个演示:http://jsfiddle.net/m1erickson/B6K9z/

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 1970-01-01
      • 2016-08-24
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2023-03-19
      • 2010-10-30
      相关资源
      最近更新 更多