2012-05-25 57 views
6

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

我的问题是,以最少的内存消耗,快速高效的性能以及易于实现的方式,我应该采用什么方式进行最佳优化组合。 如果您的专家有任何其他想法,请让我知道。 在此先感谢。

回答

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); 
      } 
+0

这工作正常吗? – user1425606

+0

是的,@ user1425606,这比预期的更好。虽然花了更多的时间来寻找合适的解决方案 – vaibhav

+0

我也想在silverlight中做类似的布局。 – user1425606

2

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

就内存消耗和文件访问而言,只有在需要的时候(例如,当玩家离开游戏时),您应该在内存中保留方块的x,y位置作为Point strucutre并序列化为文件(XML很好) 。