对于我在学校的最后一个项目,我必须在WPF中构建Galaga,我使用两个交替可见性的画布,以便在幕后缓冲以隐藏可见的延迟。我有它所以一旦玩家开始游戏就运行这个方法
public void gameRunning()
{
while (true)
{
ProcessEvents();
UpdateAllEntities();
Draw();
Thread.Sleep(1000 / 30);
}
}
处理任何事件,更新我的船位置的实体,坏人位置,任何碰撞等。然后绘制到我的第二个(缓冲区)画布然后睡觉,以便游戏以30fps运行。
当它进入gameRunning()方法时,它会冻结。我没有做过这么复杂的事情,所以我很丢失。以下是我的Draw()调用的两种方法
public void DrawAllEntities()
{
if (buffer) {
Canvas2.Children.Clear();
Canvas2.Children.Add(theShip.getImage());
}
else
{
Canvas1.Children.Clear();
Canvas1.Children.Add(theShip.getImage());
}
}
public void SwapBuffers()
{
if (buffer)
{
Canvas1.Visibility = Visibility.Visible;
Canvas2.Visibility = Visibility.Hidden;
}
else
{
Canvas2.Visibility = Visibility.Visible;
Canvas1.Visibility = Visibility.Hidden;
}
}
我无法使DrawAllEntities()工作,我尝试使用Canvas.setLeft(),setTop(),但它不起作用。任何帮助或建议将非常感谢,谢谢。