2012-02-15 68 views
1

我正試圖在Silverlight中放置一個小型遊戲引擎。在Silverlight中動態地在畫布上繪製圖像

但是,我目前被困在一個相當低級別的問題上:能夠在不同的位置繪製圖像。我打算通過代碼動態地執行此操作,因爲從我所看到的情況來看,XAML中的大部分內容都傾向於至少在某種程度上是靜態的。

我已將基礎「網格」更改爲「畫布」,以便我可以在其上繪製任何地方。但是,這可能不是個好主意,但我不知道。任何或所有的建議將有所幫助。

 InitializeComponent(); 
     Image img = new Image(); 
     img.Source = new BitmapImage(new Uri("Generic URL here")); 
     ((BitmapImage)(img.Source)).DownloadProgress += new System.EventHandler<DownloadProgressEventArgs>(TestEventHandler); 

     Rect position = new Rect(new Point(25, 25), img.RenderSize); 

     LayoutRoot.Children.Add(img); 
     img.Arrange(position); 

我上面的初始嘗試是使用上面的Arrange函數將圖像'移動'到一個新的位置。但是,我不知道這是如何工作的,當我做了上面的代碼時,圖像不再顯示在屏幕上。

一個不相關的問題:是否有可能存儲與Silverlight應用程序的圖像,因爲沒有通過URL加載它們?我知道這可能是,但我真正想要問的是我會怎麼做呢?

謝謝大家的幫助。

-Stefan Zuefeldt

回答

1
  • 用Canvas代替Grid是個好主意。 Canvas是比格要更改其子的位置控制

  • 要將圖像移動到一個點p較好的情況下,你可以做到這一點:

    • 圖像添加到畫布
    • 呼叫Canvas.SetLeft(IMG,PX)和Canvas.SetTop(IMG,PY)


  • 如果要將圖像添加到xap,可以輕鬆地將圖像添加到項目中,並將圖像的生成類型設置爲「內容」(默認爲「無」或「資源」,我不確定),然後使用相對url:img.Source = new BitmapImage(new Uri(「/ tmp.jpg」,UriKind.Relative));
1

圖像的依賴屬性應設置爲定位在畫布上的圖像。

Canvas.SetTopCanvas.SetLeft

第二。當然,您的圖像可以存儲在Silverlight應用程序中。但是他們的構建操作應該設置爲Embeded Resource。

img.Source = new BitmapImage(new Uri("/MyNameSpace;components/images/someimage.png", UriKind.Relative)); 
1

XAML不一定是靜態的。如果您將XAML與數據模型結合並使用數據綁定,則XAML可以使用。

您可以在畫布上移動項目,你想要的是依賴屬性Canvas.TopCanvas.Left

here大約是簡單的動畫,像你描述一個小教程。如果你是谷歌的「silverlight遊戲教程」,你會發現噸和博客,文章和演示與源代碼噸。

至於你其他無關的問題......你可以將圖像嵌入到你的應用程序中。 here是訪問文件和圖像的大多數方法的好來源

1

我一直在使用基本UI的SL應用程序的某個時間。我可以根據我的小經驗給你一些提示。

我已將基礎「網格」更改爲「畫布」,相反,以便我可以在其上繪製任何地方。雖然,這可能是一個壞主意......

我認爲這是一個明顯的選擇。至於在畫布上定位的東西,從這個裁判SL Layout - Absolute Layout

要創建基於絕對定位的佈局,則必須更換 電網用帆布。 ......要在畫布定位控制,設置在控制以下附加屬性:Canvas.Left & Canvas.Top


..是有可能存儲圖像與Silverlight應用程序,因爲 沒有通過URL加載它們?我知道它可能是,但我真正想要問的是,我會怎麼做呢?

您可以始終保持你的圖像和形狀在字典或不便(所以在內存中),因此resizing the images(當下載完成,例如)可以從內存消耗過度救你。

這些都是我想到的一些東西。祝你好運。