2012-05-25 88 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很好) 。