gpt4 book ai didi

javascript - 创建矢量和碰撞

转载 作者:行者123 更新时间:2023-11-29 10:44:20 25 4
gpt4 key购买 nike

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

首先将球放在 table 的位置上。单击球时,会出现棍子,这样我们可以通过单击球来确定棍子放置的 Angular (单击时我们确定鼠标相对于球中心的 Angular ,并将棍子放在触摸的那个 Angular 球)。

所以现在大棒也在 table 上了。现在我只沿着那个 Angular 拖动操纵杆,如果以不同于初始 Angular 另一个 Angular 拖动,它会返回 false。

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

球在这里移动,但不涉及任何这些。这已经成为我的问题我已经更新了 fiddle 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!!!!
});

最佳答案

您可以这样计算台球杆与球的 Angular :

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

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

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/

关于javascript - 创建矢量和碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22498201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com