Forum: Lazy Foo's SDL tutorial problem

Forum huvudsida -> Programmering -> Lazy Foo's SDL tutorial problem

Sidor: 1

Till botten

Mannez 04:01 - 6:e September 2008 | Post #1
Medlem
Inlägg: 4


Skicka PM
Hej igen, har googlat och sökt på forumet men hittar inget som kan hjälpa mig =/

,,r osäker på ifall det är för tidigt för mig att ge mig in på SDL nu men jag gjorde ett försök endåSmiley

Vill först fråga hur det igentligen går till med SDL, skriver man koderna som vanligt i c++ och sedan öppnar exe filen för att se resultat? anledningen till att jag frågar detta är på grund av tutorialen av Lazy foo där han snackar om att man inte ser bilderna än och grejjer, är det någon speciell ruta som ska tas upp?

Vidare till problemet

jag har följt steg ett i tutorialen - http://lazyfoo.net/SDL_tutorials/lesson01/windows/devcpp/index.php

-ppnade nytt projekt - empty - ändrade det man ska ändra i projekt alternativen och skrev in koden man skulle skriva in, sparade det sedan i en mapp där SDL.dll filen finns samt bilderna som följde med tutorialen på steg 2 -http://lazyfoo.net/SDL_tutorials/lesson02/index.php

Kompileringen gick bra men problemen kommer i steg 2 av tutorialen.

Skrev in denna kod i ett nytt tomt dokument:

#include "SDL/SDL.h"

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

SDL_Surface *message = NULL;
SDL_Surface *background = NULL;
SDL_Surface *screen = NULL;

SDL_Surface *load_image [std::string filename ]
{
SDL_surface* loadedImage = NULL;

SDL_surface* optimizedImage = NULL;

loadedImage = SDL_LoadBMP(filename.c_str() );

if( loadedImage != NULL)
{
optimizedImage = SDL_DisplayFormat( loadImage );

SDL_FreeSurface( loadedImage );
}

return optimizedImage;
}

void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )
{
SDL_Rect offset;

offset.x = x;
offset.y = y;

SDL_BlitSurface( source, NULL, destination, &offset );
}

int main( int argc, char* args[] )
{
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
{
return 1;
}

screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

if( screen == NULL)
{
return 1;
}

SDL_WM_SetCaption("Shuuu", NULL );

message = load_image(helo_world.bmp");
background = load_image("background.bmp");

apply_surface( 0, 0, background, screen );

apply_surface( 180, 140 message, screen );

if( SDL_Flip( screen ) == -1 )
{
return 1;
}

SDL_Delday( 2000 );

SDL_FreeSurface( message );
SDL_FreeSurface( background );

SDL_Quit();

return 0;

}

Och det funkade inte, kom upp en massa errors, här är error listan:

12 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c `string' is not a member of `std'

12 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c expected `]' before "filename"

12 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c expected init-declarator before "filename"

12 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c expected `,' or `;' before "filename"

C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c In function `int SDL_main(int, char**)':

56 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c `helo_world' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

56 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c missing terminating " character

61 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c expected `)' before "message"

31 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c too few arguments to function `void apply_surface(int, int, SDL_Surface*, SDL_Surface*)'

61 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c at this point in file

68 C:\Dev-Cpp\Projekt\SDL_tutorial\1\main.c `SDL_Delday' undeclared (first use this function)

C:\Dev-Cpp\Projekt\SDL_tutorial\1\Makefile.win [Build Error] [main.o] Error 1

Vet inte om det är rätt grejjer jag visar här, är helt ny inom programering och har hittils endast läst tutorialen på denna sida, vet även inte hur man får fram rad nummer, så det kanske inte blir så lätt att hitta felen men om någon säger hur man gör så ändrar jag på det direkt =)

,,r oerhört tacksam för svar, vill börja komma igång med detta då det verkar sjukt intressant, bara förvirrande såhär i börjanSmiley

MVH / Manne


EDIT

Skulle även uppskatta lite tipps på hur jag kan komma igång med programmeringen, mitt mål är att en vacker dag börja hobby programmera små 3d spel, även tänkt lära mig 3dsmax senare och kombinera med zbrush som jag redan är kär iSmiley

Bok tips är bra men ekonomin tillåter inga köp nu men ska försöka låna från biblan när c++ accelerate eller vad den nu heter kommit in igen =)

Gärna lite sidor med tips små små nybörjar projekt som man kan pyssla med för att lära sig merSmiley


Senast redigerad 04:16 - 6:e September 2008


Nissebosselasse 06:42 - 6:e September 2008 | Post #2
Medlem
Inlägg: 490


Skicka PM
Du har inte skrivit in all kod från sidan. Kompilatorn klagar på string eftersom du inte inkluderat filen string, vilket står klart och tydligt längst upp på hans sida:

  1. //The headers
  2. #include "SDL/SDL.h"
  3. #include <string>

Here are our headers for this program.

SDL.h is included because obviously we're going to need SDL's functions.

The string header is used because ... eh I just like std::string over char*


Den andra saken är SDL_Surface *load_image [std::string filename ] - det ska inte vara hakparanteser utan vanliga paranteser, det är nämligen en funktion. Det positiva med ditt fel är väl att du antagligen inte har kopierat texten rakt av och bara klistrat in, du såg kanske fel när du läste? Från hans sida:
  1. SDL_Surface *load_image( std::string filename ) {
  2. //Temporary storage for the image that's loaded
  3. SDL_Surface* loadedImage = NULL;
  4.  
  5. //The optimized image that will be used
  6. SDL_Surface *optimizedImage = NULL;


Börja med de här felen. Ett annat tips är att dubbelkolla så att du skrivit rätt, jag ser att du skrivit SDL_Delday istället för SDL_Delay, kompilatorn kan inte gissa vilken funktion du menar utan du måste ange dess namn exakt så som den stavas.

Bruce Eckel ger ut gratisböcker i elektronisk form om olika programmeringsrelaterade saker, bland annat C++ (finns att ladda ner här: http://mindview.net/Books/TICPP/ThinkingInCPP2e.html), rekommenderar starkt dom. Dom tar visserligen upp grunderna i C++ och inget om SDL, men det är minst lika viktigt (om inte mer).

Till sist: skaffa en annan kompilator! Bloodshed Dev-C++ utvecklas inte längre (det var länge sedan den gjordes). Sitter du på Windows eller något annat? I så fall finns Visual Studio C++ 2008 Express Edition helt gratis.



(Icke relaterat: vad är det för horribel färgkodning av kodrutorna??)



-------------------------
http://pushingcows.se
Gula Nallen



Mannez 19:03 - 6:e September 2008 | Post #3
Medlem
Inlägg: 4


Skicka PM
    Citat av Nissebosselasse:
Du har inte skrivit in all kod från sidan. Kompilatorn klagar på string eftersom du inte inkluderat filen string, vilket står klart och tydligt längst upp på hans sida:


Oj, jag hade skrivit in det innan också, har testat att ändra på massor av grejjer, men det funkade inte heller, har även testat att använda mig av lazy foo's kod vilket gav samma error, kan jag ha gjort något fel med Lib?
Jag följde guiden om att lägga in filerna och allt gick bra =/



Den andra saken är SDL_Surface *load_image [std::string filename ] - det ska inte vara hakparanteser utan vanliga paranteser, det är nämligen en funktion. Det positiva med ditt fel är väl att du antagligen inte har kopierat texten rakt av och bara klistrat in, du såg kanske fel när du läste? Från hans sida:


Oj haha my bad, var väldigt svårt o se vad som var vad på hans tutorialSmiley försöker alltid skriva allt själv, annars kommer inte nått att fastna i huvetSmiley

men det var inte det som orsakade errorsen då jag testat hans egna kod och även testat att ändra nu till [] men får samma fel =/


Börja med de här felen. Ett annat tips är att dubbelkolla så att du skrivit rätt, jag ser att du skrivit SDL_Delday istället för SDL_Delay, kompilatorn kan inte gissa vilken funktion du menar utan du måste ange dess namn exakt så som den stavas.


Oj haha det var klantigt av mig, ska försöka se mig för med stavfel i framtidenSmiley



Bruce Eckel ger ut gratisböcker i elektronisk form om olika programmeringsrelaterade saker, bland annat C++ (finns att ladda ner här: http://mindview.net/Books/TICPP/ThinkingInCPP2e.html), rekommenderar starkt dom. Dom tar visserligen upp grunderna i C++ och inget om SDL, men det är minst lika viktigt (om inte mer).


Nice! dem måste jag kolla in!Smiley innehåller dem kanske även små nybörjar projekt som man kan testa själv eller är det massa kopiera detta o detta?Smiley


Till sist: skaffa en annan kompilator! Bloodshed Dev-C++ utvecklas inte längre (det var länge sedan den gjordes). Sitter du på Windows eller något annat? I så fall finns Visual Studio C++ 2008 Express Edition helt gratis.


jag körde på microsoft visual c++ men efter att läst runt så verkade alla luta sig mot dev c++ och sa att det var bättre på något sätt, så jag ville inte riskera något utan tankade ner den direktSmiley




(Icke relaterat: vad är det för horribel färgkodning av kodrutorna??)


HAhaha ingen aning, håller med om att det inte ser så modernt ut men har inte försökt ändra något änSmiley

Tack för svaret Nissebosselasse!Smiley




Linkowiezi 14:08 - 26:e September 2008 | Post #4
Medlem
Inlägg: 5


Skicka PM
Hej, jag råkade ha lite tid över så jag drog en google på cpp problem och hittade det här och tänkte ge det ett försök och jag copierade din kod och ändrade lite i den sen har jag nu reggat ett konto för att ge dig ett svar.
Vet inte om du kollar in här nåt mer det är ju ett tag sen du la upp tråden, men ändå man vet ju aldrig...

Här är den ändrade koden iaf:

#include "SDL/SDL.h"
#include <string>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

SDL_Surface *message = NULL;
SDL_Surface *background = NULL;
SDL_Surface *screen = NULL;

SDL_Surface *load_image ( std::string filename )
{
SDL_Surface* loadedImage = NULL;

SDL_Surface* optimizedImage = NULL;

loadedImage = SDL_LoadBMP(filename.c_str() );

if( loadedImage != NULL)
{
optimizedImage = SDL_DisplayFormat( loadedImage );

SDL_FreeSurface( loadedImage );
}

return optimizedImage;
}

void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )
{
SDL_Rect offset;

offset.x = x;
offset.y = y;

SDL_BlitSurface( source, NULL, destination, &offset );
}

int main( int argc, char* args[] )
{
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
{
return 1;
}

screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

if( screen == NULL)
{
return 1;
}

SDL_WM_SetCaption("Shuuu", NULL );

message = load_image("helo_world.bmp");
background = load_image("background.bmp");

apply_surface( 0, 0, background, screen );

apply_surface( 180, 140, message, screen );

if( SDL_Flip( screen ) == -1 )
{
return 1;
}

SDL_Delay( 2000 );

SDL_FreeSurface( message );
SDL_FreeSurface( background );

SDL_Quit();

return 0;
}

Det jag gjort är att ändra detta:

lägga till #include <string>

ändra
SDL_Surface *load_image [std::string filename ]
till
SDL_Surface *load_image (std::string filename )

ändra
SDL_surface* loadedImage = NULL;

SDL_surface* optimizedImage = NULL;
till
SDL_Surface* loadedImage = NULL;

SDL_Surface* optimizedImage = NULL;

ändra
optimizedImage = SDL_DisplayFormat( loadImage );
till
optimizedImage = SDL_DisplayFormat( loadedImage );

lägga till en " i
message = load_image(helo_world.bmp");
så att det blev
message = load_image("helo_world.bmp");

lägga till , i
apply_surface( 180, 140 message, screen );
så att det blev
apply_surface( 180, 140, message, screen );

ändra
SDL_Delday( 2000 );
till
SDL_Delay( 2000 );

Jag använde dock ej DevCPP utan eclipse med mingw32 kompilator och jag kompilerade utan felmeddelande. Och programmet gick att starta... Hade dock inga bilder i mappen där jag försökte starta programmet ifrån så det stängdes ju så klart av men det borde fungera med dessa små ändringar.

Hoppas att detta var till någon hjälpSmiley

-------------------------
Silence is an option...
Listen to it and behold the hidden message.
Otherwise the silence might be the last thing you'll ever hear...




Sidor: 1

Forum huvudsida -> Programmering -> Lazy Foo's SDL tutorial problem
Atom feed

Du får inte posta i den här tråden | Till toppen