问题标签 [billiards]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
152 浏览

java - 我想不出移动球的方法

我目前正在做一个 3 垫台球游戏项目。到目前为止,我已经在桌子上添加了两个球。我正在尝试移动其中一个球,但我很难做到这一点。我应该使用计时器吗?如果是这样,那么你能告诉我一种在我的代码上使用计时器的有效方法,这样我就可以移动我的球了吗?

您的帮助将不胜感激。提前致谢。法尔汉·哈桑

我试图为班级球创建一个移动功能。但是我不确定我应该在函数中放什么,我已经添加了 xSpeed 和 ySpeed。xLocation 和 yLocation 根据 xSpeed 和 ySpeed 变化。

希望我可以有两个可移动的球来玩游戏,它们应该会在击中屏幕边缘时反弹,并且它们应该能够随着时间的推移而减速。为此,我正在考虑使用阻尼器(我将 xSpeed 和 ySpeed 乘以小于 1 的数字,最终它会减慢球的速度)

0 投票
2 回答
39 浏览

java - 如何删除白色背景以及如何添加棍子?

我正在尝试为我的项目创建台球游戏,但我很难同时添加棒和球。此外,当我添加球时,JFrame 的背景变为白色,它实际上应该是绿色(表格的颜色)。

您的帮助将不胜感激。

我尝试使用Graphics. 例如g2d.setBackground(Color.green). 哪个没用



0 投票
1 回答
63 浏览

c++ - 如何计算运动物体在直线上的位置

所以基本上我在 C++ 上制作一个台球游戏(有点)。在我开始编码之前,我仍在思考这个理论以及如何准确地实现它,我有点卡住了。因此,给出了球的起始坐标,并且还给出了关于射门的功率以及带有坐标的射门方向的输入。

例子:

幂意味着基本上它会走 X * 给定坐标的距离。因此,如果它是 1,它只会达到 230 110,但如果它更多,它将成为该距离的两倍、三倍、四倍等。(应忽略外部因素 - 摩擦等)

到目前为止,我已经设法创建了一个算法来找到球将要经过的路线。但我不知道球会停在这条线的哪一点。任何帮助将不胜感激!

还有一件事,我还需要计算如果撞到台球桌的墙壁会去哪里(台球桌是一个 2:1 的矩形,具有给定的边缘坐标),我还设法找到了它的位置会继续前进,但不是它停止的确切点。

TL; DR 我需要找到台球将停在的行进线点。

0 投票
1 回答
69 浏览

2d - 球和不可移动物体(墙)之间的 2D 碰撞(弹性碰撞?)

所以我正在做一个简单的台球游戏(没有球对球的碰撞,只有球对墙),我有点挣扎(尤其是一个实际的球(直径>0))。(在我弄清楚逻辑和物理之后,我将在 C++ 代码上实现它)

所以基本上我有一个坐标系,有台球桌的 4 个边缘、球坐标、击球方向和击球力量。

到目前为止,我已经半算出两种方法来计算球在与直径为 0 的球与墙壁碰撞时的最终位置:

  1. 一种 5 公式算法,结合矢量和线条,计算出球与墙壁碰撞时将沿其行进的结果线的公式。这里的问题是,在我得到这条线之后,我不知道如何在这条线上(坐标)找到球的确切结束位置。(我使用垂直于墙壁的线来计算它会反弹的结果角度,然后使用该角度的一些公式和 sin() cos() 我找到 a 和 b 用于线的 ax+b = y 公式. 更准确地说,我找到了具有 2 个方程组的垂线公式,然后是 2 个向量之间角度的 cos(),然后是相同角度的 sin(),以便在相同的公式中再次使用它,但为了找到相反的结果另一个坐标,然后使用我拥有的两个点画一条线)
  2. 我基本上找到了它会撞到墙上的位置,因为给定了击球的力量和方向,所以我只有 8 个案例,球会撞到四个墙壁中的每一个,然后检查我在哪个案例中,然后反转任何 x 和我需要。这样做的问题是,如果球的直径 > 0(所以它是一个实际的球,而不仅仅是一个点),那么球将不会在球的中心而是在球的侧面与墙壁发生碰撞,而我没有想法如何准确地找到球将与墙壁碰撞的位置,以及这将如何改变它将行进的线/碰撞的角度和结束位置。(这种方法可能会奏效,但很难实现,编辑:这会有所不同,因为我正在更改原始逻辑中的一些内容。

示例(我已经在代码上做了这部分):

球在 (10, 10)。击中的方向为 (20,20),功率为 1。输出:End Ball Pos = (20, 20)

球在 (10, 10)。击中的方向为 (20,20),功率为 2。输出:End Ball Pos = (30, 30)

墙壁被击中的示例(在这种情况下,比赛场地是(0,0);(320,0);(320,160);(0,160):

Ball(300, 60), hit(250, 30), power 3 直径 0: 输出(150,30) (撞墙(200, 0))

相同的情况,但直径为 10:输出(150、40)(撞墙(208.3333333、5))

我不需要只在击球后球将要结束的地方找到它撞墙的位置(一次击球可能会发生多次墙碰撞)。

更多信息(比赛场地总是 1:2;并不总是平行于 x 和 y 轴;球可以有任何直径;功率范围为 1 - 10;击球角是另一种情况,不包括在这个问题中;摩擦被忽略而II只需将球移动到指定位置,并不意味着它会永远移动)

TL;DR 需要在与墙壁碰撞后找到球的坐标。

任何帮助表示赞赏!提前致谢!