2016-07-30 32 views
0

是否有人請向我展示一個使用C#編寫的小代碼示例,該示例將在Xamarin.iOS框架內預加載紋理地圖集?如何在Xamarin.iOS(C#)中預加載紋理圖集(SKTextureAtlas)?

Xamarin網站有這個頁面:

https://developer.xamarin.com/api/type/MonoTouch.SpriteKit.SKTextureAtlas/

在該網頁上,他們列出預裝紋理地圖的許多方法。但是,我只在這兩個具體方法感興趣:

PreloadTextures(SKTextureAtlas [],NSAction)

PreloadTexturesAsync(SKTextureAtlas [])

我想這兩種方法都會對運作良好我的比賽。不幸的是,我不知道如何在Xamarin.iOS框架內的C#中正確調用它們。

儘管在Web上預加載紋理圖集有很多代碼示例,但這些示例都是用Objective-C編寫的,不幸的是,我不知道如何將Objective-C代碼轉換爲C#代碼。如果你能告訴我如何在Xamarin.iOS框架中用C#編寫一些小代碼示例,使用前面提到的2種方法預加載紋理地圖集,那麼我將不勝感激。

非常感謝。

回答

1

我不是遊戲開發方面的專家,也不曾參與過遊戲開發;但是,我對Xamarin.iOS很熟悉,可以將Objective-C代碼「翻譯」爲Xamarin C#代碼。

首先,你需要創建一個「紋理圖集」陣列

var textureCollection = new SKTextureAtlas[] 
{ 
    SKTextureAtlas.FromName("firsttexturename"), 
    SKTextureAtlas.FromName("secondtexturename"), 
}; 
await SKTextureAtlas.PreloadTexturesAsync(textureCollection); 
// rather than using a completion handler like in ObjC xamarin uses the c# 5's await keyword to achieve similar functions 
//You can do what you want after it has preloaded here 
//for example 
this.StartScene() 
+0

非常感謝您對您的出色答卷。我會在今天嘗試你的代碼,並將其標記爲「已回答」。順便說一句,我不知道我是否使用完成處理程序「PreloadTextures(SKTextureAtlas [],NSAction)」的方法,這是否意味着我還可以做其他一些事情,例如在預加載過程中打印文本消息?或者這是否意味着在預加載仍在進行時,我仍然無法在代碼中執行其他任何操作? (再次提前感謝。) – Thanh

+0

從我在Apple文檔中讀取的內容中,此方法在後臺運行,xamarin異步方法僅僅是一個包裝,並且沒有理由不能使用NSAction回調函數機制。或者,您可以使用Task.ContinueWith保留在c#世界中。 –

+0

你的解釋是絕對正確的。 C#和iOS中的所有異步/等待方法僅在後臺運行,並且不會阻止程序或應用程序的流向。我今天嘗試了你的代碼,它工作的很好。太棒了。非常感謝你的幫助。 (Stackoverflow是一個很棒的論壇:-)) – Thanh