Köra XNA Framework i Silverlight

Min kollega Dag König tipsade mig om detta idag och det var för bra för att släppa innan jag går och lägger mig för natten. Tydligen så har Bill Reiss inte kunnat vänta på en eventuell portning av XNA Framework till Silverlight utan istället valt att implementera en egen lösning som han kallar för SilverSprite.

Med hjälp av hans lösning kan du skapa ett Silverlight-projekt, länka dina källkodsfiler från ett befintligt XNA Framework-projekt och med hjälp av #if SILVERLIGHT se till att ersätta alla referenser till Microsoft.Xna.Framework till SilverArcade.SilverSprite. Sedan lägger du till ett element som instansierar din Game-klass i Silverlight-applikationen, exempelvis så här:

 <UserControl x:Class="SnakeGameSilverSprite.Page"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300" xmlns:game="clr-namespace:SnakeGame">
    <Grid x:Name="LayoutRoot" Background="White">
        <Canvas>
            <game:Game1 x:Name="game"/>
        </Canvas>
    </Grid>
</UserControl>

Naturligtvis behöver du också flytta över det innehåll (content) som spelet använder till Silverlight-projektet, och sedan kan du alltså kompilera ditt spel både för PC, Xbox, Zune och Silverlight…

Hur coolt är inte det?

Ett av de spel som finns publicerade med hjälp av den här tekniken är SilverPopper vilket kan provas på här!