我正在为 Silverlight 中的游戏设计一种扫雷布局。目前,我在square
控件上使用了用户Canvas
控件。有分配给它的属性。我还想在稍后阶段添加一个功能。它是关于使用贝塞尔曲线弯曲并使用 x,y 坐标在曲线上绘制这些正方形,而不是循环。然后我想在 XML 文件中发送正方形的 x,y 位置。
我的问题是,在内存消耗最少、快速高效的性能以及易于实施方面,我应该使用哪种方式才是最佳优化组合。如果各位高手有其他想法,请告诉我。提前致谢。!
我正在为 Silverlight 中的游戏设计一种扫雷布局。目前,我在square
控件上使用了用户Canvas
控件。有分配给它的属性。我还想在稍后阶段添加一个功能。它是关于使用贝塞尔曲线弯曲并使用 x,y 坐标在曲线上绘制这些正方形,而不是循环。然后我想在 XML 文件中发送正方形的 x,y 位置。
我的问题是,在内存消耗最少、快速高效的性能以及易于实施方面,我应该使用哪种方式才是最佳优化组合。如果各位高手有其他想法,请告诉我。提前致谢。!
好吧,这些天来,我自己整理了答案。我继续通过我的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);
}
如果您可以将所有内容绘制为形状和图像(即矢量图形),您将能够利用图形元素的硬件加速。此外,如果您不将正方形定义为用户控件,您将获得更好的性能,您应该在代码中将它们动态创建为包含其他形状的形状,然后根据它们的位置链接到形状的对象模型(例如字典方块;字典 squareElements)。
在内存消耗和文件访问方面,您应该将正方形的 x,y 位置作为点结构保留在内存中,并仅在需要时(即当玩家离开游戏时)序列化为文件(XML 很好)。