Important
Thank you all for woring with me on providing feedback in this repository as I am working on the tutorial. Doing it through this repository was one of a few different ways I experimenting with receiving community feedback and feedback from the foundation as the tutorial was written, as I wanted to write it in public (sort of like the build in public stuff).
At this time, I will no longer be using this repository to gather feedback. Instead, the process going forward will be like this
- There is an open draft PR for the tutorial in the MonoGame repo at MonoGame/docs.monogame.github.io#85.
- All updates that I am performing are done to the
2d-tutorial-bounty
branch in my fork at https://github.com/AristurtleDev/docs.monogame.github.io/tree/2d-tutorial-bounty - Each new chapter, or significant reworks/changes, are opened as a new PR in my fork when they are ready for review. During this time, I will make a post in the MonoGame Discord for freedback as well as ask the MonoGame foundation for feedback.
- Once all feedback has been handled and a foundation member signs off on it, that chapter PR is merged into the
2d-tutorial-bounty
branch of my fork which is tied to the draft PR in the original MonoGame repository.
If there are any questions on this process, please let me know.
This repository will remain open for now as there is still things written here that need to be moved into different sections of the tutorial, but it will be put into archive mode going forward. Thank you all for your feedback and help, and I look forward to working with you all as I write this tutorial moving foward.
I have been using MonoGame for the past several years (since 2017). It was a time in my game development journey where I was looking for something that I had more control over. I didn't want to spend the time to write a full game engine, but I also wanted to have more control than what the current engines at the time (i.e. Unity) offered. At that time, there was a vast amount of resources available for getting started, but none of them felt like they fit a good beginner series. Even now, the resources available still seem this way. They either require the reader to have a great understanding of game development and programming, or they assume the reader has none and instead focuses on teaching programming more than teaching MonoGame. Even still, some relied too heavily on third party libraries, others were simply very bare bones asking the reader to just copy and paste code without explaining the what of it all.
Since then, I have written various small self contained tutorials on different topics for MonoGame to try and give back to the community for those getting started. I also participate regularly in the community discussion channels, answering questions and offering technical advice, so I'm very familiar with the topics and pain points that users get hung up on when first starting out.
My hopes with this documentation is to take the lessons I've learned, and what I've learned from helping others, to fill the gap that I wanted filled when I first started MonoGame. To present using MonoGame in a straight forward way, introducing concepts and building off of them as we go along in a way that makes sense and is easy to follow.
This documentation is meant to be an introduction to game development and MonoGame. Readers should have a foundational understanding of C# and be comfortable with concepts such as classes and objects.
Note
If you are just getting started with C# for the first time, I would recommend following the official Learn C# tutorials provided by Microsoft. These are free tutorials that teach you programming concepts as well as the C# languages. Once you feel you have a good foundation with that, come back and continue here.
This documentation will introduce game development concepts using the MonoGame framework while walking the reader through the development of a Snake clone. The documentation is organized such that each chapter should be read sequentially, with each introducing new concepts and building off of the previous chapters.
Caution
This is currently a work in progress and is not finished.
Chapter | Summary |
---|---|
Chapter 01: What is MonoGame? | Gives a brief history of MonoGame and takes the reader through the features and advantages of using MonoGame for game development. |
Chapter 02: Getting Started | Walks the reader through setting up their development environment for MonoGame development and creating their first MonoGame game application. |
Chapter 02: The Game1 File | Gives an overview of the Game1.cs file that is generated when creating a new MonoGame project. |
Chapter 04: Working With Textures | Walks the read through loading textures in MonoGame both directly from file and using the content pipeline. Then go through methods of drawing the texture, including drawing subregions within a single texture. |
Chapter 05 | (Coming soon ...) |
In additional to the chapter documentation, supplemental documentation is also provided to give a more in-depth look at different topics with MonoGame. These are provided through the Appendix documentation below:
Appendix | Summary |
---|---|
Appendix 01: MonoGame Project Templates | Shows the different MonoGame project templates available and what each one is used for. |
Appendix 02: MonoGame Project Overview | An in-depth overview of the standard MonoGame project created from a MonoGame project templates, including all files and the default contents generated for the files. |
Appendix 03: The Content Pipeline | An in-depth overview of the content pipeline workflow provided by the MonoGame framework and the individual components that make up the overall workflow. |
The following conventions are used in this documentation
Italics are used for emphasis, technical terms, and paths such as file paths including filenames and extensions.
Inline code
blocks are used for methods, functions, and variable names when they are discussed with the body a text paragraph.
// Example Code Block
public void Foo() { }
Code blocks are used to show code examples with syntax highlighting
If you ever have questions about MonoGame or would like to talk with other developers to share ideas or just hang out with us, you can find us in the various MonoGame communities below
All documentation is copyright © 2024 Christopher Whitley and is provided for educational purposes only. Permission is not granted to anyone for use of documentation for commercial reasons without express written consent by original copyright holder.
All source code in this repository that accompanies the documentation, but not including source code within the documentation is licensed under the Unlicense as follows
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
software, either in source code form or as a compiled binary, for any purpose,
commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
this software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>