Added a starfield which scrolls with player movement.
This commit is contained in:
parent
d363898236
commit
00f00b980a
Binary file not shown.
After Width: | Height: | Size: 6.0 KiB |
65
Spacewar.c
65
Spacewar.c
|
@ -80,7 +80,10 @@ int main(int argc, char ** argv)
|
||||||
|
|
||||||
// Initialize image loading:
|
// Initialize image loading:
|
||||||
IMG_Init(IMG_INIT_PNG);
|
IMG_Init(IMG_INIT_PNG);
|
||||||
|
|
||||||
|
// Initialize font support:
|
||||||
TTF_Init();
|
TTF_Init();
|
||||||
|
|
||||||
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2");
|
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2");
|
||||||
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
|
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
|
||||||
|
|
||||||
|
@ -90,6 +93,8 @@ int main(int argc, char ** argv)
|
||||||
// Create an SDL window and rendering context in that window:
|
// Create an SDL window and rendering context in that window:
|
||||||
SDL_Window * window = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 700, 0);
|
SDL_Window * window = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 700, 0);
|
||||||
SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, rendererFlags);
|
SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, rendererFlags);
|
||||||
|
|
||||||
|
// Set some properties for the window:
|
||||||
SDL_SetWindowResizable(window, SDL_TRUE);
|
SDL_SetWindowResizable(window, SDL_TRUE);
|
||||||
SDL_SetWindowTitle(window, "Spacewar!");
|
SDL_SetWindowTitle(window, "Spacewar!");
|
||||||
|
|
||||||
|
@ -99,10 +104,14 @@ int main(int argc, char ** argv)
|
||||||
// Load the title screen:
|
// Load the title screen:
|
||||||
SDL_Texture * titleTexture = IMG_LoadTexture(renderer, "./Images/Title.png");
|
SDL_Texture * titleTexture = IMG_LoadTexture(renderer, "./Images/Title.png");
|
||||||
SDL_Rect titleRect;
|
SDL_Rect titleRect;
|
||||||
titleRect.w = 317;
|
SDL_QueryTexture(titleTexture, NULL, NULL, NULL, &titleRect.h);
|
||||||
titleRect.h = 51;
|
SDL_QueryTexture(titleTexture, NULL, NULL, &titleRect.w, NULL);
|
||||||
|
|
||||||
|
SDL_Texture * starfieldTexture = IMG_LoadTexture(renderer, "./Images/Starfield.png");
|
||||||
|
SDL_Rect starfieldRect;
|
||||||
|
SDL_QueryTexture(starfieldTexture, NULL, NULL, NULL, &starfieldRect.h);
|
||||||
|
SDL_QueryTexture(starfieldTexture, NULL, NULL, &starfieldRect.w, NULL);
|
||||||
|
|
||||||
//
|
|
||||||
TTF_Font * font = TTF_OpenFont("./Robtronika.ttf", 12);
|
TTF_Font * font = TTF_OpenFont("./Robtronika.ttf", 12);
|
||||||
SDL_Color white = {255, 255, 255};
|
SDL_Color white = {255, 255, 255};
|
||||||
|
|
||||||
|
@ -116,6 +125,7 @@ int main(int argc, char ** argv)
|
||||||
SDL_Rect textDestination = {0, 0, text->w, text->h};
|
SDL_Rect textDestination = {0, 0, text->w, text->h};
|
||||||
SDL_Texture * textTexture = SDL_CreateTextureFromSurface(renderer, text);
|
SDL_Texture * textTexture = SDL_CreateTextureFromSurface(renderer, text);
|
||||||
|
|
||||||
|
int scrollX = 0;
|
||||||
// Render the title text:
|
// Render the title text:
|
||||||
while(!inputSelected)
|
while(!inputSelected)
|
||||||
{
|
{
|
||||||
|
@ -132,6 +142,23 @@ int main(int argc, char ** argv)
|
||||||
// Clear the screen, filling it with black:
|
// Clear the screen, filling it with black:
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
starfieldRect.x = 0 - scrollX++;
|
||||||
|
starfieldRect.y = 0;
|
||||||
|
while(starfieldRect.x <= (width + 800))
|
||||||
|
{
|
||||||
|
while(starfieldRect.y <= (height + 800))
|
||||||
|
{
|
||||||
|
SDL_RenderCopy(renderer, starfieldTexture, NULL, &starfieldRect);
|
||||||
|
starfieldRect.y += 800;
|
||||||
|
}
|
||||||
|
starfieldRect.y = 0;
|
||||||
|
starfieldRect.x += 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scrollX == 801)
|
||||||
|
{
|
||||||
|
scrollX = 0;
|
||||||
|
}
|
||||||
SDL_RenderCopy(renderer, titleTexture, NULL, &titleRect);
|
SDL_RenderCopy(renderer, titleTexture, NULL, &titleRect);
|
||||||
SDL_RenderCopy(renderer, textTexture, NULL, &textDestination);
|
SDL_RenderCopy(renderer, textTexture, NULL, &textDestination);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
|
@ -166,6 +193,7 @@ int main(int argc, char ** argv)
|
||||||
bool inputSelected = false;
|
bool inputSelected = false;
|
||||||
|
|
||||||
// Render the title text:
|
// Render the title text:
|
||||||
|
int scrollX = 0;
|
||||||
while(!inputSelected)
|
while(!inputSelected)
|
||||||
{
|
{
|
||||||
// Draw the title screen:
|
// Draw the title screen:
|
||||||
|
@ -181,6 +209,24 @@ int main(int argc, char ** argv)
|
||||||
// Clear the screen, filling it with black:
|
// Clear the screen, filling it with black:
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
starfieldRect.x = 0 - scrollX++;
|
||||||
|
starfieldRect.y = 0;
|
||||||
|
while(starfieldRect.x <= (width + 800))
|
||||||
|
{
|
||||||
|
while(starfieldRect.y <= (height + 800))
|
||||||
|
{
|
||||||
|
SDL_RenderCopy(renderer, starfieldTexture, NULL, &starfieldRect);
|
||||||
|
starfieldRect.y += 800;
|
||||||
|
}
|
||||||
|
starfieldRect.y = 0;
|
||||||
|
starfieldRect.x += 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scrollX == 801)
|
||||||
|
{
|
||||||
|
scrollX = 0;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_RenderCopy(renderer, titleTexture, NULL, &titleRect);
|
SDL_RenderCopy(renderer, titleTexture, NULL, &titleRect);
|
||||||
SDL_RenderCopy(renderer, textTexture, NULL, &textDestination);
|
SDL_RenderCopy(renderer, textTexture, NULL, &textDestination);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
|
@ -312,6 +358,19 @@ int main(int argc, char ** argv)
|
||||||
// Clear the screen, filling it with black:
|
// Clear the screen, filling it with black:
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
starfieldRect.x = -900 - (long)shipA.position.xComponent % 800 - (shipA.velocity.xComponent * 15);
|
||||||
|
starfieldRect.y = -900 - (long)shipA.position.yComponent % 800 - (shipA.velocity.yComponent * 15);
|
||||||
|
while(starfieldRect.x <= (width + 800))
|
||||||
|
{
|
||||||
|
while(starfieldRect.y <= (height + 800))
|
||||||
|
{
|
||||||
|
SDL_RenderCopy(renderer, starfieldTexture, NULL, &starfieldRect);
|
||||||
|
starfieldRect.y += 800;
|
||||||
|
}
|
||||||
|
starfieldRect.y = -900 - (long)shipA.position.yComponent % 800 - (shipA.velocity.yComponent * 15);
|
||||||
|
starfieldRect.x += 800;
|
||||||
|
}
|
||||||
|
|
||||||
// Draw the ship:
|
// Draw the ship:
|
||||||
SDL_RenderCopyEx(renderer, currentTexture, NULL, &shipA.rectangle,
|
SDL_RenderCopyEx(renderer, currentTexture, NULL, &shipA.rectangle,
|
||||||
angleBetweenVectors(&shipA.engine, &upVector) + 90, NULL, 0);
|
angleBetweenVectors(&shipA.engine, &upVector) + 90, NULL, 0);
|
||||||
|
|
Loading…
Reference in New Issue