优化扫雷式游戏Silverlight的性能

时间:2012-05-25 10:21:32

标签: performance silverlight bezier

我正在为Silverlight游戏设计一种扫雷类型的布局。目前,我在square控件上使用了Canvas用户控件。分配了属性。 我还想在稍后阶段添加功能。它是关于使用贝塞尔曲线弯曲并使用x,y坐标绘制曲线上的那些正方形而不是循环。然后我想将方块的x,y位置发送到XML文件中。

我的问题是,在最低内存消耗,快速高效的性能以及易于实现方面,我应该采用哪种方式作为最佳优化组合。 如果您的专家有任何其他想法,请告诉我。 在此先感谢。!

2 个答案:

答案 0 :(得分:2)

如果您可以将所有内容绘制为形状和图像(即矢量图形),并且您将能够利用图形元素的硬件加速。此外,如果您没有将方块定义为UserControls,您将获得更好的性能,您应该在代码中动态创建它们作为包含其他形状的形状,然后具有基于其位置链接到形状的对象模型(例如,字典正方形;字典squareElements)。

在内存消耗和文件访问方面,您应该将方块的x,y位置保留在内存中作为Point结构,并且仅在需要时(即当玩家离开游戏时)序列化为文件(XML很好)。

答案 1 :(得分:2)

好吧,过了几天,我自己整理了答案。我继续通过我的Square用户控件并在布局中使用它。

关于x / y位置的绘图,我使用了这个:

Point point = myElement.TransformToVisual(App.Current.RootVisual as FrameworkElement)).Transform(new Point(0, 0));

保存XML文件时出现了一个小故障,因为Silverlight 4没有为浏览器内应用程序提供提升权限。但后来我在保存按钮点击事件中使用了这个:

        SaveFileDialog dlgSave = new SaveFileDialog();
        dlgSave.DefaultExt = "xml";
        dlgSave.Filter = "XML Files (XML)|*.xml;";
        dlgSave.FilterIndex = 1;
        strXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + myXML.ToString();//myXML is the XDocument I created globally and saved data in it
        try
        {
            bool check = (bool)dlgSave.ShowDialog();
            if (check)
            {
                using (Stream stream = dlgSave.OpenFile())
                {
                    StreamWriter sw = new StreamWriter(stream, System.Text.Encoding.UTF8);
                    sw.Write(strXML);
                    sw.Close();
                    stream.Close();
                }
                MessageBox.Show("XML Saved successfully");
            }
            catch (SecurityException)
            {
                MessageBox.Show("There seems to be an issue with saving XML file on the disk, please try again...", "Something's not right", MessageBoxButton.OK);
            }
            catch (UnauthorizedAccessException)
            {
                MessageBox.Show("Saving here requires authorised permissions", "Access Denied", MessageBoxButton.OK);
            }