我正在编写一个 Pong 游戏,但遇到了一个问题。
我试图弄清楚如何从一条线上反弹一个点。
我能想到的最好的方法是
- 计算球的当前和未来位置。
- 线段:{Ball.location, Ball.location + Ball.direction}(Ball.location 和 Ball.direction 使用自定义矢量/坐标类)
- 计算生成的线段是否与任何墙壁或桨相交。
- ???还不知道该怎么做(将在单独的问题中提问)
- 在找到的第一个路口
- 将球弹离底线
- 创建一个三角形
- a = 球的当前位置
- b = 线的交点。
- c = 最接近球在线上当前位置的点。
- 找出球击中线的角度
- 角度 = cos(距离(b,c)/距离(a,b))
- 找到旋转球方向的角度
- (90-角度)*2
- 旋转球的方向并将其移动到新位置
- 暂时忽略到达线的距离,不需要完全在线
- 创建一个三角形
- 将球弹离底线
- 否则,如果没有交叉点
- 将球移动到它的新位置。
这是一种可以接受的方法还是我错过了什么?