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