我正在写一个Pong游戏,我遇到了一个问题。
我正在试图弄清楚如何从一条线上弹出一个点。
我能想出的最好的方法是
这是一种可以接受的方法,还是我错过了什么?
答案 0 :(得分:5)
你只需要检查球的中心是否在桨的半径范围内,以判断它是否有反弹的时间。有一个较老的问题在calculating bounce angle上有几个答案。
答案 1 :(得分:2)
如果你想要真实的Pong感觉,那么计算新矢量比做真实反射要容易得多。 Pong只是反转dx或dy的符号。如果球击中水平障碍,则否定dy。垂直,然后否定dx。
答案 2 :(得分:1)
在你的游戏循环中,计算新的球位置,好像没有任何障碍物一样 然后检查新位置是否与障碍物相交或是否过去。 如果满足任一条件,则通过将其从障碍物中弹出来计算新的球位置。
计算给定起点,角度和距离的点的方法会派上用场:
Public Function TranslatePoint(ByVal tStartPoint As Point, _
ByVal tAngle as Decimal, ByVal tDistance As Decimal) As Point
答案 3 :(得分:0)
以下是我要做的事情:
1)假设您的乒乓边位于x = a和x = b
的线上2)让你的球位置为(x0,y0)并沿着线Ax + By = C行进
3)从中你可以很容易地计算出该线相交的点(x1,y1) 墙壁
4)你可以通过了解它来获得反弹后的线方程 (x0,y1 + y0)是反弹后的反射。 (球的y1-y0低于 交点,因此在交点之上将是y1 + y0。)
5)给定2个方程,你可以绘制你的点(假设你知道速度)。
答案 4 :(得分:0)
您可能对N Tutorials感兴趣,它会讨论游戏“N”中使用的碰撞检测和响应(包括反弹和摩擦)。
教程可能会比您特别需要的更深入,但它们编写得很好并且具有交互式示例 - 简单的反弹是第一个主题之一。
答案 5 :(得分:0)
弹跳是物理领域的一个问题,而不是图形领域。因此OpenGL不提供真正的支持。如果你看看硬件,你会发现有类似于视频卡的单独的物理卡,尽管最近的趋势是整合它们。