c# - Winforms窗口冻结
问题描述
C#
我在我的蛇游戏中实现了一个加电系统,每次我运行该方法来产生一个加电时,窗口都会完全停止,就好像它正在处理一些沉重但永远的东西。我没有收到任何错误,也没有窗口要求关闭窗口。
这是我的脚本:
private void spawn_powerup()
{
int r = random.Next(0, Powers.Length);
foreach (Power_Up item in Powers)
{
if (item.code == r)
{
bool done = false;
do
{
int X = random.Next(0, grid_size);
int Y = random.Next(0, grid_size);
if (matriz[X, Y] == background_color)
{
matriz[X, Y] = item.Pixel_color;
done = true;
item.placed = true;
}
} while (done);
return;
}
}
}
解决方案
你从来没有设置done
在false
你的do-while-loop
.
因此,如果在您的第一次迭代中,您的 if 表达式的计算结果为true
,done
设置为true
并且您do-while
将永远运行
对于我认为你想要实现的改变你的do-while
条件!done
,但是你必须确保你的if
条件在一段时间后得到满足(但在蛇游戏中这应该不是什么大问题)。
推荐阅读
- azure - 如何使用 yaml 文件创建 azure 容器实例
- sql - 处理大量插入语句
- python - 我的代码中不断出现类型错误警告
- html - 为什么我的一些 Bootstrap 导航栏项目隐藏在移动设备上?
- postgresql - TypeORM: 带有未嵌套的大容量插入
- react-native - 反应本机同步存储与 AsyncStorage
- reactjs - 确认按钮,触发所有确认框打开
- c# - 继承的属性和 RESTful API
- ios - 关闭 iOS 15.0 模拟器窗口并运行“yarn ios”失败(域=com.apple.CoreSimulator.SimError,代码=405)
- pandas - 用于时间序列预测的 LSTM 模型没有针对某些数据进行适当的训练