So I want to be a game developer....

Started by
48 comments, last by obizues 11 years, 8 months ago

JWalsh, hopefully you still follow this thread or will see this but I have a few more questions for you.


I am, but you can always send me a PM. :)


I'm currently finishing up my summer internship and because of downtime and completing a project faster than expected I'm basically killing time. We have access to Visual Studio C++ so I decided to hammer through my first big 700 page C book. I'm about 3/4 of the way through, and will most likely power through and finish it within today and the 8 hours I have tomorrow.


Fantastic! Nice work. Note, all of the Visual languages (VC++, VC#, and VB) are available as Express Editions from Microsoft and are free to download. Also, Visual Studio 2012 is currently in beta and is available to download to test - even the Ultimate Edition. Also, the Express Editions of 2012 will be available for free in August.


I'm hearing from a lot of people that I should spend a good amount of time with the Win32 API before I tackle the DirectX API. Is this true?


No. The Win32 API is the native ASM/C (not C++) framework Microsoft used to build Win95+, though many of the frameworks that exist today still use it "under-the-hood". Which is to stay, they still listen for Win32 events, and they still handle the Win32 message pump. However, the Win32 API is not object-oriented, not easy to read, and full understanding is only important if you're interested in knowing the Windows UI at a very deep level. Most programmers today either use WPF, which doesn't require knowing the Win32 API at all, or WinForms, which only requires knowing parts of the Win32 API for advanced functionality. There's no reason to dive into the Win32 API right away. Save that for when you've mastered your current needs and are ready to go more advanced.


Can you explain a little more about step 4 where you reference the wrapper around DirectX that you suggested?


Sure, but bear with me while I take you there in a fun, roundabout way... If you've been learning C# and making some 2D games with XNA for a while, at some point you'll decide you're ready to move on to 3D. At which point, moving on to Unity is a great suggestion, because it lets you get familiar with the "rules" of working in 3D, without having to worry about the complex math involved in performing 3D collision detection or 3D rendering.

But, at some point you'll have mastered that as well and really want to get into the guts of 3D, so to speak. At which point you can pick up 3D rendering in XNA. With XNA, you'll be doing the 3D transformations and collision detection yourself, as there's no "engine" to do it for you. You'll be responsible for implementing each of the primary areas of game development yourself: graphics, audio, input, AI, physics & animation, I/O, etc...You'll be writing your own Real-Time Shaders for the GPU, and you'll be doing the complex math yourself. But, you'll be doing them with XNA. XNA is a managed wrapper around DirectX 9c, and only exposes a limited amount of functionality. Granted, it exposes 90% of the best functionality, but there are still things that it hides from you and things you cannot do. Not least of which is that we're now on DirectX 11.1. XNA doesn't allow you to interact with anything newer than DirectX 9c.

So... at some point you may decide you don't want XNA around to do all the device setup and stuff for you. You want complete control over your hardware, and you want to do so using DirectX 11. At which point, SlimDX and SharpDX (I recommend SharpDX), are light-weight wrappers and/or bindings to the native DirectX 11 API's. This allows you to continue using C#, but to have access to all the interfaces, structs, and enumerations which are used by C++ programmers when writing native DirectX applications. At this point, all the tutorials for creating devices, setting up shaders & effects, accessing and using surfaces, etc.. will all be valid. You'll just be doing it in a different language with slightly different names.

Finally, you may get around to the point where your games are as technically capable as they're going to be. You've maxed out the GPU entirely, and your games are now shifting their logic to the CPU. This generally means you're doing complex physics and/or intersection testing, AI, path-finding, etc... At which point, you'll need to move away from C# w/ Managed DirectX wrappers, and into the world of native C++ with COM-based DirectX. At this point, you're essentially a Jr. Programmer in the game industry.

I took you in this roundabout method because I wanted to stress the importance of doing this in phases. When you are ready to be using managed wrappers around DirectX 11, you'll already know what it means and how to do it. :)


At home I've started a book on XNA, and so far I am understanding the basics. I understand the game loop, why it makes sense and how basic 2D sprites sheets work along with moving graphics around the screen. Hopefully I can make pong in XNA in a week or so when I have time. I don't see it as being too challenging, but a milestone and "completed" "game" none the less.


Absolutely! Pong is a great way to start, and I look forward to playing your Pong game.
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
Advertisement

Fantastic! Nice work. Note, all of the Visual languages (VC++, VC#, and VB) are available as Express Editions from...


They have a program allowing enrolled college students in select college campuses to download VS Professional right now at http://www.dreamspark.com.


Sure, but bear with me while I take you there in a fun, roundabout way... If you've been learning C# and making some 2D games with XNA for a while, at some point you'll decide you're ready to move on to 3D.


Originally you had suggested I use Unity to make pong next and then move to more complicated XNA 2D games. Do you still think that's a good idea? Or should I stick with XNA after pong and try to make a more complicated 2D game before using Unity all together? Should I spend a good amount of time in 2D, or should I try and jump after completing ... say a clone of an older "arcade" type game?


You'll be responsible for implementing each of the primary areas of game development yourself: graphics, audio, input, AI, physics & animation, I/O, etc...You'll be writing your own Real-Time Shaders for the GPU, and you'll be doing the complex math yourself....


Haha this is where I start to feel hope, and then I become a little overwhelmed. I honestly have no idea how that step happens. What do I have to do to make that jump? It seems huge. The biggest as an outsider looking in at least. I figure I'd learn a little about it by using Unity, so it won't be such a shock?


So... at some point you may decide you don't want XNA around to do all the device setup and stuff for you. You want complete control over your hardware, and you want to do so using DirectX 11. At which point, SlimDX and SharpDX (I recommend SharpDX), are light-weight wrappers and/or bindings to the native DirectX 11 API's. This allows you to continue using C#...


So if I understand it correctly, XNA is still doing some sort of background setup even though I basically am righting my own engine? So now I'm doing the full setup at this step?


Finally, you may get around to the point where your games are as technically capable as they're going to be. You've maxed out the GPU entirely, and your games are now shifting their logic to the CPU. This generally means you're doing complex physics and/or intersection testing, AI, path-finding, etc... At which point, you'll need to move away from C# w/ Managed DirectX wrappers, and into the world of native C++ with COM-based DirectX. At this point, you're essentially a Jr. Programmer in the game industry.


This final step is just me and notepad basically? I am writing native C++ and using DirectX?


Absolutely! Pong is a great way to start, and I look forward to playing your Pong game.


I'll make sure I put it on here right away for feedback!

Thanks again JWalsh, I appreciate it.

Originally you had suggested I use Unity to make pong next and then move to more complicated XNA 2D games. Do you still think that's a good idea? Or should I stick with XNA after pong and try to make a more complicated 2D game before using Unity all together? Should I spend a good amount of time in 2D, or should I try and jump after completing ... say a clone of an older "arcade" type game?


I do not recommend using Unity for any 2D games. I recommend using XNA to do your 2D stuff, then move on to Unity and do some 3D games when you've mastered 2D, feel very comfortable in C#, and are able to get your hands on 3D artwork.


Haha this is where I start to feel hope, and then I become a little overwhelmed. I honestly have no idea how that step happens. What do I have to do to make that jump? It seems huge. The biggest as an outsider looking in at least. I figure I'd learn a little about it by using Unity, so it won't be such a shock?


You do it slowly. When you're making your own 2D games with XNA you'll just be using the SpriteBatch class, so there's no real "graphics" programming involved. But you'll still need to handle user input, playing sound effects, and basic 2D collision detection. All of which there is plenty of documentation & tutorials for. When you move on to 3D and Unity you'll learn about the 3D environment, place sound points, identify collision shapes & boundaries, etc... all of which will be a stepping stone to the next part of your learning.

The transition to developing your own engine will come once you're fairly comfortable with many of the game areas already. You'll know when it's time. It'll be when you're complaining about the limitations of the current system you're using.


So if I understand it correctly, XNA is still doing some sort of background setup even though I basically am righting my own engine? So now I'm doing the full setup at this step?


Yep. XNA is still hiding a lot of the startup & shutdown code required when using DirectX. This also happens to be when a lot of the advanced configuration happens. But even more than that, since it's based on DirectX 9, it doesn't support geometry shaders, any of the DX 10 tessellation stuff, generalized processing of vectorized data by the GPU, support for multi-threaded rendering, and several other features. Basically, XNA exposes the subset of functionality common between DirectX 9c on the PC, and that which was made available to managed programmers on the Xbox 360. But the Xbox 360 is 6 years old now, and DirectX on the PC has evolved quite a bit since then.


This final step is just me and notepad basically? I am writing native C++ and using DirectX?


Haha, not quite. The final step is using native C++ with Visual C++ or another compiler and DirectX 11.1. Most people begin by writing their own tool set, like their own world builder so they have a way to place objects in the world. So in summary, by the time you get to the last stage, you'll be making your own Unity.


I'll make sure I put it on here right away for feedback!


Great!
Jeromy Walsh
Sr. Tools & Engine Programmer | Software Engineer
Microsoft Windows Phone Team
Chronicles of Elyria (An In-development MMORPG)
GameDevelopedia.com - Blog & Tutorials
GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
"The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints
JWalsh,

I've made pong with XNA and I'd like to show it to you and recieve some feedback. It does not have a basic splash screen start menu or end when the score reaches a certain amount. I do not have an automated CPU AI opponent either. I also would have made my bars and ball smaller looking back in hindsight. I think overall I learned a good idea about the game loop and how the overall process works. I also learned a little about C# and XNA's syntax and how it handles certain things.

Is there a certain way to export it as anything else but a .exe?

How do you suggest I post it on here?

When you have a chance to look at it as well, do you suggest I go back and try and code the AI and start and completion screen? I think these are different game states, and I havent' taken the time to learn about them yet. I'm following O'Reilly's XNA 4.0 book, and took a massive vacation after Chapter 3 to see how far I could get in pong and surprised myself. I assume I'll continue to learn more as I read more.

Thanks again for your time!
Grats on your first game.

if you want you could just add it to a zip file(in windows, create a folder containing all the files required for the game to run then right click on it and select send to compressed folder) and email it to me at: myfirstname_mysurname at hotmail dot com (unless its too big).
and i'll put it on my webserver and place a link in a post here for you.

Later on you might want to look at proper installers, (I use NSIS : http://nsis.sourceforge.net/Main_Page ) myself but there are many others you can use.
[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!
Hello, I was recently in the same disposition as yourself, wanting to be a game designer and it was really just trial and error till I decided that what was best was university for me. I started off as a modder, I started making levels for Duke Nukem 3D and eventually went onto Half-Life 2. However I wanted to start developing games, but I really didn't know how without throwing myself too far in the deep end (which I did enough).

I chose to go to university, studying a games production course. Getting into the industry is, from what i've read and learned, is really just getting your foot in the door. Keeping at it with a good standard of portfolio work, and the thing that really sticks out is your passion for games! Why I chose university was purely because I cant sit down and read from a book or online. People have different ways of learning, and it really is your own opinion, some people can learn from a book, some can only learn from being told. Choose what you learn and achieve better from!

In my opinion, there is no right or wrong way to being a game designer. It really is yourself, your learning, your skill and your creativity that makes you a game developer. Here are some tips that I will give you, from my experience of trying to get into game development.

  • As much as blogs or books post about starting with 2D development, they really are correct a great way to get yourself into the feel of game development. I kept believing to myself, i'll just go straight onto 3D because I can do it. But no, I couldn't, I really didn't understand until I started making some 2D games in Actionscript 3, I started thinking more about story and gameplay.
  • Choosing a game programming language (which in fact many languages now are being adapted to make games) is really your choice. As you said you had understanding in Java, which is a great start as I started with Java too! A good set of starting languages would be:

    • Actionscript 3

      • I am making my first game on this language, due to its great learning curve and also a great start to do 2D platformers on. Great for web flash games, and you dont have to worry about Flash itself. There is a great free IDE out there, a beautiful 2D platformer engine named Flixel.
  • C #

    • A great way to advanced yourself in game programming when starting with Java. I learnt Java first (to gain principles of programming) and the transition to C# was easy to cope by. C# also has a great engine called XNA, you can make 2D and 3D games in XNA.
  • C++

    • One of the common standards for game programming, plenty of game engines and support out there, especially here at GameDev! However, in my opinion, huge learning curve getting into game programming and starting with. I brought books on it when I wanted to start game development, and it was just too much even after a chapter or two.
  • Java

    • As you have had experience in java, there is a good few engines out there for game development. However Java has mentioned by many people, can hog resources. Here is a few examples of engines I have browsed in the past:

      • lwjgl
      • jogl
      • jmonkey3 engine




  • Unity is a brilliant engine, I know many friends who started with Unity for their games. However, once again its really your ability to take on the learning curve. I just find that 3D is a big jump if you want to be a game developer.

    Scripting languages are actually an easy way to start making mods, games etc. Unreal engine for example allows the ability to make I believe games using its Unrealscript. However I find scripting sometimes, and this again in an opinion, is not as a rewarding or changeable to what your creativity craves!

    Remember, there is no right or wrong way to being a game designer. Take note on what you remember from Java and have a look at C#, the transition is of course learning a new language, but from a Java experience, you might pick it up more further. Actionscript 3 I would really recommend to just experiment and really get a feel of making a game, it really is rewarding!

    However, this is all opinionated and I really hope you have picked up some tips or just some advice from someone in the same position. Good luck with it all, keep at it and good things will come! smile.png

    ActionScript 3.0 and C# Games Programmer of 3 years.


    Grats on your first game.

    if you want you could just add it to a zip file(in windows, create a folder containing all the files required for the game to run then right click on it and select send to compressed folder) and email it to me at: myfirstname_mysurname at hotmail dot com (unless its too big).
    and i'll put it on my webserver and place a link in a post here for you.

    Later on you might want to look at proper installers, (I use NSIS : http://nsis.sourceforge.net/Main_Page ) myself but there are many others you can use.


    Hey Simon! Thanks a lot for your help. I decided to go back and re-do menu's add some sounds and then I'm going to get the AI for a CPU opponent done first before "finishing." I figure I'm only cheating myself if I don't do it the way I think it should be done to learn certain things.

    I'll post here and PM you as soon as I have a copy I'm happy with! Thanks again! I would expect it to be done by tomorrow, but then again I've never done any AI before. ;)

    I've made pong with XNA and I'd like to show it to you and recieve some feedback.


    Congrats, man! Getting started is the hardest part. Finishing is a close 2nd. smile.png


    I think overall I learned a good idea about the game loop and how the overall process works. I also learned a little about C# and XNA's syntax and how it handles certain things.


    Awesome. It sounds like you're headed down the right path. That's all you're really supposed to learn with Pong.


    Is there a certain way to export it as anything else but a .exe?

    How do you suggest I post it on here?


    In general, I prefer receiving a zip file containing all source and assets. Then I can compile it on my own and run it. I generally don't like downloading & running executable files unless it's from a trusted source. Who knows what can be in those things! smile.png And don't take it personally, it's entirely possible someone could distribute a virus without even realizing it.


    When you have a chance to look at it as well, do you suggest I go back and try and code the AI and start and completion screen? I think these are different game states, and I havent' taken the time to learn about them yet. I'm following O'Reilly's XNA 4.0 book, and took a massive vacation after Chapter 3 to see how far I could get in pong and surprised myself. I assume I'll continue to learn more as I read more.


    I recommend you keep iterating on it as much as possible. Working your way through a tutorial or book is a great way to learn and get started, but to really benefit you need to get in and play with the code yourself - make changes, add your own style to the game, etc.. Here's some ideas:


    • Add some enemy AI (that can be beaten)
    • Make obstacles slowly fall from the ceiling which reflects the ball back
    • Make the ball reflect differently depending on where on the paddle it hits
    • Add power-ups like Breakout that causes the ball to speed up/slow down, or makes the paddles change size
    • Make the ball speed up each time it bounces
    • Add title screen /w main menu and a high score screen (implement high scores)
    • Make it so each time the ball hits the paddle it chips away a little from the paddle, making it 1 pixel narrower at the point of impact
    • Add multiplayer via TCP/IP
    • ...


    Once you've gotten it as far as you can go, it's an easy transition from Pong to Breakout. That's the game I recommend people try second, as it shares a lot of common code and assets with Pong.

    Cheers!
    Jeromy Walsh
    Sr. Tools & Engine Programmer | Software Engineer
    Microsoft Windows Phone Team
    Chronicles of Elyria (An In-development MMORPG)
    GameDevelopedia.com - Blog & Tutorials
    GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
    "The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints

    In general, I prefer receiving a zip file containing all source and assets. Then I can compile it on my own and run it. I generally don't like downloading & running executable files unless it's from a trusted source. Who knows what can be in those things! smile.png And don't take it personally, it's entirely possible someone could distribute a virus without even realizing it.


    I tried to zip everything with the installer, but gmail and everything else won't let me send anything with the executable. So I guess I can just send the source and things like you suggested.


    make changes, add your own style to the game, etc.. Here's some ideas:........


    Right now I have menus, scoring, restarting, exiting and things like that.


    Once you've gotten it as far as you can go, it's an easy transition from Pong to Breakout.


    I'm actually trying to work on a "top down" hack and slash zelda type clone after I finish. I have someone helping me with basic sprites and things like that. Do you think that's an okay idea?

    How in the future do you suggest I find someone to help provide the art for the games I'm trying to make?

    For example I found a lot of free sprites, but I couldn't find any with movement and attacking sprite sheets.

    Hopefully, I'm still going down the right path, I'll let you know as soon as I get the AI done. Hopefully I'm done adding more and more every time I touch it smile.png
    <br />I'm actually trying to work on a "top down" hack and slash zelda type clone after I finish. I have someone helping me with basic sprites and things like that. Do you think that's an okay idea?<br />


    In truth, I think a Zelda style game is a pretty large jump from Pong. To implement a Zelda clone you need several systems that don't exist in pong or similar games. These include:


    • Collision Map
    • 2D frame-based animation
    • 2D texture sheets
    • RPG Gameplay mechanics
    • AI
    • Multiple Sound FX
    • More UI elements
    • A screen manager to deal with inventory/stat screen.



    How in the future do you suggest I find someone to help provide the art for the games I'm trying to make?

    For example I found a lot of free sprites, but I couldn't find any with movement and attacking sprite sheets.


    Here on GDNet you can post in the Help Wanted section. In a search engine you can search for "Sprite Sheets," however, keep in mind that all the art assets you get are copyrighted, and cannot be used in a game (that you distribute) without permission from the creator. So it's fine to use those for your own projects to learn from, but you can't use them beyond that.

    In truth, finding good 2D and 3D artists is the hardest part of starting your own larger game projects. Which is why I recommend postponing that as long as you can. A breakout clone, like Pong, doesn't really require any art assets. A few bricks, a ball, a couple paddles, and you've got all you need.
    Jeromy Walsh
    Sr. Tools & Engine Programmer | Software Engineer
    Microsoft Windows Phone Team
    Chronicles of Elyria (An In-development MMORPG)
    GameDevelopedia.com - Blog & Tutorials
    GDNet Mentoring: XNA Workshop | C# Workshop | C++ Workshop
    "The question is not how far, the question is do you possess the constitution, the depth of faith, to go as far as is needed?" - Il Duche, Boondock Saints

    This topic is closed to new replies.

    Advertisement