如何检测c#2010表达中两个绘制对象的碰撞

时间:2015-02-16 04:07:14

标签: c#

我正在尝试仅使用绘制的对象制作基本的乒乓球游戏,因此没有图片框。

这是我的代码:http://pastebin.com/pFNYa0HK

(如果需要,我可以粘贴代码的特定部分)。我需要的代码是检测球与球拍的碰撞,然后将球从球拍朝向游戏屏幕的另一侧反射。 pbCanvas是一个覆盖整个表单的图片框,是绘制所有对象的地方。

1 个答案:

答案 0 :(得分:1)

这不是我的头脑,只是为了测试与右桨的碰撞而写的:

球有三个可能的碰撞(在x,y,半径为r)和桨(矩形p):

  • 继续前进:bool CollisionFrontal = p.Contains(new Point(x+r, y));
  • 顶部:bool CollisionTop = p.Contains(new Point(x+r, y+r));
  • 底部:bool CollisionBottom = p.Contains(new Point(x+r, y-r));

然后有角落:

创建GraphicsPath for the ball

GraphicsPath  ballPath = new GraphicsPath();
ballPath.AddEllipse(p);

您可以测试与桨叶两个前角的碰撞:

  • CornerTop:bool CollisionCornerTop = ballPath.IsVisible(p.Location);
  • CornerBot:bool CollisionCornerBot = ballPath.IsVisible(new Point(p.X, p.Bottom));

您仍然需要检查直角以反射并尝试跟踪球旋转以及在非正面碰撞的情况下组合相对速度

没有旋转,方向会反射在前线或侧线上,或者与球的圆角处切角相撞时。

你通常需要将球移回到确切的碰撞点,因为碰撞通常会被“太晚”发现..

请注意,所有坐标和其他变量都应该使用浮点数!我没有在上面的代码中但你应该......