这场比赛还没有完成,我已经创造了球击中棋盘的部分,但是在比赛中存在问题,那就是球在板上。为了更好地理解和理解我已经在下面附上了一张图片,请仔细观察并了解你对这个错误的看法。
public partial class PingPong : Form
{
public PingPong()
{
InitializeComponent();
timer1.Enabled = true;
timer1.Interval = 30;
}
int mx = 5;
int my = 5;
private void timer1_Tick(object sender, EventArgs e)
{
if (ball.Bounds.IntersectsWith(boardCenter.Bounds))
{
mx = mx * -1;
my = my * 1;
}
else if (ball.Location.Y >= this.ClientSize.Height - ball.Height)
{
mx = mx * 1;
my = my * -1;
}
else if (ball.Location.Y <= 0)
{
mx = mx * 1;
my = my * -1;
}
else if (ball.Location.X >= this.ClientSize.Width - ball.Width)
{
mx = mx * -1;
my = my * 1;
}
ball.Location = new Point(ball.Location.X + mx, ball.Location.Y + my);
}
private void PingPong_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
{
board.Location = new Point(board.Location.X, board.Location.Y - 4);
}
else if (e.KeyCode == Keys.Down)
{
board.Location = new Point(board.Location.X, board.Location.Y + 4);
}
}
}
答案 0 :(得分:0)
在我看来(根据您提供的视频)您的逻辑实际上是正确的,问题似乎是球从后面击中了板,因此在窗口的左侧之间快速计算碰撞和董事会的背面。
您应修改代码,以便在与电路板相同的X位置计算与窗口左侧的碰撞。例如,如果棋盘X的位置从屏幕的左侧固定在20,那么球与球的左侧之间的碰撞就会达到20,这样球就永远无法到达后面。董事会。 (同样的原则适用于屏幕右侧和第二块板。)