Jump to content

  • Log In with Google      Sign In   
  • Create Account

Awesome job so far everyone! Please give us your feedback on how our article efforts are going. We still need more finished articles for our May contest theme: Remake the Classics

#ActualDarkHorseKnight

Posted 05 February 2012 - 05:52 AM

Hello I'm trying to fix this graphical problem but I don't know how to code the fix and I don't even know If I'm correct on my solution but I will go ahead and tell you the problem and some ideas to why I think its happening but moving onto the problem.



The Problem
When I press the right arrow key and blit surfaces to the screen it doesn't do it one at a time but instead all blit surfaces inside the if right key statement go on the screen at once


Why is it happening?
It's because of the main while loop I think.



But I was wondering how could I set the bliting so that it  blits images one at a time so that it won't mess up the application or cause flickering or any other graphical glitch.

Here's my code

/////////////////////////////
//Main Libary
/////////////////////////////
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
/////////////////////////////
//Other Files
#include "CollisionFunction.h"
/////////////////////////////
#define SCREEN_HEIGHT 640
#define SCREEN_WIDTH 480
/////////////////////////////

SDL_Rect OrangeGhostKnightRect;
//Main Rectangles
SDL_Rect LevelOneRect;
SDL_Rect GroundOneRect;
SDL_Rect GroundTwoRect;
SDL_Rect GroundThreeRect;
SDL_Rect GroundFourRect;
//Mario Rect
SDL_Rect MarioRect;
//Water Rects
SDL_Rect WaterRect;
SDL_Rect WaterRect2;
SDL_Rect WaterRect3;
SDL_Rect WaterGroundRect;

//Storage Rectangles
SDL_Rect StorageRect[12];

//BoundingBox
SDL_Rect BoundingBox[2];

//Timer Rect
SDL_Rect TimerTextRect;
//Weather Rect
SDL_Rect BubbleGumCloudRect;
//////////////////////////////////////////////////
//Orange Ghost Knight Logic
/////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////

int LevelOneFunction(void *unused)
{
			    Uint8 *keystate = SDL_GetKeyState(NULL);
		    ////////////////////////////////////////////////////////////////////////////////
		    //Color Selections
		    Uint32 RedColor =SDL_MapRGB(Screen->format,255,0,0);
		    Uint32 OrangeColor =SDL_MapRGB(Screen->format,255,100,0);
		    Uint32 BlackColor =SDL_MapRGB(Screen->format,0,0,0);
		    Uint32 GreyColor = SDL_MapRGB(Screen->format,192,192,192);
		    Uint32 MintGreenColor = SDL_MapRGB(Screen->format,39,216,176);
		    Uint32 LightOliveGreenColor = SDL_MapRGB(Screen->format,135,179,77);
		    //SDL COLOR Colors
			 SDL_Color WhiteColor = {255,255,255};
		    ////////////////////////////////////////////////////////////////////////////////
		    ////////////////////////
		    //Storage Rect Positions
		    ///////////////////////
		    StorageRect[1].x = 0;
		    StorageRect[1].y = 0;
		    StorageRect[2].x = 0;
		    StorageRect[2].y = 380;
		    StorageRect[3].x = 0;
		    StorageRect[3].y = 310;
		    StorageRect[4].x = 0;
		    StorageRect[4].y = 360;
		    StorageRect[5].x = 0;
		    StorageRect[5].y = 400;
		    StorageRect[6].x = 320;
		    StorageRect[6].y = 400;
		    StorageRect[7].x = 580;
		    StorageRect[7].y = 400;
		    StorageRect[10].x = 400;
		    StorageRect[10].y = 320;
		    StorageRect[11].y = -200;
		    StorageRect[12].x = 5;
		    ///////////////////////////////
		    //BoundingBox 1 Values
		    BoundingBox[1].x =160;
		    BoundingBox[1].y =360;
		    BoundingBox[1].w = 60;
		    BoundingBox[1].h = 108;
		    //BoundingBox 2 Values
		    BoundingBox[2].x =300;
		    BoundingBox[2].y =300;
		    BoundingBox[2].w = 60;
		    BoundingBox[2].h = 120;

		    //Mario Rect Values
		    MarioRect.x = 0;
		    MarioRect.y = 0;
		    //LevelOneBG Values
		    LevelOneRect.x = 0;
		    LevelOneRect.y = 0;
		    //PurpleAmal Rock 1 Values
		    GroundOneRect.x = 0;
		    GroundOneRect.y = 0;
		    ////////////////////////////

		    //Bool Variable
			 bool done = false;
			 //Event Creation
			 SDL_Event event;
			  while(!done)
			  {				 /////////////////////////////////////////
								 //Logic
								 ////////////////////////////////////////
								 StorageRect[11].x += 1;
								 StorageRect[10].x += 1;
											 //Movements of BoundingBoxes

							 if(StorageRect[3].x > SCREEN_WIDTH)
							 {
								 StorageRect[3].x -=20;
								 StorageRect[2].x -=3;
								 StorageRect[6].x -=3;
								 StorageRect[1].x -=10;
							 }

							  ////////////////////////////
							 //Collision Boxes
							 ////////////////////////////
							 if(Check_Collision(MarioRect,GroundOneRect))
							 {
										  StorageRect[3].y -= 5;
							 }

							 if(Check_Collision(MarioRect,BoundingBox[1]))
							 {
									   StorageRect[3].y += 6;
							 }

						   if(StorageRect[10].x == 400)
									   {
											    StorageRect[10].x += 40;

									   }

							 if(StorageRect[10].x == 480)
									   {
											  StorageRect[10].x -=40;
									   }

								 //////////////////////////////////////
								 //Drawing
								 /////////////////////////////////////


								 LevelOneRect = StorageRect[1];
								 SDL_BlitSurface(LevelOneBG,NULL,Screen,&LevelOneRect);

								 WaterGroundRect = StorageRect[5];
								 SDL_BlitSurface(WaterGroundSurf,NULL,Screen,&WaterGroundRect);

								 GroundOneRect = StorageRect[2];
								 SDL_BlitSurface(GroundOneBG,NULL,Screen,&GroundOneRect);

								 GroundTwoRect = StorageRect[6];
								 SDL_BlitSurface(GroundTwoBG,NULL,Screen,&GroundTwoRect);

								 GroundThreeRect = StorageRect[7];
								 SDL_BlitSurface(GroundThreeBG,NULL,Screen,&GroundThreeRect);

								    //If user doesn't press right key on keyboard
								    if(keystate[SDLK_RIGHT])
								    {
									   MarioRect = StorageRect[3];
										  SDL_BlitSurface(SuperMarioWalkSurf[1],NULL,Screen,&MarioRect);

										 MarioRect = StorageRect[3];
										 SDL_BlitSurface(SuperMarioWalkSurf[2],NULL,Screen,&MarioRect);

										 MarioRect = StorageRect[3];
										 SDL_BlitSurface(SuperMarioWalkSurf[3],NULL,Screen,&MarioRect);


									 //Movements of actual visual objects
										 StorageRect[3].x +=5;
										 StorageRect[3].y += 5;
										 StorageRect[1].x -=6;
										 StorageRect[2].x -=2;
										 StorageRect[4].x -=1;
										 StorageRect[5].x -= 4;
										 StorageRect[6].x -=2;
										 StorageRect[7].x -=2;
										 BoundingBox[2].x -=2;
								    }

								   //If user doesn't press right key on keyboard
							    else   if(!keystate[SDLK_RIGHT])
								    {
										  MarioRect = StorageRect[3];
										  SDL_BlitSurface(SuperMarioWalkSurf[1],NULL,Screen,&MarioRect);
								    }

								 OrangeGhostKnightRect = StorageRect[10];
								 SDL_BlitSurface(OrangeGhostKnightSurf,NULL,Screen,&OrangeGhostKnightRect);
								 BubbleGumCloudRect = StorageRect[11];
								 SDL_BlitSurface(BubbleGumCloudSurf,NULL,Screen,&BubbleGumCloudRect);
								 SDL_BlitSurface(Text,NULL,Screen,&TimerTextRect);

	    ////////////////////////////////////////////////////
	   //While continous events are running in event
	   ////////////////////////////////////////////////////
		  while(SDL_PollEvent(&event))
		  {
		    //allow to be able to switch events
		    switch(event.type)
		    {
		  //if user presses on close
			    case SDL_QUIT:
				    //Close Application
				    return 0;

					    //break case
					    break;
		 //SWITCH EVENT TYPE
		    }
/////////
//POLL
/////////
							    }

//////////////////////////////////////
//END OF THE MAIN WHILE LOOP
/////////////////////////////////////
  //Update Screen

		    SDL_Flip(Screen);

		    }

/////////////////////////////////////

//DONT KNOW
//COULD BE THE RIGHT POINT

}
////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////


If anyone has any answers of any kind and or helpful advice please do say

#5DarkHorseKnight

Posted 05 February 2012 - 05:52 AM

Hello I'm trying to fix this graphical problem but I don't know how to code the fix and I don't even know If I'm correct on my solution but I will go ahead and tell you the problem and some ideas to why I think its happening but moving onto the problem.



The Problem
When I press the right arrow key and blit surfaces to the screen it doesn't do it one at a time but instead all blit surfaces inside the if right key statement go on the screen at once


Why is it happening?
It's because of the main while loop I think.



But I was wondering how could I set the bliting so that it  blits images one at a time so that it won't mess up the application or cause flickering or any other graphical glitch.

Here's my code


/////////////////////////////
//Main Libary
/////////////////////////////
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
/////////////////////////////
//Other Files
#include "CollisionFunction.h"
/////////////////////////////
#define SCREEN_HEIGHT 640
#define SCREEN_WIDTH 480
/////////////////////////////


SDL_Rect OrangeGhostKnightRect;

//Main Rectangles
SDL_Rect LevelOneRect;
SDL_Rect GroundOneRect;
SDL_Rect GroundTwoRect;
SDL_Rect GroundThreeRect;
SDL_Rect GroundFourRect;

//Mario Rect
SDL_Rect MarioRect;

//Water Rects
SDL_Rect WaterRect;
SDL_Rect WaterRect2;
SDL_Rect WaterRect3;
SDL_Rect WaterGroundRect;


//Storage Rectangles
SDL_Rect StorageRect[12];


//BoundingBox
SDL_Rect BoundingBox[2];


//Timer Rect
SDL_Rect TimerTextRect;

//Weather Rect
SDL_Rect BubbleGumCloudRect;



//////////////////////////////////////////////////
//Orange Ghost Knight Logic
/////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////


int LevelOneFunction(void *unused)
{

                Uint8 *keystate = SDL_GetKeyState(NULL);

            ////////////////////////////////////////////////////////////////////////////////
            //Color Selections
            Uint32 RedColor =SDL_MapRGB(Screen->format,255,0,0);
            Uint32 OrangeColor =SDL_MapRGB(Screen->format,255,100,0);
            Uint32 BlackColor =SDL_MapRGB(Screen->format,0,0,0);
            Uint32 GreyColor = SDL_MapRGB(Screen->format,192,192,192);
            Uint32 MintGreenColor = SDL_MapRGB(Screen->format,39,216,176);
            Uint32 LightOliveGreenColor = SDL_MapRGB(Screen->format,135,179,77);

            //SDL COLOR Colors
             SDL_Color WhiteColor = {255,255,255};
            ////////////////////////////////////////////////////////////////////////////////

            ////////////////////////
            //Storage Rect Positions
            ///////////////////////

            StorageRect[1].x = 0;
            StorageRect[1].y = 0;

            StorageRect[2].x = 0;
            StorageRect[2].y = 380;

            StorageRect[3].x = 0;
            StorageRect[3].y = 310;

            StorageRect[4].x = 0;
            StorageRect[4].y = 360;

            StorageRect[5].x = 0;
            StorageRect[5].y = 400;

            StorageRect[6].x = 320;
            StorageRect[6].y = 400;

            StorageRect[7].x = 580;
            StorageRect[7].y = 400;

            StorageRect[10].x = 400;
            StorageRect[10].y = 320;

            StorageRect[11].y = -200;

            StorageRect[12].x = 5;

            ///////////////////////////////

            //BoundingBox 1 Values
            BoundingBox[1].x =160;
            BoundingBox[1].y =360;
            BoundingBox[1].w = 60;
            BoundingBox[1].h = 108;

            //BoundingBox 2 Values
            BoundingBox[2].x =300;
            BoundingBox[2].y =300;
            BoundingBox[2].w = 60;
            BoundingBox[2].h = 120;


            //Mario Rect Values
            MarioRect.x = 0;
            MarioRect.y = 0;

            //LevelOneBG Values
            LevelOneRect.x = 0;
            LevelOneRect.y = 0;

            //PurpleAmal Rock 1 Values
            GroundOneRect.x = 0;
            GroundOneRect.y = 0;

            ////////////////////////////





            //Bool Variable
             bool done = false;

             //Event Creation
             SDL_Event event;

              while(!done)

              {                 /////////////////////////////////////////
                                 //Logic
                                 ////////////////////////////////////////



                                 StorageRect[11].x += 1;
                                 StorageRect[10].x += 1;

                                             //Movements of BoundingBoxes


                             if(StorageRect[3].x > SCREEN_WIDTH)
                             {
                                 StorageRect[3].x -=20;
                                 StorageRect[2].x -=3;
                                 StorageRect[6].x -=3;
                                 StorageRect[1].x -=10;
                             }





                              ////////////////////////////
                             //Collision Boxes
                             ////////////////////////////

                             if(Check_Collision(MarioRect,GroundOneRect))
                             {
                                          StorageRect[3].y -= 5;
                             }


                             if(Check_Collision(MarioRect,BoundingBox[1]))
                             {
                                       StorageRect[3].y += 6;
                             }



                           if(StorageRect[10].x == 400)
                                       {

                                                StorageRect[10].x += 40;


                                       }


                             if(StorageRect[10].x == 480)

                                       {
                                              StorageRect[10].x -=40;

                                       }


                                 //////////////////////////////////////
                                 //Drawing
                                 /////////////////////////////////////




                                 LevelOneRect = StorageRect[1];
                                 SDL_BlitSurface(LevelOneBG,NULL,Screen,&LevelOneRect);


                                 WaterGroundRect = StorageRect[5];
                                 SDL_BlitSurface(WaterGroundSurf,NULL,Screen,&WaterGroundRect);


                                 GroundOneRect = StorageRect[2];
                                 SDL_BlitSurface(GroundOneBG,NULL,Screen,&GroundOneRect);


                                 GroundTwoRect = StorageRect[6];
                                 SDL_BlitSurface(GroundTwoBG,NULL,Screen,&GroundTwoRect);


                                 GroundThreeRect = StorageRect[7];
                                 SDL_BlitSurface(GroundThreeBG,NULL,Screen,&GroundThreeRect);


                                    //If user doesn't press right key on keyboard
                                    if(keystate[SDLK_RIGHT])
                                    {

                                       MarioRect = StorageRect[3];
                                          SDL_BlitSurface(SuperMarioWalkSurf[1],NULL,Screen,&MarioRect);





                                         MarioRect = StorageRect[3];
                                         SDL_BlitSurface(SuperMarioWalkSurf[2],NULL,Screen,&MarioRect);





                                         MarioRect = StorageRect[3];
                                         SDL_BlitSurface(SuperMarioWalkSurf[3],NULL,Screen,&MarioRect);









                                     //Movements of actual visual objects
                                         StorageRect[3].x +=5;
                                         StorageRect[3].y += 5;
                                         StorageRect[1].x -=6;
                                         StorageRect[2].x -=2;
                                         StorageRect[4].x -=1;
                                         StorageRect[5].x -= 4;
                                         StorageRect[6].x -=2;
                                         StorageRect[7].x -=2;
                                         BoundingBox[2].x -=2;



                                    }







                                   //If user doesn't press right key on keyboard
                                else   if(!keystate[SDLK_RIGHT])
                                    {
                                          MarioRect = StorageRect[3];
                                          SDL_BlitSurface(SuperMarioWalkSurf[1],NULL,Screen,&MarioRect);
                                    }





                                 OrangeGhostKnightRect = StorageRect[10];
                                 SDL_BlitSurface(OrangeGhostKnightSurf,NULL,Screen,&OrangeGhostKnightRect);

                                 BubbleGumCloudRect = StorageRect[11];
                                 SDL_BlitSurface(BubbleGumCloudSurf,NULL,Screen,&BubbleGumCloudRect);

                                 SDL_BlitSurface(Text,NULL,Screen,&TimerTextRect);



        ////////////////////////////////////////////////////
       //While continous events are running in event
       ////////////////////////////////////////////////////

          while(SDL_PollEvent(&event))
          {

            //allow to be able to switch events
            switch(event.type)
            {

          //if user presses on close
                case SDL_QUIT:

                    //Close Application
                    return 0;


                        //break case
                        break;

         //SWITCH EVENT TYPE

            }



/////////
//POLL
/////////



                                }


//////////////////////////////////////
//END OF THE MAIN WHILE LOOP
/////////////////////////////////////

  //Update Screen




            SDL_Flip(Screen);




            }


/////////////////////////////////////


//DONT KNOW
//COULD BE THE RIGHT POINT


}

////////////////////////////////////////////////////






////////////////////////////////////////////////////////////////////////////


If anyone has any answers of any kind and or helpful advice please do say

#4DarkHorseKnight

Posted 04 February 2012 - 02:57 PM

Hello I'm trying to fix this graphical problem but I don't know how to code the fix and I don't even know If I'm correct on my solution but I will go ahead and tell you the problem and some ideas to why I think its happening but moving onto the problem.



The Problem
When I press the right arrow key and blit surfaces to the screen it doesn't do it one at a time but instead all blit surfaces inside the if right key statement go on the screen at once


Why is it happening?
It's because of the main while loop I think.



But I was wondering how could I set the bliting so that it  blits images one at a time so that it won't mess up the application or cause flickering or any other graphical glitch.

Here's my code at paste bin

http://pastebin.com/D0ZFfHr0


If anyone has any answers of any kind and or helpful advice please do say

#3DarkHorseKnight

Posted 04 February 2012 - 02:57 PM

Hello I'm trying to fix this graphical problem but I don't know how to code the fix and I don't even know If I'm correct on my solution but I will go ahead and tell you the problem and some ideas to why I think its happening but moving onto the problem.



The Problem
When I press the right arrow key and blit surfaces to the screen it doesn't do it one at a time but instead all blit surfaces inside the right key event go on the screen at once


Why is it happening?
It's because of the main while loop I think.



But I was wondering how could I set the bliting so that it  blits images one at a time so that it won't mess up the application or cause flickering or any other graphical glitch.

Here's my code at paste bin

http://pastebin.com/D0ZFfHr0


If anyone has any answers of any kind and or helpful advice please do say

#2DarkHorseKnight

Posted 04 February 2012 - 02:56 PM

Hello I'm trying to fix this graphical problem but I don't know how to code the fix and I don't even know If I'm correct on my solution but I will go ahead and tell you the problem and some ideas to why I think its happening but moving onto the problem.



The Problem
When I press the right arrow key and blit surfaces to the screen it doesn't do it one at a time but instead all images go on the screen at once


Why is it happening?
It's because of the main while loop I think.



But I was wondering how could I set the bliting so that it  blits images one at a time so that it won't mess up the application or cause flickering or any other graphical glitch.

Here's my code at paste bin

http://pastebin.com/D0ZFfHr0


If anyone has any answers of any kind and or helpful advice please do say

#1DarkHorseKnight

Posted 04 February 2012 - 02:56 PM

Hello I'm trying to fix this graphical problem but I don't know how to code the fix and I don't even know If I'm correct on my solution but I will go ahead and tell you the problem and some ideas to why I think its happening but moving onto the problem.



The Problem
When I press the right arrow key and blit surfaces to the screen it doesn't do it one at a time but instead all images go on the screen at once


Why is it happening?
It's because of the main while loop I think.






But I was wondering how could I set the bliting so that it  blits images one at a time so that it won't mess up the application or cause flickering or any other graphical glitch.

Here's my code at paste bin

http://pastebin.com/D0ZFfHr0


If anyone has any answers of any kind and or helpful advice please do say

PARTNERS