试图让西蒙说游戏作为我的学期项目,问题是我不能在颜色变化时添加颜色之间的延迟, 即我想添加一个延迟,以便当一个盒子颜色改变时,然后大约3~4秒后下一个盒子的颜色改变,但问题是当我把Sleep()放入我的for循环中时,系统暂停对于作为一个整体给出的金额,然后显示同时改变的所有颜色不是一个一个 ....
任何帮助,这是我点击游戏开始按钮时调用的功能。怎么解决?
void flash()
{
srand(time(NULL));
int x;
for (int i = 5; i > 0;i--)
{
x = rand() % 4;
if (x == 0)
{
button1->BackColor = System::Drawing::Color::Blue;
}
else if (x == 1)
{
button2->BackColor = System::Drawing::Color::Blue;
}
else if (x == 2)
{
button3->BackColor = System::Drawing::Color::Blue;
}
else if (x == 3)
{
button4->BackColor = System::Drawing::Color::Blue;
}
Sleep(500);
}
}
P.s我试图将睡眠置于if语句中,但这也不起作用,请帮忙吗?
答案 0 :(得分:0)
由于您的代码是单线程的,并且您正在循环中更新按钮的颜色,因此(当前)应用程序的标准绘图例程无法启动,直到循环结束。如果你想在循环中进行重绘,你必须通过(例如):
手动发出它$(':hidden').filter(function(){
return $(this).width()!=0 && $(this).height()!=0;
});
请注意,如果您长时间停留在循环中,Windows会识别出您的应用程序没有响应Windows消息并将其呈现为“无响应”#34; (窗口褪色为半白色)。为了避免这种情况,您可以使用System :: Windows :: Forms中的Timer类来实现延迟行为。