我正在VB中设计一个Breakout风格的游戏,我的代码遇到了一些小问题。
我正在检查球与表格四边之间的碰撞。因此,当球与表格的底部碰撞时,游戏意味着显示一个消息框,上面写着“你失去了!”使用“重试”和“取消”按钮。
这是我在Timer1_Tick事件下编码的内容:
'check bottom of screen
If PictureBox_ball.Top >= 403 Then
'403 is the Y-coordinate of a horizontal line I have implemented
MsgBox("You Lost!", MessageBoxButtons.RetryCancel)
End If
但是,当我运行此代码时,游戏会显示多个消息框(大约25个相同的消息框)而不是显示一个消息框。它并不止于此。
当球向下移动并击中屏幕底部时,球停止移动,显示一堆消息框,然后继续向下移动并离开屏幕。
我怎么能解决这个问题?
答案 0 :(得分:0)
上面的代码在你的主循环中。由于您不会更改任何其他标志(例如:game_over = True
或撤防计时器标记),循环将继续运行,该值仍然与条件匹配,并且您将获得所有这些MessageBoxes
例如:
If not you_lost
if PictureBox_ball.Top >= 403 Then '403 is the Y-coordinate of a horizontal line I have implemented
MsgBox("You Lost!", MessageBoxButtons.RetryCancel)
you_lost = True
End If
结束如果
答案 1 :(得分:0)
在您调出 msgBox 之前,这是我在Timer1_Tick事件下编码的内容:
停止您的计时器 为什么??
因为计时器总是在滴答作响,并且当它滴答时,它会显示你的msgBox。
试试吧,我的项目之前遇到了同样的问题。