嗨,我正在制作一款名为“乒乓球”的游戏。我为球的运动做了一个算法。现在,我希望每当球接触或与球员碰撞时(如上图所示),它应该反弹,就像它碰到边缘时弹跳一样。有什么建议??
对于参考。这是我的代码到现在的片段......
private void Ball()
{
int x = 1, y = 1, dx = 8, dy = 8;
System.Drawing.Point p;
while (true)
{
p = player.Location;
/*
here's where two or more if statements are required
*/
if (x < 1)
dx = dx + 6;
if (x >= 800 - ball1.Width)
dx = dx - 6;
if (y < 0)
dy = dy + 6;
if (y > 450 - ball1.Height)
dy = dy - 6;
if (x == -3 && y == -2)
dy = dy - 6;
x = x + dx;
y = y + dy;
ball1.Invoke
(
(MethodInvoker) delegate { ball1.Location = new System.Drawing.Point(x,y); }
);
Thread.Sleep(50);
}
答案 0 :(得分:0)
你不仅需要玩家的位置,还需要它的界限。那你有几个选择。最简单的就是检查
if (x - ball1.Width > player.Left && x - ball1.Width < player.Right &&
y - ball1.Height > player.Top && y - ball1.Height < player.Bottom)
如果是,则发生碰撞,并且必须反弹。
请注意,在这个简化的计算中,您实际上将球视为矩形而不是圆形。不过,你已经开始使用绑定检测了,所以我打赌你不会介意。
话虽如此,我建议你在评论中提出@ drew_w的建议。这将变得丑陋并且很难维持得非常快。找到面向对象的解决方案。 (如果没有别的,将getBoundingBox
放在所有可绘制对象上,这样就可以制作一个检查碰撞的引擎。)