• Advertisement
Sign in to follow this  

Beginning to code in C++, some rookie questions.

This topic is 1834 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Good evening, I am designing an RPG and attempting to teach myself all the relevant skills involved in producing the game. 

 

Before you all laugh, I am not attempting to complete the game as a one man army, I just want to learn a decent amount of art and design so that when I hire an artist, I can more accurately describe what I want in some of their own language. 

 

And so that when I hire a programmer, I can more accurately describe what I want in some of their own language. Besides, the more I learn, the more it all affects my concept (as in, what is realistic, what is workable, what is standard, and so on). Basically I want to be the best team leader I can by having at least some knowledge of all the relevant areas.

 

Also I just love learning stuff. 

 

 

Anyway, this is the code I have so far, using Visual C++ 2010 with SDL.

 

#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#pragma comment(lib, "SDL_TTF.lib")

#include "SDL.h"
#include "SDL_image.h"
#include <iostream>
#include <stack>
#include <string>
#include "SDL_TTF.h"
#include "Defines.h"

using namespace std;

int main(int argc, char *argv[])


{
const int SCREEN_WIDTH = 644;
const int SCREEN_HEIGHT = 400;
const int SCREEN_BPP = 32;

SDL_Surface *logo = NULL;
SDL_Surface *border = NULL;
SDL_Surface *screen = NULL;

SDL_Init(SDL_INIT_EVERYTHING);

SDL_WM_SetCaption("Necromancer", NULL);


screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);
border = IMG_Load("Graphics/Title/Border.png");
logo = IMG_Load("Graphics/Title/Logo.png");


SDL_BlitSurface(logo,NULL,screen,NULL);
SDL_BlitSurface(border,NULL,screen,NULL);

SDL_Flip(screen);
SDL_Delay( 5000 );
SDL_FreeSurface(logo);
SDL_FreeSurface(border);

SDL_Quit();
return 0;
}

 

 

I have copied most of this stuff from websites, so most of it I genuinely have no idea what it does. But after hours of furious tweaking, it creates a screen in the size I want and displays two images I want for 5 seconds. A pretty big win for someone fumbling along. 

 

My question is, where do I insert code to tell the program to 'fade in' the logo, then fade it out again (over a total period of 3 seconds), and what what would that code look like?

 

Then I would like it to fade in and fade in a second image over 5 seconds, what would that code look like?

 

Thank you for your time and putting up with my awkward starting point. 

 

 

Kind regards,

 

Dan

Share this post


Link to post
Share on other sites
Advertisement

I wasn't going to laugh, nor was anyone else here.

 

Get rid of SDL_BlitSurface(logo,NULL,screen,NULL); SDL_BlitSurface(border,NULL,screen,NULL); SDL_Flip(screen); and SDL_Delay( 5000 );

In it's place put the following:

 

 

//use SDL_SetAlpha instead of SDL_SetSurfaceAlphaMod when using SDL 1.2 or under.
unsigned int basetick = SDL_GetTicks();
unsigned int currenttick = SDL_GetTicks();
unsigned int time = 1500;//one and half second

while(currenttick - basetick <= time)
{
    Uint8 alph = (((float)currenttick - (float)basetick) / (float)time) * 255;
    SDL_SetSurfaceAlphaMod(logo, alph);

    //clear the screen here SDL_FillRect works, there are other ways to
    //SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0, 0, 0));

    SDL_BlitSurface(logo, NULL, screen, NULL);
    SDL_BlitSurface(border, NULL, screen, NULL);
    SDL_Flip(screen);
    SDL_Delay( 10 );
    currenttick = SDL_GetTicks();
}

basetick = SDL_GetTicks();
currenttick = SDL_GetTicks();
while(currenttick - basetick <= time)
{
    Uint8 alph = (((float)currenttick - (float)basetick) / (float)time) * 255;
    SDL_SetSurfaceAlphaMod(logo, 255-alph);

    //clear the screen here SDL_FillRect works, there are other ways to
    //SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0, 0, 0));

    SDL_BlitSurface(logo, NULL, screen, NULL);
    SDL_BlitSurface(border, NULL, screen, NULL);
    SDL_Flip(screen);
    SDL_Delay( 10 );
    currenttick = SDL_GetTicks();
}

 

I typed this out quick, there might be errors, but for the most part it should work. It's been a while since I have used SDL.

Share this post


Link to post
Share on other sites

Thank you for your response. 

 

I should explain, when I said "Before you all laugh" I am sorry if it came across as insecure or aggressive, I was trying to be playful but I sometimes forget that tone is always lost on the internet. 

 

I am about to sleep now but will try this code out tomorrow evening. Thank you again!

Share this post


Link to post
Share on other sites

I would personally recommend against using code that you find on the web if you have no idea what it does. When something goes wrong (and it often does in programming) you'll have no idea what might be the problem, where is it, or how to fix it. Work through tutorials, books and references, and find it what each lines means. At the very least, get a general idea.

 

I also second the suggestion to start with python.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement