Jump to content

  • Log In with Google      Sign In   
  • Create Account


little help


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
32 replies to this topic

#1 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 09 December 2012 - 10:58 PM

I am still working on my breakout game. I can get the ball to hit the brick but I cant get the brick to turn off permanently. The brick turn off and back on again, in other words it flickers on and off. I have tried a lot of different permutations of my code.

Sponsor:

#2 Endurion   Crossbones+   -  Reputation: 3452

Like
0Likes
Like

Posted 09 December 2012 - 11:13 PM

We don't know your code and need a little more help.

How do you store bricks? How do you turn bricks off/on? For both answers, show a bit of code.
Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

#3 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 09 December 2012 - 11:17 PM

	if(x>=3.0f && x<=5.0f && y>=3.5f && y<=4.0f)
	{
	bricks[3][5]=0;
	glClear(GL_DEPTH_BUFFER_BIT);
	glColor3f(0.0f,0.0f,0.0f);
	glRectf(3.0f,4.0f,5.0f,3.5f);
	brick_collision(); 
	glutPostRedisplay();
	glutSwapBuffers();
	}

	//draw ball	
	glColor3f(1.0f,1.0f,1.0f);

	glRectf(x,y,x+rsize,y-rsize);

	glutSwapBuffers();


#4 Endurion   Crossbones+   -  Reputation: 3452

Like
2Likes
Like

Posted 10 December 2012 - 01:24 AM

I think the main problem comes from calling glutSwapBuffers two times.

Do a full redraw every time, with one glClear at the top and one glutSwapBuffers at the end. Only draw a brick, if it is not set to 0. Now when the ball is inside the brick rect (as your check seems to do), the brick is cleared and on the next redraw it is simply not drawn.

In other words, make it so:

// brick/ball collision
if ( ( x >= 3.0f )
&&   ( x <= 5.0f )
&&   ( y >= 3.5f )
&&   ( y <= 4.0f ) )
{
  bricks[3][5] = 0;
}

// brick/ball draw code
if ( bricks[3][5] ) != 0 )
{
  // draw the brick
}

Edited by Endurion, 10 December 2012 - 01:26 AM.

Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

#5 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 10 December 2012 - 04:55 PM

well I tried the above code and for some reason it works in reverse, I am so close to solving this problem.

#6 L. Spiro   Crossbones+   -  Reputation: 13157

Like
0Likes
Like

Posted 10 December 2012 - 05:37 PM

“Works in reverse” has no meaning. Why don’t you post your modified code?


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#7 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 10 December 2012 - 05:45 PM

if((x>=3.0f) && (x<=5.0f) && (y>=3.5f) && (y<=4.0f))
{
bricks[3][5]=0;
}

brick_collision();

void brick_collision()
{
if(bricks[3][5]!=0)
{
glColor3f(0.0f,0.0f,0.0f);
glRectf(3.0f,4.0f,5.0f,3.5f);
}
}
here is some of my code

#8 L. Spiro   Crossbones+   -  Reputation: 13157

Like
0Likes
Like

Posted 10 December 2012 - 05:50 PM

The way in which you clear and swap was previously called into question.
Why don’t you show enough code to include both your update logic and your clear/swap calls?


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#9 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 10 December 2012 - 06:25 PM

void drawScene() {

	glClear(GL_COLOR_BUFFER_BIT);
	
	glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

	glEnable(GL_TEXTURE_2D);

	glBindTexture(GL_TEXTURE_2D,_textureId_four); 

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	for(float i=-5.0f;i<=3.0f;i+=2.0f)
	{
	//draw bricks	
	glBegin(GL_QUADS);
	glTexCoord2f(-1.0f, 0.0f);
	glVertex3f(i, 5.0f, 0.0f);
	glTexCoord2f(-1.0f, 1.0f);
	glVertex3f(i+2.0f, 5.0f, 0.0f);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(i+2.0f, 4.5f, 0.0f);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(i, 4.5f, 0.0f);
	glEnd();
	}

	glDisable(GL_TEXTURE_2D);

	glEnable(GL_TEXTURE_2D);

	glBindTexture(GL_TEXTURE_2D,_textureId_three); 

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	for(float i=-5.0f;i<=3.0f;i+=2.0f)
	{
	//draw bricks	
	glBegin(GL_QUADS);
	glTexCoord2f(-1.0f, 0.0f);
	glVertex3f(i, 4.5f, 0.0f);
	glTexCoord2f(-1.0f, 1.0f);
	glVertex3f(i+2.0f, 4.5f, 0.0f);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(i+2.0f, 4.0f, 0.0f);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(i, 4.0f, 0.0f);
	glEnd();
	}

	glDisable(GL_TEXTURE_2D);

	glEnable(GL_TEXTURE_2D);

	glBindTexture(GL_TEXTURE_2D,_textureId); 

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	for(float i=-5.0f;i<=3.0f;i+=2.0f)
	{
	//draw bricks	
	glBegin(GL_QUADS);
	glTexCoord2f(-1.0f, 0.0f);
	glVertex3f(i, 4.0f, 0.0f);
	glTexCoord2f(-1.0f, 1.0f);
	glVertex3f(i+2.0f, 4.0f, 0.0f);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(i+2.0f, 3.5f, 0.0f);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(i, 3.5f, 0.0f);
	glEnd();
	}

	glDisable(GL_TEXTURE_2D);

	glEnable(GL_TEXTURE_2D);

	glBindTexture(GL_TEXTURE_2D,_textureId_two); 

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	//draw paddle	
	glBegin(GL_QUADS);
	glTexCoord2f(-1.0f, 0.0f);
	glVertex3f(-1.0f+j, -4.5f, 0.0f);
	glTexCoord2f(-1.0f, 1.0f);
	glVertex3f(1.0f+j, -4.5f, 0.0f);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(1.0f+j, -5.0f, 0.0f);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(-1.0f+j, -5.0f, 0.0f);
	glEnd();

	glDisable(GL_TEXTURE_2D);

	if((x>=3.0f) && (x<=5.0f) && (y>=3.5f) && (y<=4.0f))
	{
	bricks[3][5]=0;
	}

	brick_collision(); 

	//draw ball	
	glColor3f(1.0f,1.0f,1.0f);

	glRectf(x,y,x+rsize,y-rsize);

	glutSwapBuffers();
}

void brick_collision()
{
	if(bricks[3][5]!=0)
	{
	glColor3f(0.0f,0.0f,0.0f);
	glRectf(3.0f,4.0f,5.0f,3.5f);
	}
}
here is my drawing code and some collision detection


#10 L. Spiro   Crossbones+   -  Reputation: 13157

Like
1Likes
Like

Posted 10 December 2012 - 06:45 PM

The problem is right there.
for(float i=-5.0f;i<=3.0f;i+=2.0f)

You draw every brick regardless of whether at has been destroyed or not.

If you don’t want a brick to be drawn, don’t draw it. Don’t draw it and then try to cover it up later, just don’t draw it in the first place.

You should have encapsulated the blocks with classes. Each class would have a position/rectangle coordinates for rendering as well as a boolean flag to tell if the block is drawn for not.

Then the loop would like this:
for ( int I = 0; I < ENUM_TOTAL_BLOCKS; ++I ) {
	 if ( g_bBlock[I].Visible() ) {
		  glBegin(GL_QUADS);
		  glTexCoord2f(-1.0f, 0.0f);
		  glVertex3f(g_bBlock[I].x, 4.0f, 0.0f);
		  glTexCoord2f(-1.0f, 1.0f);
		  glVertex3f(g_bBlock[I].x+2.0f, 4.0f, 0.0f);
		  glTexCoord2f(0.0f, 1.0f);
		  glVertex3f(g_bBlock[I].x+2.0f, 3.5f, 0.0f);
		  glTexCoord2f(0.0f, 0.0f);
		  glVertex3f(g_bBlock[I].x, 3.5f, 0.0f);
		  glEnd();
	 }
}

And brick_collision() would simply not exist.

DO: No drawing of objects that are not visible.
DON’T: Draw invisible objects and then erase them.


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#11 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 10 December 2012 - 07:20 PM

well I stubbed out the above code, I am still confused on how to declare the g_bBlock[I] statement.
#include <iostream>
#include <glut.h>

using namespace std;

const int ENUM_TOTAL_BLOCKS = 15;

bool g_bBlock[15];

int main()
{

for ( int I = 0; I < ENUM_TOTAL_BLOCKS; ++I ) {
if ( g_bBlock[I].Visible() ) {
glBegin(GL_QUADS);
glTexCoord2f(-1.0f, 0.0f);
glVertex3f(g_bBlock[I].x, 4.0f, 0.0f);
glTexCoord2f(-1.0f, 1.0f);
glVertex3f(g_bBlock[I].x+2.0f, 4.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(g_bBlock[I].x+2.0f, 3.5f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(g_bBlock[I].x, 3.5f, 0.0f);
glEnd();
}
}
return 0;
}


#12 L. Spiro   Crossbones+   -  Reputation: 13157

Like
1Likes
Like

Posted 10 December 2012 - 07:52 PM

Firstly, if you define ENUM_TOTAL_BLOCKS and use it to run over the array, use it to declare the array too. Don’t use ENUM_TOTAL_BLOCKS in some places and 15 in other places. Use ENUM_TOTAL_BLOCKS everywhere.

 
class CBlock {
public :
     bool     m_bActive;
     float     m_fX;
};
CBlock g_bBlock[ENUM_TOTAL_BLOCKS];
 
 
for ( int I = 0; I < ENUM_TOTAL_BLOCKS; ++I ) {
	 if ( g_bBlock[I].m_bActive ) {
		  glBegin(GL_QUADS);
		  glTexCoord2f(-1.0f, 0.0f);
		  glVertex3f(g_bBlock[I].m_fX, 4.0f, 0.0f);
		  glTexCoord2f(-1.0f, 1.0f);
		  glVertex3f(g_bBlock[I].m_fX+2.0f, 4.0f, 0.0f);
		  glTexCoord2f(0.0f, 1.0f);
		  glVertex3f(g_bBlock[I].m_fX+2.0f, 3.5f, 0.0f);
		  glTexCoord2f(0.0f, 0.0f);
		  glVertex3f(g_bBlock[I].m_fX, 3.5f, 0.0f);
		  glEnd();
	 }
}

You also have to initialize the blocks to make them all active and to set their starting positions.
Obviously, telling you how to do this means holding your hand and is not helping you grow on your own.


L. Spiro

Edited by L. Spiro, 11 January 2013 - 07:32 PM.

It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#13 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 10 December 2012 - 10:35 PM

thanks for all the help, I am picking your code apart in order to learn how it works.

#14 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 11 December 2012 - 08:01 PM

I want to thank spiro for all her help. Well I picked apart the following code she gave me. I have made some adjustments to it. What I am confused about is how the g_bBlock array works. All I get 3 5 5 3 for the output.
here is the stubbed out code.
#include <iostream>
#include <glut.h>

using namespace std;

const int ENUM_TOTAL_BLOCKS = 15;

class CBlock {
public :
     bool     m_bActive;
     float     m_fX;
};
CBlock g_bBlock[ENUM_TOTAL_BLOCKS];

int main()
{


for ( int I = 0; I < ENUM_TOTAL_BLOCKS; ++I ) {
	 if ( g_bBlock[I].m_bActive ) {
		  
		  glBegin(GL_QUADS);
		  glTexCoord2f(-1.0f, 0.0f);
		  glVertex3f(g_bBlock[I].m_fX+3.0f, 4.0f, 0.0f);
		  glTexCoord2f(-1.0f, 1.0f);
		  glVertex3f(g_bBlock[I].m_fX+5.0f, 4.0f, 0.0f);
		  glTexCoord2f(0.0f, 1.0f);
		  glVertex3f(g_bBlock[I].m_fX+5.0f, 3.5f, 0.0f);
		  glTexCoord2f(0.0f, 0.0f);
		  glVertex3f(g_bBlock[I].m_fX+3.0f, 3.5f, 0.0f);
		  glEnd();
	 }
}
		  cout << g_bBlock[0].m_bActive << endl;
		  cout << endl;
		  cout << g_bBlock[0].m_fX+3.0f << endl;
		  cout << g_bBlock[0].m_fX+5.0f << endl;
		  cout << g_bBlock[0].m_fX+5.0f << endl;
		  cout << g_bBlock[0].m_fX+3.0f << endl;

		  cout << g_bBlock[1].m_bActive << endl;
		  cout << endl;
		  cout << g_bBlock[1].m_fX+3.0f << endl;
		  cout << g_bBlock[1].m_fX+5.0f << endl;
		  cout << g_bBlock[1].m_fX+5.0f << endl;
		  cout << g_bBlock[1].m_fX+3.0f << endl;
return 0;
}


#15 L. Spiro   Crossbones+   -  Reputation: 13157

Like
1Likes
Like

Posted 11 December 2012 - 08:16 PM

You never initialized the data held within g_bBlock. This is a one-time pass over the array to set the default values you want the blocks to have.


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#16 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 11 December 2012 - 08:43 PM

is this what you mean?
CBlock g_bBlock[ENUM_TOTAL_BLOCKS]={true,0.0f};


#17 L. Spiro   Crossbones+   -  Reputation: 13157

Like
0Likes
Like

Posted 11 December 2012 - 09:03 PM

That is one way it could be done, except that you have only defined one block (assuming you also fix the syntax).


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#18 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 11 December 2012 - 09:29 PM

am I on the right track
CBlock g_bBlock[ENUM_TOTAL_BLOCKS]={false,0.0f,false,1.0f};

also is m_fX the X coordinate of the ball.

#19 L. Spiro   Crossbones+   -  Reputation: 13157

Like
0Likes
Like

Posted 11 December 2012 - 09:38 PM

CBlock g_bBlock[ENUM_TOTAL_BLOCKS] = {
	 { false, 0.0f, },
	 { false, 1.0f, },
	 …
};


L. Spiro

Edited by L. Spiro, 11 December 2012 - 09:38 PM.

It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#20 phil67rpg   Members   -  Reputation: 767

Like
0Likes
Like

Posted 11 December 2012 - 09:52 PM

also is m_fX the X coordinate of the ball?




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