Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Monogame Introduction (FR)

27704a8146ddc18a760150aba2f9e92c?s=47 Aloïs Deniel
September 07, 2016

Monogame Introduction (FR)

Une présentation des concepts de base de développement de jeux vidéos au travers du framework Monogame.

27704a8146ddc18a760150aba2f9e92c?s=128

Aloïs Deniel

September 07, 2016
Tweet

More Decks by Aloïs Deniel

Other Decks in Programming

Transcript

  1. MONOGAME Cross-Platform Native Mobile Development in Paris Aloïs DENIEL @aloisdeniel

    07/09/2016
  2. Technical Leader Xamarin Mon travail Aloïs DENIEL alois.deniel@orange.com @aloisdeniel Pourquoi

    ce sujet ? Première expérience du C# de par ces technologies Expérience différente de l’UI classique Basé sur Xamarin Répond à des besoins différents Où ? Orange Applications for Business Rennes
  3. Le framework MONOGAME Xamarin .NET DirectX OpenGL SharpDX SDL2 Implémentation

    open source et multi-plateformes du framework de développement graphique XNA désormais abandonné par Microsoft. Il est principalement utilisé pour le développement de jeux-vidéo en 2D.
  4. Productions reconnues Jeux-vidéo multiplateformes Towerfall FEZ Bastion Infinite Flight Transistor

    Mercenary Kings
  5. Outils et APIs MONOGAME Xamarin / .NET C# Visual Studio

    Xamarin Studio Monogame Content Pipeline PNG WAV MP3 Font
  6. Cycle principal Draw Update Initialize LoadContent Rendu temps réel Inputs

  7. Cycle principal La classe centrale : Game public class Game

    : Idisposable { // … protected virtual void Initialize (); protected virtual void LoadContent (); protected virtual void Update (GameTime time); protected virtual void Draw (GameTime time); }
  8. None
  9. ContentPipeline Packaging des ressources

  10. ContentManager Gestionnaire de ressources this.Content.RootDirectory = "Content"; protected override void

    LoadContent() { this.ballTexture = this.Content.Load<Texture2D>("assets"); }
  11. None
  12. protected override void LoadContent() { this.texture = Content.Load<Texture2D>("assets"); } Chargement

    de texture Depuis une image
  13. protected override void Draw (GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.Black); spriteBatch.Begin(SpriteSortMode.Immediate); spriteBatch.Draw(this.texture,

    this.position1, Color.White); spriteBatch.Draw(this.texture, this.position2, Color.White); spriteBatch.Draw(this.texture, this.position3, Color.White); spriteBatch.End(); Spritebatch Ordonnanceur de dessin Begin Draw Draw Draw End
  14. Tuiles 1 2 3 1 1 1 2 3 3

    Portion d’image
  15. Tuiles var source = new Rectangle(50,0,50,50); var destination = new

    Rectangle(150,0,50,50); spriteBatch.Draw(this.tiles, sourceRectangle: source, destinationRectangle: destination); Source 2 Destination tiles.png Portion d’image
  16. Animations t=1 t=2 Changement de portion

  17. La caméra Ecran Ecran Rotation Translation Zoom

  18. La caméra Ecran Ecran Translation 1 Matrix.CreateTranslation(-100,0,0) Translation

  19. La caméra Ecran Ecran Translation 2 Matrix.CreateRotationZ(0.05f) Rotation

  20. La caméra Ecran Ecran Zoom 2 Matrix.CreateScale(2) Zoom

  21. La caméra Var transform = Matrix.CreateTranslation(new Vector3(-100,0,0)) * Matrix.CreateRotationZ(0.05f) *

    Matrix.CreateScale(new Vector3(2,2,1)); spriteBatch.Begin(transformMatrix: transform); Calcul matriciel Ecran
  22. this.font = Content.Load<SpriteFont>("font"); Polices de caractères Chargement et affichage spriteBatch.DrawString(this.font,"Hello

    World", new Vector2(20,20));
  23. None
  24. MediaPlayer MediaPlayer.Play(song); MediaPlayer.IsRepeating = true; MediaPlayer.Pause(); Musiques this.song = Content.Load<Song>("music");

  25. SoundEffect Son this.jumpSound.Play(volume,pitch,pan); this.jumpSound = Content.Load<SoundEffect>("jump");

  26. None
  27. Capter les entrées de l’utilisateur var state = Mouse.GetState(); state.X

    , state.Y, state.LeftButton, state.RightButton, … var state = Keyboard.GetState(); state.IsKeyDown(Key.A), … var state = GamePad.GetState(PlayerIndex.One); state.IsButtonDown(Buttons.A), state.ThumbSticks.Left, … var state = TouchPanel.GetState(); state.First().Position, state.First().Id, state.First().Pressure, …
  28. Gérer l’irrégularité update draw update draw update draw temps dt

    = 50ms dt = 20ms this.ballPosition += new Vector2(0, (float)gameTime.ElapsedTime.TotalSeconds * Ball.Speed)
  29. Physique origine destination théorique destination obstacle collision Collisions AABB origine

    Mouvement / Gravité A = M * (0, 9.8) V += A * delta P += 0.5 * V * delta * delta Simulation du monde
  30. Entity/Component/System Couramment utilisé (i.e Unity3D) Player int X { get;

    set; } int Y { get; set; } Texture2D Texture { get; set; } float Health { get; set; } void Update(int time); void Draw(); Modèle de développement Entity int X { get; set; } int Y { get; set; } PositionComponent float Health { get; set; } HealthComponent string Texture { get; set; } Rectangle Source { get; set; } Rectangle Destination{ get; set; } SpriteComponent RenderSystem RulesSystem void Draw(); void Update(int time); Int Identifier { get; set; }
  31. http://goo.gl/oeYUyq

  32. None
  33. Solutions Tiled + TiledSharp Affichage de tuiles Entitas Entity/Component/System Framework

    Farseer Moteur physique Monocle Engine Moteur complet (par Matt Thorson) Frameworks Autres solutions techniques Unity Solution payante https://github.com/aloisdeniel/awesome-monogame
  34. Lancez-vous! Architecture différente Enrichissant car combinaison de plusieurs domaines :

    mathématiques, physique, dessin, audio, vidéo, code Partir d’APIs très simples, pour construire des choses de plus en plus complexes Soyez créatif Commencez simple
  35. Merci N’hésitez pas à me contacter @aloisdeniel alois.deniel@orange.com