Performance 优化扫雷风格游戏silverlight的性能

Performance 优化扫雷风格游戏silverlight的性能,performance,silverlight,bezier,Performance,Silverlight,Bezier,我正在为silverlight中的游戏设计一种类似扫雷艇的布局。目前,我在画布控件上使用了正方形用户控件。有指定给它的属性。 我还想在以后添加一个功能。它是关于使用贝塞尔曲线弯曲,并用x,y坐标在曲线上绘制这些正方形,而不是循环通过。然后我想在XML文件中发送正方形的x,y位置 我的问题是,在内存消耗最少、性能快速高效以及易于实现方面,我应该使用哪种方式来实现最佳优化组合。 如果各位专家还有其他想法,请告诉我。 提前谢谢 如果您可以将所有内容都绘制为形状和图像(即矢量图形),您将能够利用图形元素

我正在为silverlight中的游戏设计一种类似扫雷艇的布局。目前,我在
画布
控件上使用了
正方形
用户控件。有指定给它的属性。 我还想在以后添加一个功能。它是关于使用贝塞尔曲线弯曲,并用x,y坐标在曲线上绘制这些正方形,而不是循环通过。然后我想在XML文件中发送正方形的x,y位置

我的问题是,在内存消耗最少、性能快速高效以及易于实现方面,我应该使用哪种方式来实现最佳优化组合。 如果各位专家还有其他想法,请告诉我。
提前谢谢

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


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

好吧,几天来,我自己解决了问题。我继续通过我的
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);
            }
SaveFileDialog dlgSave=new SaveFileDialog();
dlgSave.DefaultExt=“xml”;
dlgSave.Filter=“XML文件(XML)|*.XML;”;
dlgSave.FilterIndex=1;
strXML=“\n”+myXML.ToString()//myXML是我全局创建并在其中保存数据的XDocument
尝试
{
bool check=(bool)dlgSave.ShowDialog();
如果(检查)
{
使用(Stream=dlgSave.OpenFile())
{
StreamWriter sw=新的StreamWriter(stream,System.Text.Encoding.UTF8);
sw.Write(strXML);
sw.Close();
stream.Close();
}
Show(“XML保存成功”);
}
catch(SecurityException)
{
Show(“在磁盘上保存XML文件时似乎有问题,请重试…”,“出现问题”,MessageBoxButton.OK);
}
捕获(未经授权的访问例外)
{
MessageBox.Show(“在此处保存需要授权权限”,“拒绝访问”,MessageBox按钮。确定);
}

是的,@user1425606,这比预期的效果要好。虽然搜索合适的解决方案花费了更多的时间,但我也想在silverlight中制作类似的布局。