Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Planning to Make a "Ballance-like" Game, seeking advice...


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 Indignant   Members   -  Reputation: 117

Like
0Likes
Like

Posted 06 December 2012 - 02:06 AM

Hello everyone!

I am planning to make a game similar to Ballance. Here's a wiki link: http://en.wikipedia.org/wiki/Ballance

I have a few questions though:
1) How can I build the physics engine? Any tutorials for me to start from scratch(code a physics engine myself might mean a lot more work but also a lot more reward)? Or is using something like "bullet" a better idea?
2) How do I render the graphics with OpenGL(What classes do I need to create and where to instantiate them)? Although I can create simple shapes and apply textures in opengl, I have no idea how to render the physical models. For example, the player controled ball, should I create a class "ball" that have both physical properties(a rigid bode and have weight) and graphical properties(wood texture, surface normals)? If so, where should I instantiate it, how can I pass its coordinate, orientation to the OpenGL?
3) How do I make the game levels? I have managed to create 3D models with blender and I can export them as .map or .obj, but I still have no idea how to make them solid objects in my game so that the ball can interact with the map.

Thank you for your advice!

Cordiall,

Indignant

Edited by Indignant, 06 December 2012 - 02:15 AM.


Sponsor:

#2 Bacterius   Crossbones+   -  Reputation: 9052

Like
1Likes
Like

Posted 06 December 2012 - 03:04 AM

1) Don't code your physics engine if your goal is to make a game (unless your game has extremely peculiar physics requirements - which this one doesn't). A physics engine adds an immense complexity to your problem and is unlikely to be even remotely close in quality and performance to an engine like Bullet which has been in development for years.

2) Yes, I would make the class contain both the physics and graphics state of the ball. You feed it into your physics engine, read back the ball's new position (and velocity, if you want to do motion blur), update the graphics state with that and render the ball this way. It depends on your physics engine exactly, but you should be able to pass vectors compatibly to both the physics engine and OpenGL so that they can interact.

3) Import those objects, and tell the physics engine to consider them as walls (that cannot be moved). There should be an option somehow to do that (either with a flag, or setting the mass to zero, or something), but again it depends on what you will end up using.

The slowsort algorithm is a perfect illustration of the multiply and surrender paradigm, which is perhaps the single most important paradigm in the development of reluctant algorithms. The basic multiply and surrender strategy consists in replacing the problem at hand by two or more subproblems, each slightly simpler than the original, and continue multiplying subproblems and subsubproblems recursively in this fashion as long as possible. At some point the subproblems will all become so simple that their solution can no longer be postponed, and we will have to surrender. Experience shows that, in most cases, by the time this point is reached the total work will be substantially higher than what could have been wasted by a more direct approach.

 

- Pessimal Algorithms and Simplexity Analysis


#3 Indignant   Members   -  Reputation: 117

Like
0Likes
Like

Posted 06 December 2012 - 07:45 AM

Hello Bacterius!

Thanks for your prompt reply. It is very helpful. I will take a closer look at the Bullet and ask when I have new questions. Thanks!

I have a few more questions though:


1)Where should I init the physics engine?

2)Where and how to make the main loop(which is supposed to be excecuted every frame, processe user input, call the phisics engine to update position and speed of objects, and call graphics engine to post redisplay, right?)

3)Should I instantiate objects in game(eg. the ball class mentioned above) in the following main function?
[source lang="cpp"]int main(int argc, char *argv[]){ glutInit(&argc, argv); glutInitWindowSize(640,480); glutInitWindowPosition(10,10); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("GLUT Shapes"); glutReshapeFunc(resize); glutDisplayFunc(display); glutKeyboardFunc(key); glutIdleFunc(idle); glClearColor(1,1,1,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glutMainLoop(); return EXIT_SUCCESS;}[/source]

4) How can I pass object to physics engine and read it back? (I know this questions is too broad, but if you know any good tutorial/documentations please let me know. Thanks a ton!)


Your reply would be much appreciated!

Best regards,

Indignant

Edited by Indignant, 06 December 2012 - 07:53 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS