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

Started by
3 comments, last by DavitosanX 11 years, 2 months ago

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

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.

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!

C/C++ might not be the best place to start.

Take a look at this

">python video tutorial series; It goes through the development of a complete memory match game, from start to finish.

+---------------------------------------------------------------------+

| Game Dev video tutorials -> http://www.youtube.com/goranmilovano | +---------------------------------------------------------------------+

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.

Starting out in game programming? Me too! Check out my blog, written by a newbie, for the newbies. http://myowngamejourney.blogspot.mx/

Also, if you don't mind a 5 seconds ad, here's a great free ebook for beginners on the subject of pygame: http://bit.ly/19Bem2q

This topic is closed to new replies.

Advertisement