XNA Framework och IronRuby


Kort postning, bara så att jag inte glömmer bort det… Har lekt lite med Ruby och IronRuby under sommaren för att bredda mig och försöka se tjusningen med dynamiska språk. Lyckades nyss få till ett exempel på den grundläggande funktionaliteten i XNA Framework på PC med hjälp av IronRuby:

require ‘Microsoft.Xna.Framework, Version=3.1.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d’ require ‘Microsoft.Xna.Framework.Game, Version=3.1.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d’

include Microsoft::Xna::Framework
include Microsoft::Xna::Framework::Input
include Microsoft::Xna::Framework::Graphics

class MyGame < Game

  def initialize
    @graphics = GraphicsDeviceManager.new self
  end

  def update gameTime
    keyboardState = Keyboard.get_state PlayerIndex.One
    if keyboardState.is_key_down Keys.Space
      exit
    end
    super gameTime
  end

  def draw gameTime
    graphics_device.clear Color.CornflowerBlue
    super gameTime
  end

end

theGame = MyGame.new
theGame.run

Är jag på rätt väg? Nu ska jag sova…

Uppdaterades (2009-07-30 22:41) med lite mer funktionalitet och baserat på kommentar från Johan!


Comments (4)

  1. Håller också på att lära mig Ruby, körde mycket dynamiska/skriptiga språk förr och har saknat det. Det roligaste jag sett hittils med Ruby är möjligheten att göra egna DSL. Ett problem som jag sett det med för "finurlig" Rubykod är nog att det kan bli bra knepigt för andra programmerare debugga. Men på rätt nivå så känns Ruby som ett riktigt skönt programmeringsspråk att både skriva och läsa.

    Man får inte glömma att skriva tester bara 🙂

    Det som stör mig mest med IronRuby är nog att man blivit så bortskämd med VisualStudio när man kodar C# och VB.NET. Vilken editor använder du?

  2. Om man vill vara lite mer Ruby-aktig så ska kanske din Draw() metod skrivas med liten bokstav.

    Jag gillar att man i IronRuby kan anropa .NET ramverkets klasser och metoder med "Ruby-stil", exempelvis:

    System::Console.WriteLine("Funkar")

    System::Console.WriteLine "Funkar också"

    System::Console.write_line "Funkar utmärkt"

  3. Ett vanligt Ruby-idiom när det är enkla if-satser (speciellt av typen guard clause) är:

    def update gameTime

       keyboardState = Keyboard.get_state PlayerIndex.One

       exit if keyboardState.is_key_down Keys.Space

       super gameTime

    end

    Mvh

    Niclas

  4. Plus snake_case istället för CamelCase på alla variabler, lite samma sak som Johan Danforth var inne på.

    gameTime blir game_time, o.s.v.

    CamelCase på klassnamn, annars snake_case.

    Mvh

    Niclas