F#Windows窗体游戏循环
我想在F#中进行游戏循环,但我有问题F#Windows窗体游戏循环,f#,F#,我想在F#中进行游戏循环,但我有问题 let rec gameLoop (gamePanel:Panel) = async { (*redraw gemaPanel *) lock gamePanel ( fun() -> let graphics = gamePanel.CreateGraphics(); let rectangle = new System.Drawing.Rectangle(100, 100, 200, 200);
let rec gameLoop (gamePanel:Panel) = async {
(*redraw gemaPanel *)
lock gamePanel ( fun() ->
let graphics = gamePanel.CreateGraphics();
let rectangle = new System.Drawing.Rectangle(100, 100, 200, 200);
graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
)
return! gameLoop (gamePanel:Panel)
}
let startGame (p:Panel) (p1:Panel) = hide p; Async.StartAsTask(gameLoop p1);()
如果我添加async,这个循环将不会执行。如果我让这个循环同步,它将永远运行
我想要的是,有一个循环,它将在第二个线程中一直工作,并且将每隔30毫秒重新绘制游戏并处理关键事件。您需要在startGame
中使用它来实际启动异步:
let startGame (p:Panel) (p1:Panel) = hide p; Async.RunSynchronously (gameLoop p1)
您需要在startGame
中使用,才能真正启动异步:
let startGame (p:Panel) (p1:Panel) = hide p; Async.RunSynchronously (gameLoop p1)
好的,谢谢。我使用Async.startask是因为我在同步运行时遇到死锁。有意义吗?我错误地认为您希望在
startGame
中等待它完成。好的,谢谢。我使用Async.startask是因为我在同步运行时遇到死锁。有意义吗?我错误地认为您希望在startGame
中等待它完成。