Advertisement

Farm simulator: Map navigation and coverage

Started by July 12, 2017 08:25 AM
3 comments, last by jpetrie 7 years, 4 months ago

Hi to everyone,

I am a experienced C++/Qt/QML programmer and I wanted to learn something more about game development. I started to read some tutorials about game development and OpenGL, but I'm a little bit puzzled,

As first project I would like to realize a very simple agricultural simulator where the player can drive a tractor and highlight the field area covered.

Since I'm a beginner in game development can you give some directions about :

  • Graphic engine for tractor rendering: I'm looking at some racing game examples to learn how to move an item on a "space". Do you know if there is some resources that can I study? 
  • Field coverage: I would like to color the area covered by tractor and detect if the player is crossing an previously covered area.

In particular I'm focusing on this last issue because it's mostly related to game logic than to the graphic (at least I guess so). I think that this involves a collision detection system. I am wondering how can I save  the area covered by the tractor and redraw the on the field when the player load a saving.

I would really appreciate any help or suggestions that could help me to learn and realize my target project.

Thank you

Carlo

If you aren't interested in using something like Unity or Unreal to build this, you might try looking at something a little more lower-level like SFML.

Are you looking for this to be a 2D game or a 3D one? There's nothing fundamentally specific to "tractor rendering," you're just going to render a 2D sprite of a tractor or a 3D model of a tractor. It will be the same as rendering any other 2D or 3D primitive using the methods provided by the tools you choose.

If the game is "tile based," mapping the covered tiles as they are driven over is fairly straightforward (your map can be as simple as an array of boolean values, indicating if the tile has been driven over yet) and so is detecting if the player crosses a previously-covered tile (check the value of the array). 

If you are expecting more free-form movement of the tractor, this may become more complex depending on how accurate you want the detection of the overdrive to be. So which is it?

Advertisement

Thank you for your reply, I realized that I didn't explain my purposes clearly. The tractor game it is only an exercise, I agree that moving any other sprite or model it will be the same. I'm a C++ and computer programming enthusiast, I would use this exercise to learn something new.

For now I wouldn't use engines like Unity or Unreal , I'm more oriented on Qt3D module that has been recently added to Qt Framework, It seems quite easy to use. I also looked at SFML you suggested,, it seems also a good starting point, there are a lot of examples and tutorials ;) 

Returning on the tractor exercise, I would like to move a 3D model on flat terrain texture, I found some examples with SFML and OpenGL that could be a good starting point. With a full 3D enviroment it is quite easy to control a camera and move the model in the 3D space. I also looked at fake 3D, such as perspective projection used by some old games without clearly understand the math behind it.

About the area coverage, I agree with you, the more practical solution is to map the area in small tiles and store in an array the tiles crossed. The problem is that tractor model would cover more than a tile. For instance I would like to handle when the tractor is both on covered tiles and free tiles.  In addition to this I think that, from an algorithmical point-of-view, storing covered tiles in an array may lead to big memory consumption or slow research of crossed area.

I think that these are already know issues, do you know if there are some resources about tiles coverage on a map, tile research algorithm and collision detection? I'm also interested in how tile based games handle big maps.

Thanks,

C.

I would suggest you start, then, by getting the basic 3D scene up and running (the ground, and the 3D tractor, and the camera control you'd like). Once you have that tackled -- and that could be a reasonably big project -- you can implement the tractor covering bit.

10 hours ago, carloferraresi said:

The problem is that tractor model would cover more than a tile. For instance I would like to handle when the tractor is both on covered tiles and free tiles.

The two main ways you'd want to handle this are either (1) consider the tractor to be "on" every tile it partially intersects or (2) consider the tractor to be "on" only one tile: the closest to its center, or the one it covers with the most surface area, et cetera. These approaches only require simple 2D rectangle math, and should be fast and easy.

10 hours ago, carloferraresi said:

In addition to this I think that, from an algorithmical point-of-view, storing covered tiles in an array may lead to big memory consumption or slow research of crossed area.

If you're going in a tile-based direction, you can't get much smaller than an array. You can try some kind of fancy RLE-like approach, or pack multiple tiles (8) into single bytes, which can help. But this is unlikely to be a memory overhead issue.

Similarly, the tile-based array approach allows you to determine extremely quickly if you've crossed a particular tile before. It won't be slow to figure that out.

If a tiled approach works for you in terms of how it would behave, it sounds to me like the best solution.

This topic is closed to new replies.

Advertisement