2013-03-05 16 views
6

MonoGame (framework, który zasadniczo przenosi XNA na Windows Phone 8) ma wszystkie przestrzenie nazw z prefiksem Microsoft.Xna.Framework Uważam, że minimalizuję ilość zmian kodu wymaganych podczas przenoszenia aplikacji XNA do MonoGame.Niejednoznaczne odwołanie między przestrzeniami MonoGame i Microsoft.XNA.Framework

Mój problem polega na tym, że chcę uzyskać dostęp do klasy Microphone, która, ponieważ nie została jeszcze utworzona w MonoGame, muszę ją wykorzystać od wewnątrz w oficjalnej klasie Microsoft XNA, wymaga to wyraźnego wymuszonego usunięcia standardowe referencje w pliku .csproj, które mój szablon MonoGame skonfigurował w celu uniknięcia konfliktów, który działa świetnie, a teraz jest dostępny, ale stworzyłem niejasność między kilkoma kluczowymi klasami, które istnieją zarówno w standardowym wydaniu Microsoftu, jak i MonoGame.

Błędy otrzymuję to:

Niejednoznaczne referencyjny:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

To oczywiście miało miejsce, ponieważ obok Standardowa biblioteka XNA wydana przez Microsoft, mam odniesienie do MonoGame.Framework.dll, która przydziela przestrzeń nazw, tworząc tę ​​niejednoznaczność. Jednak we wszystkich przypadkach chcę uzyskać dostęp do wersji MonoGame.

Jakieś pomysły, w jaki sposób mogę wyraźnie powiedzieć kompilatorowi, aby używał klasy MonoGame w klasie Color i Vector2, a nie oficjalnej wersji Microsoft?

Każda próba w using Color = Microsoft.Xna.Framework oczywiście nie zadziała, ponieważ oba są oznaczone tak samo w skompilowanych bibliotekach dll!

+0

Jeśli przestrzenie nazw są identyczne, wydaje się, że będziesz musiał przekompilować MonoGame, aby użyć innej przestrzeni nazw. Jedyną alternatywą jest utworzenie opakowania dla kilku metod, których chcesz użyć. Upewnij się, że wyraźnie określasz, z którego punktu odniesienia chcesz korzystać w tej nowej klasie. Ostrzegam również w odniesieniu do używania XNA, ponieważ Microsoft zasadniczo zaprzestał jego rozwoju. –

+0

Dzięki, rozważę opakowanie ... mam nadzieję na coś bardziej eleganckiego. – GONeale

+0

Chcesz użyć obu odniesień i oba mają dokładnie tę samą przestrzeń nazw, co problem z MonoGame, nie ma eleganckiego rozwiązania. Oczywiście mam poważne wątpliwości, że pełna przestrzeń nazw to 'Microsoft.Xna.Framework.Kolor "trzeba spojrzeć na kod, aby określić, co to jest. –

Odpowiedz

8

Sposób rozwiązania tego konkretnego problemu polega na użyciu extern alias (MSDN, tutorial).

W ten sposób można alias biblioteki DLL XNA firmy Microsoft i określić odpowiednie oświadczenie using tylko dla klasy Microphone. Kontynuuj normalne używanie MonoGame.

Prawdopodobnie lepszym rozwiązaniem może być utworzenie własnej klasy opakowania o nazwie Microphone w przestrzeni nazw Microsoft.Xna.Framework.Audio przy użyciu tej techniki. Połóż go w osobnym zestawie, aby nie zanieczyszczać głównego kodu źródłowego za pomocą rzeczy z extern alias.

Idealnym sposobem, oczywiście, jest rzeczywiście wdrożyć Microphone dla MonoGame i przyczyniają się go;)

(Oczywiście, ta odpowiedź nie mówi nic o tym, jak skuteczne może być mieszanie MonoGame i XNA w ten sposób, Z nadzieją, że to zadziała.)

+0

Hej, Andrew, dzięki za odpowiedź i pozdrowienia z G/C :) Tylko około godziny od ciebie ....;) Will daj "extern alias" iść, kiedy wrócę do domu, dzięki. – GONeale

+0

Ahh .. byłeś autorem "Dark" sweet :) Myślałem, że twoje imię brzmi znajomo ... – GONeale

+0

Doskonale! Uważam, że najlepszy może być zewnętrzny alias, teraz mam zadeklarowane następujące, podczas gdy gadatliwy, wolę niż przechytrzyć bibliotekę otoki: 'MonoGameFramework :: Microsoft.Xna.Framework.GraphicsDeviceManager graphics; MonoGameFramework :: Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch; prywatne MonoGameFramework :: Microsoft.Xna.Framework.Graphics.SpriteFont spriteFont; prywatny mikrofon mic = Microphone.Default; ' Pozwoliło mi to wykorzystać standardowe klasy Microsoft.XNA.Framework dostarczone przez WP8 i MonoGame, jeszcze raz dziękuję za sugestię! – GONeale

Powiązane problemy