c # - Udvikling af et cross-platform-XNA-bibliotek

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at udvikle en cross platform applikation.
I øjeblikket har jeg oprettet følgende løsninger med deres platformspecificerede skabelon:



  • GameBase

  • Windows

  • Xbox

  • Windows Phone



Windows, Xbox og WindowsPhone bruger GameBase som reference, men jeg vil adskille forskellige kode for hver platform, der bruges i GameBase-biblioteket som eksemplet nedenfor:



    #if WINDOWS

    graphics.PreferredBackBufferWidth = 640;
    graphics.PreferredBackBufferHeight = 480;
    graphics.ApplyChanges();

    #elif WINDOWS\_PHONE

    TargetElapsedTime = TimeSpan.FromTicks(333333);
    InactiveSleepTime = TimeSpan.FromSeconds(1);

    #endif



Det virker ikke, og jeg kan se, at GameBase 's platform er Enhver CPU i Configuration Manager, så jeg spekulerer på, om det har noget at gøre med GameBase som et klassebibliotek?


Hvis ja, hvordan løser jeg det, og hvis det er muligt, vil jeg gerne beholde #if-tags.


Katalogopsætning | Windows Solution Game.cs | Solution Explorer
Katalog opsætning | Windows Solution Game.cs | Solution Explorer

Bedste reference


Du skal oprette separate Visual Studio-projekter for de forskellige platforme. Du kan genbruge kode på tværs af flere projekter ved at tilføje kilden ved hjælp af Tilføj som link . Inden for en delt kildefil, der er knyttet til flere projekter, kan du bruge #if osv. Til at adskille platformspecifik kode.


Tilføj som Link screenshot


Hvordan 'Det virker ikke' er ikke klart fra dit spørgsmål, men generelt kan du ikke opbygge en samling (f.eks. Klassebibliotek) til Windows og derefter bruge det på XBox og Windows Phone.

Andre referencer 1


At dele projekter mellem forskellige projekttyper er en vanskelig ting at gøre - bare på grund af den måde Visual Studio-projekttyper bruges på, og fordi de forskellige projekttyper faktisk skal referere til forskellige versioner af prikrammen.


Der er et par ting, der kan hjælpe:



  • Værktøjerne til bærbar klasse bibliotek - http://msdn.microsoft.com/en-us/library/gg597391.aspx

  • Plugin til Project Linker - http://msdn.microsoft.com/en-us/library/ff921108(v=PandP.20).aspx

  • Manuel klippe og indsæt (inklusive tilføj link som ovenfor)



Håber det hjælper lidt. Personligt bruger jeg i øjeblikket hovedsageligt manuelt til at klippe og indsætte og håbe, at den næste version af Portable Class Library hjælper (det skyldes Win8 Metro stuff) [5] [6]

Andre referencer 2


Ikke sikker på, om dette er dit eneste problem, men du har forkert stavet WINDOWS\_PHONE:


WINDOWS\_HPONE


burde være:


WINDOWS\_PHONE


UPDATE:


Måden jeg ville gøre er at jeg ville oprette en klassebiblioteksløsning, der kalder det noget som GameBaseLibrary. Derefter oprette et projekt der hedder GameBase og tilføj al kode derinde, som du gerne vil dele på tværs af alle platforme. (I.E. Fysik, dataadgang, osv. ..)


Derefter i den samme løsning tilføj XboxBaseLibrary, WindowsBaseLibrary, WindowsPhoneBaseLibrary og tilføj kode, der er specifik for hver platform, tilføj en reference i hvert af disse projekter til GameBase-projektet for at bruge kode derfra i hver af de tre andre projekter.


Derefter opretter 3 forskellige løsningsformer - Xbox, Window, Windows Phone og tilføjer de kompilerede dll'er fra GameBaseLibrary som en reference i hver af dem for at kunne bruge koden. Når du arbejder på hver version af kode (xbox, windows, windows-telefon), skal du være opmærksom på den kode, du skriver for at sikre, at det ikke er noget, der kan leve i GameBase-klassen, fordi du ikke vil beholde omskrive den samme kode.


På denne måde sidder hovedparten af ​​koden i GameBaseLibrary, og den platformspecifikke kode sidder inden for hver af de 3 andre projekter.


Jeg håber det er klart.