Slowness and bug-city

Started by
8 comments, last by Lord_Evil 15 years, 10 months ago
Hey so practically finished my second game ever entirely written in C++ and OpenGL. The only problem is that my release build is unreasonably slow. I'll post my main loop at the end maybe someone could point out to why its chuggy. But first here is some art: The EVIL JELLY FISH: and the fight against good and evil the sub vs the squid: And heres the release build: http://kubapl.ath.cx/projects/SpaceInvadorsrelease.zip And heres my main game loop perhaps this is were most of the slowieness takes place:

#include <windows.h>
#include <GL/glut.h>
#include <list>
#include <cmath>
#include <iostream>
#include <cstdlib> 
#include <ctime>
#include <mmsystem.h>

#include "Object.h"
#include "Enemy.h"
#include "Projectile.h"
#include "Vector.h"
#include "Camera.h"
#include "Font.h"
#include "TGA.h"


using std::list;
using std::cout;
using std::endl;


#define SCREENHEIGHT 600 //z
#define SCREENWIDTH 900 //x
#define NUMBEROFENEMIES 8

UINT TextureArray[1];

//Game Functions
void gameLogic();
void gameLights();
short int Sprite_Collide( CObject *object1, CObject *object2 );

//BackGround objects
CObject *BackGround;
CObject *Curser;
CObject *Options;
//Game Objects
CObject *Player;
CObject *Field;
CObject *Water;
CCamera *Camera;
CEnemy  *Enemies[ NUMBEROFENEMIES ];

//Lists
list< CProjectile* >lstMissile;

bool gamePlaying = false;


void myInit()
{
	glClearColor( 0.0, 0.0, 0.0, 0.0 );
	glShadeModel( GL_FLAT );
	glEnable( GL_NORMALIZE );
	//glEnable( GL_LIGHTING );
	glEnable( GL_DEPTH_TEST ); 
		

	int nDisplayList = 0;
	nDisplayList = glGenLists( 1 );
	glNewList( nDisplayList, GL_COMPILE );
	{
		glutSolidCube( 2.0 );
	}
	glEndList();

	cout << "loading ..." << endl;

	BackGround = new CObject( true, 62, 1, 45 );
	Curser = new CObject( true, 5, 1, 5 );
	Options = new CObject( false, 45, 1, 35 );
	BackGround->loadModel( "models/plane4x4.ase" );
	BackGround->loadTexture( "texture/menu.tga" );
	BackGround->buildModel();

	Curser->loadModel( "models/cursor.ase" );
	Curser->loadTexture( "texture/cursor.tga" );
	Curser->buildModel();

	Options->loadModel( "models/plane4x4.ase" );
	Options->loadTexture( "texture/options.tga" );
	Options->buildModel();

	BackGround->setLocation( 0.0f, 1.0f, 0.0f );
	Curser->setLocation( -44.0f, 0.0f, -15.0f );
	Curser->setOrientation( 90.0f, 0.0f, 0.0f );
	Options->setLocation( 0.0, -1.0f, 0.0f );

	Player = new CObject( true, 3, 1, 3 );
	Player->loadModel( "models/plane4x4.ase" );
	Player->loadTexture( "texture/playerShip.tga" );
	Player->buildModel();
	Player->setLocation( 0.0f, 0.0f, -28.0f );

	Field = new CObject();
	Camera = new CCamera( Field );

	for( int i = 0; i < NUMBEROFENEMIES; ++i )
	{
		Enemies = <span class="cpp-keyword">new</span> CEnemy( <span class="cpp-keyword">true</span>, <span class="cpp-number">3</span>, <span class="cpp-number">1</span>, <span class="cpp-number">3</span> );
		Enemies-&gt;loadModel( <span class="cpp-literal">"models/plane4x4.ase"</span> );
		Enemies-&gt;loadTexture( <span class="cpp-literal">"texture/squid.tga"</span> );
		Enemies-&gt;buildModel();
		Enemies-&gt;setLocation( -<span class="cpp-number">35</span>.0f + <span class="cpp-number">10</span> * i, <span class="cpp-number">0</span>.0f, <span class="cpp-number">35</span>.0f );

	}

	gameLights();
}



<span class="cpp-keyword">void</span> myReshape (<span class="cpp-keyword">int</span> w, <span class="cpp-keyword">int</span> h)
{
	
	glViewport (<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, ( GLsizei ) w, ( GLsizei ) h); 
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
	gluPerspective( <span class="cpp-number">65</span>.<span class="cpp-number">0</span>, ( GLfloat ) w/( GLfloat ) h, <span class="cpp-number">1</span>.<span class="cpp-number">0</span>, <span class="cpp-number">60</span>.<span class="cpp-number">0</span> );
}

<span class="cpp-keyword">void</span> DrawAxis()
{
	GLboolean bLight = glIsEnabled( GL_LIGHTING );

	<span class="cpp-keyword">if</span>( bLight )
		glDisable( GL_LIGHTING );

	glColor3f( <span class="cpp-number">1</span>.0f, <span class="cpp-number">1</span>.0f, <span class="cpp-number">1</span>.0f );
	
	glBegin( GL_LINES );
	
	glVertex3f( <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, -<span class="cpp-number">500</span>.0f );
	glVertex3f( <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, <span class="cpp-number">500</span>.0f );

	glVertex3f( -<span class="cpp-number">500</span>.0f, <span class="cpp-number">0</span>, <span class="cpp-number">0</span> );
	glVertex3f( <span class="cpp-number">500</span>.0f, <span class="cpp-number">0</span>, <span class="cpp-number">0</span> );
	
	glEnd();

	<span class="cpp-keyword">if</span>( bLight )
		glEnable( GL_LIGHTING );
}

<span class="cpp-keyword">void</span> myDisplay()
{		
	glEnable( GL_POLYGON_SMOOTH );
	glClear( GL_COLOR_BUFFER_BIT );
	glClear( GL_DEPTH_BUFFER_BIT  );
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
	glColor3f( <span class="cpp-number">1</span>.<span class="cpp-number">0</span>, <span class="cpp-number">1</span>.<span class="cpp-number">0</span>, <span class="cpp-number">1</span>.<span class="cpp-number">0</span> );
	
	Camera-&gt;Update();
	
	<span class="cpp-keyword">if</span>( gamePlaying == <span class="cpp-keyword">false</span> )
	{
		glDisable( GL_LIGHTING );
		BackGround-&gt;loadTexture( <span class="cpp-literal">"texture/menu.tga"</span> );
		BackGround-&gt;Render();
		Curser-&gt;Render();
		Options-&gt;Render();
	}
	<span class="cpp-keyword">else</span>
	{
		glDisable( GL_LIGHTING );
		
		BackGround-&gt;loadTexture( <span class="cpp-literal">"texture/water.tga"</span> );
		BackGround-&gt;Render();
		<span class="cpp-comment">//Water-&gt;Render();</span>

		gameLogic();
		Player-&gt;Render();
		
		<span class="cpp-keyword">for</span>( <span class="cpp-keyword">int</span> i = <span class="cpp-number">0</span>; i &lt; NUMBEROFENEMIES; ++i )
		{
			Enemies-&gt;Render();
			Enemies-&gt;enemyFall( -<span class="cpp-number">1</span>, <span class="cpp-number">0</span>.<span class="cpp-number">05</span> );
		}
		
		list&lt; CProjectile* &gt;::iterator itMissile = lstMissile.begin();
		<span class="cpp-keyword">while</span>( itMissile != lstMissile.end() )
		{
			
			<span class="cpp-keyword">if</span>( (*itMissile)-&gt;IsActive() )
			{
				
				(*itMissile)-&gt;Render();	
				
				++itMissile;
			}
			<span class="cpp-keyword">else</span>
			{
				<span class="cpp-keyword">delete</span> (*itMissile);   
			
				itMissile = lstMissile.erase( itMissile ); 
			}
		
		}

	}
	<span class="cpp-comment">//DrawAxis();</span>
	
	glColor3f( <span class="cpp-number">1</span>.<span class="cpp-number">0</span>, <span class="cpp-number">0</span>.<span class="cpp-number">5</span>, <span class="cpp-number">1</span>.<span class="cpp-number">0</span> );


	glutSwapBuffers();
	glFlush();
	
}

<span class="cpp-keyword">void</span> Idle()
{
	glutPostRedisplay();
}

<span class="cpp-keyword">void</span> myKeyboard( <span class="cpp-keyword">unsigned</span> <span class="cpp-keyword">char</span> key, <span class="cpp-keyword">int</span> x, <span class="cpp-keyword">int</span> y )
{
	CVector vOri = Player-&gt;getOrientation();
	
	<span class="cpp-keyword">int</span> nDisplayList2 = <span class="cpp-number">1</span>;
	nDisplayList2 = glGenLists( <span class="cpp-number">2</span> );
	glNewList( nDisplayList2, GL_COMPILE );
	{
		glutSolidSphere( <span class="cpp-number">0</span>.<span class="cpp-number">5</span>, <span class="cpp-number">10</span>.<span class="cpp-number">0</span>, <span class="cpp-number">10</span>.<span class="cpp-number">0</span> );
	}
	glEndList();

	<span class="cpp-keyword">switch</span>( key )
	{
		<span class="cpp-keyword">case</span> <span class="cpp-number">27</span>:
			{
				<span class="cpp-keyword">if</span>( gamePlaying == <span class="cpp-keyword">false</span> )
				{
					exit(<span class="cpp-number">0</span>);
				}
				<span class="cpp-keyword">else</span>
				{
					gamePlaying = <span class="cpp-keyword">false</span>;
				}
				<span class="cpp-keyword">break</span>;				
			}
		<span class="cpp-keyword">case</span> 'x': <span class="cpp-comment">///Toggle wireframe mode.</span>
			{
				glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
				<span class="cpp-keyword">break</span>;
			}

		<span class="cpp-keyword">case</span> 'X': <span class="cpp-comment">// Toggle wireframe mode.</span>
			{
				glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
				<span class="cpp-keyword">break</span>;
			}
	<span class="cpp-comment">/*	case 'w':
			{	
				vOri.fy += 0.1f;
				break;
			}
		case 's':
			{
				vOri.fy -= 0.1f;
				break;
			}
		case 'd':
			{
				vOri.fx += 0.1f;
				break;
			}
		case 'a':
			{
				vOri.fx -= 0.1f;
				break;
			}*/</span>
	

			
		<span class="cpp-keyword">case</span> ' ':
			{
				CProjectile* pMissile = <span class="cpp-keyword">new</span> CProjectile( nDisplayList2, <span class="cpp-keyword">true</span> );
				
				pMissile-&gt;shoot( Player );
				
				lstMissile.push_back( pMissile );

				<span class="cpp-keyword">break</span>;
			}

		<span class="cpp-keyword">case</span> <span class="cpp-number">13</span>:
			{
				<span class="cpp-keyword">if</span>( Curser-&gt;getLocation().fz == -<span class="cpp-number">15</span>.0f )
				{
					gamePlaying = <span class="cpp-keyword">true</span>;
					<span class="cpp-keyword">break</span>;
				}
				<span class="cpp-keyword">if</span>( Curser-&gt;getLocation().fz == -<span class="cpp-number">20</span>.5f )
				{
					<span class="cpp-keyword">if</span>( Options-&gt;IsActive() == <span class="cpp-keyword">false</span> )
					{
						Options-&gt;setStatus( <span class="cpp-keyword">true</span> );
					}
					<span class="cpp-keyword">else</span>
					{
						Options-&gt;setStatus( <span class="cpp-keyword">false</span> );
					}
					<span class="cpp-keyword">break</span>;
				}
				<span class="cpp-keyword">if</span>( Curser-&gt;getLocation().fz == -<span class="cpp-number">26</span> )
				{
					exit(<span class="cpp-number">0</span>);
				}
				<span class="cpp-keyword">break</span>;
			}
			
		<span class="cpp-keyword">default</span>:
		<span class="cpp-keyword">break</span>;
	}

	Player-&gt;setOrientation( vOri );
	glutPostRedisplay();
}

<span class="cpp-keyword">void</span> SpecialKey( <span class="cpp-keyword">int</span> nKey, <span class="cpp-keyword">int</span> x, <span class="cpp-keyword">int</span> y )
{
	CVector vLoc = Player-&gt;getLocation();
	CVector vCurserLoc = Curser-&gt;getLocation();

	<span class="cpp-keyword">switch</span>( nKey )
	{
	<span class="cpp-keyword">case</span> GLUT_KEY_RIGHT:					<span class="cpp-comment">//right arrow key</span>
		{
			vLoc.fx += <span class="cpp-number">0</span>.5f;
			<span class="cpp-keyword">break</span>;
		}

	<span class="cpp-keyword">case</span> GLUT_KEY_LEFT:					   <span class="cpp-comment">//left arrow key</span>
		{
			vLoc.fx -= <span class="cpp-number">0</span>.5f;
			<span class="cpp-keyword">break</span>;
		}
	<span class="cpp-keyword">case</span> GLUT_KEY_DOWN:
		{
			<span class="cpp-keyword">if</span>( vCurserLoc.fz &lt;= -<span class="cpp-number">26</span>.0f )
			{
				<span class="cpp-keyword">break</span>;
			}
			<span class="cpp-keyword">else</span>
			{
				vCurserLoc.fz -= <span class="cpp-number">5</span>.5f;
				cout &lt;&lt; vCurserLoc.fz &lt;&lt; endl;
				<span class="cpp-keyword">break</span>;
			}
			
		}
	<span class="cpp-keyword">case</span> GLUT_KEY_UP:
		{
			<span class="cpp-keyword">if</span>( vCurserLoc.fz &gt;= -<span class="cpp-number">15</span>.0f )
			{
				<span class="cpp-keyword">break</span>;
			}
			<span class="cpp-keyword">else</span>
			{
				vCurserLoc.fz += <span class="cpp-number">5</span>.5f;
				cout &lt;&lt; vCurserLoc.fz &lt;&lt; endl;
				<span class="cpp-keyword">break</span>;
			}
		}

	<span class="cpp-keyword">default</span>:
	 <span class="cpp-keyword">break</span>;

	}

	Player-&gt;setLocation( vLoc );
	Curser-&gt;setLocation( vCurserLoc );


}

<span class="cpp-keyword">int</span> main( <span class="cpp-keyword">int</span> argc,  <span class="cpp-keyword">char</span>** argv )
{
	glutInit( &amp;argc, argv );
	glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
	glutInitWindowSize( SCREENWIDTH, SCREENHEIGHT ); 
	glutInitWindowPosition ( <span class="cpp-number">100</span>, <span class="cpp-number">100</span> );
	glutCreateWindow(<span class="cpp-literal">"Space Invadors"</span>);	
	
	myInit();

	glutDisplayFunc( myDisplay );
	
	glutReshapeFunc( myReshape );
	glutKeyboardFunc( myKeyboard );
	glutSpecialFunc( SpecialKey );
	glutIdleFunc( Idle );
	glutMainLoop();


	<span class="cpp-keyword">return</span> <span class="cpp-number">0</span>;
}

<span class="cpp-keyword">void</span> gameLogic()
{	
	list&lt; CProjectile* &gt;::iterator itMissile = lstMissile.begin();

	<span class="cpp-keyword">while</span>( itMissile != lstMissile.end() )
	{
		<span class="cpp-keyword">if</span>( (*itMissile)-&gt;IsActive() )
		{
			<span class="cpp-keyword">if</span>( (*itMissile)-&gt;getLocation().fz &gt;= <span class="cpp-number">30</span>.0f )
			{
				cout &lt;&lt; <span class="cpp-literal">"missile out"</span> &lt;&lt; endl;
				(*itMissile)-&gt;setStatus( <span class="cpp-keyword">false</span> );
			}
			<span class="cpp-keyword">for</span>( <span class="cpp-keyword">int</span> i = <span class="cpp-number">0</span>; i &lt; NUMBEROFENEMIES; ++i )
			{
				<span class="cpp-keyword">if</span>( Enemies-&gt;IsActive() )
				{
					<span class="cpp-keyword">if</span>( Sprite_Collide( (*itMissile), Enemies ) )
					{
						cout &lt;&lt; <span class="cpp-literal">"hit"</span> &lt;&lt; endl;
						(*itMissile)-&gt;setStatus( <span class="cpp-keyword">false</span> );
						Enemies-&gt;setStatus( <span class="cpp-keyword">false</span> );
					}
				
				}
			}
			++itMissile;
		}
		<span class="cpp-keyword">else</span>
		{
			<span class="cpp-keyword">delete</span> (*itMissile);

			itMissile = lstMissile.erase( itMissile );
		}
	
	}

	<span class="cpp-keyword">for</span>( <span class="cpp-keyword">int</span> i = <span class="cpp-number">0</span>; i &lt; NUMBEROFENEMIES; ++ i )
	{
		<span class="cpp-keyword">if</span>( Enemies-&gt;getLocation().fz &lt;= -<span class="cpp-number">28</span>.0f )
		{
			<span class="cpp-comment">//cout &lt;&lt; "you lose" &lt;&lt; endl;</span>
		}
	}

	
}


<span class="cpp-keyword">void</span> gameLights()
{
	glEnable( GL_FOG ); 
	GLfloat fogColor[ <span class="cpp-number">4</span> ] = { <span class="cpp-number">1</span>.<span class="cpp-number">0</span>, <span class="cpp-number">1</span>.<span class="cpp-number">0</span>, <span class="cpp-number">1</span>.<span class="cpp-number">0</span>, <span class="cpp-number">1</span>.<span class="cpp-number">0</span> }; <span class="cpp-comment">//Fog color set to black</span>
	glFogi ( GL_FOG_MODE, GL_EXP2 );
	glFogfv( GL_FOG_COLOR, fogColor );
	glFogf ( GL_FOG_DENSITY, <span class="cpp-number">0</span>.<span class="cpp-number">019</span> );
	glHint ( GL_FOG_HINT, GL_DONT_CARE );
	glFogf ( GL_FOG_START, -<span class="cpp-number">20</span>.<span class="cpp-number">0</span> );
	glFogf ( GL_FOG_END, <span class="cpp-number">100</span>.<span class="cpp-number">0</span> );

	glEnable( GL_BLEND ); 

	glEnable( GL_LIGHTING ); <span class="cpp-comment">// turned the lights on</span>
	<span class="cpp-comment">//created a array of clorage</span>
					 	   <span class="cpp-comment">//R		G		B		ALPHA</span>
	<span class="cpp-keyword">float</span> vAmbient[]	= { <span class="cpp-number">0</span>.5f,   <span class="cpp-number">0</span>.5f,	<span class="cpp-number">0</span>.5f,	<span class="cpp-number">1</span>.0f };
	<span class="cpp-keyword">float</span> vRed[]		= { <span class="cpp-number">1</span>.0f,	<span class="cpp-number">0</span>.0f,	<span class="cpp-number">0</span>.0f,	<span class="cpp-number">1</span>.0f };
	<span class="cpp-keyword">float</span> vGreen[]		= { <span class="cpp-number">0</span>.0f,	<span class="cpp-number">1</span>.0f,	<span class="cpp-number">0</span>.0f,	<span class="cpp-number">1</span>.0f };
	<span class="cpp-keyword">float</span> vBlue[]		= { <span class="cpp-number">0</span>.0f,	<span class="cpp-number">0</span>.0f,	<span class="cpp-number">1</span>.0f,	<span class="cpp-number">1</span>.0f };
	<span class="cpp-keyword">float</span> vDiffuse[]	= { <span class="cpp-number">0</span>.5f,   <span class="cpp-number">0</span>.5f,	<span class="cpp-number">0</span>.5f,	<span class="cpp-number">1</span>.0f };
	<span class="cpp-keyword">float</span> vSpecific[]	= { <span class="cpp-number">0</span>.5f,   <span class="cpp-number">0</span>.5f,	<span class="cpp-number">1</span>.0f,	<span class="cpp-number">1</span>.0f };
						   <span class="cpp-comment">// x    y       z      anglE?</span>
	<span class="cpp-keyword">float</span> vPosition[]  = { <span class="cpp-number">450</span>.0f, -<span class="cpp-number">50</span>.0f, <span class="cpp-number">300</span>.0f, <span class="cpp-number">0</span>.0f };
	<span class="cpp-keyword">float</span> vDirection[] = { <span class="cpp-number">450</span>.0f,   <span class="cpp-number">1</span>.0f, <span class="cpp-number">300</span>.0f, <span class="cpp-number">0</span>.0f };

	glLightModelfv( GL_LIGHT_MODEL_AMBIENT, vAmbient );

	glEnable( GL_COLOR_MATERIAL );
	glColorMaterial( GL_FRONT, GL_AMBIENT_AND_DIFFUSE );

	glLightfv( GL_LIGHT0, GL_AMBIENT, vSpecific );
	glLightfv( GL_LIGHT0, GL_DIFFUSE, vDiffuse );

	glLightfv( GL_LIGHT0, GL_POSITION, vPosition );
	glLightfv( GL_LIGHT0, GL_SPOT_DIRECTION, vDirection );

	glLightf( GL_LIGHT0, GL_SPOT_CUTOFF, <span class="cpp-number">45</span>.0f );
	glLightf( GL_LIGHT0, GL_SPOT_EXPONENT, -<span class="cpp-number">2</span>.0f );

	glEnable( GL_LIGHT0 );
	
	glLightfv( GL_LIGHT1, GL_AMBIENT, vRed );
	glLightfv( GL_LIGHT1, GL_DIFFUSE, vDiffuse );

	glLightfv( GL_LIGHT1, GL_POSITION, vPosition );
	glLightfv( GL_LIGHT1, GL_SPOT_DIRECTION, vDirection );

	glLightf( GL_LIGHT1, GL_SPOT_CUTOFF, <span class="cpp-number">45</span>.0f );
	glLightf( GL_LIGHT1, GL_SPOT_EXPONENT, -<span class="cpp-number">2</span>.0f );

	glEnable( GL_LIGHT1 );

	glLightfv( GL_LIGHT2, GL_AMBIENT, vGreen );
	glLightfv( GL_LIGHT2, GL_DIFFUSE, vDiffuse );

	glLightfv( GL_LIGHT2, GL_POSITION, vPosition );
	glLightfv( GL_LIGHT2, GL_SPOT_DIRECTION, vDirection );

	glLightf( GL_LIGHT2, GL_SPOT_CUTOFF, <span class="cpp-number">45</span>.0f );
	glLightf( GL_LIGHT2, GL_SPOT_EXPONENT, -<span class="cpp-number">2</span>.0f );

	glEnable( GL_LIGHT2 );

	glLightfv( GL_LIGHT3, GL_AMBIENT, vBlue );
	glLightfv( GL_LIGHT3, GL_DIFFUSE, vDiffuse );

	glLightfv( GL_LIGHT3, GL_POSITION, vPosition );
	glLightfv( GL_LIGHT3, GL_SPOT_DIRECTION, vDirection );

	glLightf( GL_LIGHT3, GL_SPOT_CUTOFF, <span class="cpp-number">45</span>.0f );
	glLightf( GL_LIGHT3, GL_SPOT_EXPONENT, -<span class="cpp-number">2</span>.0f );

	glEnable( GL_LIGHT3 );
}

<span class="cpp-keyword">short</span> <span class="cpp-keyword">int</span> Sprite_Collide( CObject *object1, CObject *object2 ) 
{
    <span class="cpp-keyword">int</span> left1, left2;
    <span class="cpp-keyword">int</span> right1, right2;
    <span class="cpp-keyword">int</span> top1, top2;
    <span class="cpp-keyword">int</span> bottom1, bottom2;

    left1 = object1-&gt;getLocation().fx;<span class="cpp-comment">// - 1; //object1-&gt;col_x_offset;</span>
    left2 = object2-&gt;getLocation().fx;<span class="cpp-comment">// + 1; //object2-&gt;col_x_offset;</span>
    right1 = left1 + <span class="cpp-number">2</span>; <span class="cpp-comment">//object1-&gt;col_width;</span>
    right2 = left2 + <span class="cpp-number">2</span>; <span class="cpp-comment">//object2-&gt;col_width;</span>
    top1 = object1-&gt;getLocation().fz + <span class="cpp-number">1</span>; <span class="cpp-comment">//object1-&gt;col_y_offset;</span>
    top2 = object2-&gt;getLocation().fz + <span class="cpp-number">1</span>; <span class="cpp-comment">//object1-&gt;col_y_offset;</span>
    bottom1 = top1 + <span class="cpp-number">2</span>; <span class="cpp-comment">//object1-&gt;col_height;</span>
    bottom2 = top2 + <span class="cpp-number">2</span>; <span class="cpp-comment">//object2-&gt;col_height;</span>

	<span class="cpp-comment">//glBegin( GL_POINTS );</span>
	<span class="cpp-comment">//{</span>
	<span class="cpp-comment">//	glVertex2f( top1, top2 );</span>
	<span class="cpp-comment">//	glVertex2f( bottom1, bottom2 );</span>
	<span class="cpp-comment">//}</span>
	<span class="cpp-comment">//glEnd();</span>


    <span class="cpp-keyword">if</span> (bottom1 &lt; top2) 
	{
		<span class="cpp-comment">//cout &lt;&lt; "HIT! bottom1 &lt; top2\n";</span>
		<span class="cpp-keyword">return</span>(<span class="cpp-number">0</span>);
	}
    <span class="cpp-keyword">if</span> (top1 &gt; bottom2)
	{
		<span class="cpp-comment">//cout &lt;&lt; "HIT! top1 &gt; bottom2\n";</span>
		<span class="cpp-keyword">return</span>(<span class="cpp-number">0</span>);
	}
  
    <span class="cpp-keyword">if</span> (right1 &lt; left2) 
	{
		<span class="cpp-comment">//cout &lt;&lt; "HIT! right1 &lt; left2\n";</span>
		<span class="cpp-keyword">return</span>(<span class="cpp-number">0</span>);
	}
    <span class="cpp-keyword">if</span> (left1 &gt; right2) 
	{
		<span class="cpp-comment">//cout &lt;&lt; "HIT! left1 &gt; right2\n";</span>
		<span class="cpp-keyword">return</span>(<span class="cpp-number">0</span>);
	}

    <span class="cpp-keyword">return</span>(<span class="cpp-number">1</span>);

};

</pre></div><!–ENDSCRIPT–>

Other then that tell me what you think!
Advertisement
Just a cursory examination, but it looks like you are reloading some textures every frame? Taken from your myDisplay function:

BackGround->loadTexture( "texture/menu.tga" );


Unless that function name is misleading, you definitely only want to load textures only once. That should GREATLY speed things up.
scottrick49
Just ran your game. Yes it runs very slow. Definitely looks like you might be reloading the textures every time the screen is drawn. Also, you could look into using smaller texture files. I opened up some of your TGAs and it looks like the texture is in the bottom left part of the image each time, with the rest of the image just wasted space.
scottrick49
Oh yeah that deffinately solved the problem. The way I was thinking was that I only need 1 background type of quad and I'd switch between a menu texture and a game texture. But I just split it making menu having its own background and the actual game have its own water.

And the reason for the white space is that its actualy a UV map that is generated from 3dmax, so if I do put anything in the white space it will be drawn on the other side.

So I think the next direction I'll take is perhaps putting in some boss after a few wave . . .maybe this boss will fire lazer beems.

But maybe in all seriousness I should add in some sort of FPS limiter any ideas on that?
Quote:Original post by kubapl
But maybe in all seriousness I should add in some sort of FPS limiter any ideas on that?


It's an outdated and slightly flawed way of regulating your game's speed - instead look at movement by delta time.

"The right, man, in the wrong, place, can make all the dif-fer-rence in the world..." - GMan, Half-Life 2

A blog of my SEGA Megadrive development adventures: http://www.bigevilcorporation.co.uk

Quote:Original post by deadstar

It's an outdated and slightly flawed way of regulating your game's speed - instead look at movement by delta time.


I dont think I understand what you mean are you saying to make some sort of timer and then for every like 1 second limit a number amount of movements?
No, you should calculate the amount of time that passes between frames. Then you should use this value to scale all movement. In this way, no matter how much FPS you get, your movements will be the same.
Also another benefit is that when your computer can run the game at 70 fps, the animations will all be smoother since the position/orientation will update 70 times a second.
scottrick49
Yeah that all sounds good but how would that look like on psudo code?
basically you get the time at the beginning and the end of your frame and calculate duration = end - start (generally duration is expressed in seconds). That frame duration is used for the next frame: position += duration * speed.

Getting time on windows:

double getTime(){  //for better performance move the following 3 lines to a initializer function  LARGE_INTEGER freq;  ::QueryPerformanceFrequency(&freq);  double secondsPerTick = (LsReal)(1.0/freq.QuadPart);  LARGE_INTEGER time;  ::QueryPerformanceCounter(&time);  double time = time.QuadPart * secondsPerTick;  return time;}


Your frame the would look like this:
frame(){  start = getTime();    .... //render something  position += duration * speed;  .... //render something    end = getTime();  duration = end - start;}
If I was helpful, feel free to rate me up ;)If I wasn't and you feel to rate me down, please let me know why!

This topic is closed to new replies.

Advertisement