000
21.04.2002, 11:06
Gnomo
|
Hi! Ich habe das driite SDL Tut durchgearbeitet, aber es klappt nicht d.h. es kompiliert ohne fehler lädt die Bitmap aber nicht hier der code:
//---Libs---// #include <stdio.h> #include <stdlib.h> #include <time.h>
#include <sdl.h> #include "Main.h"
#ifdef _WIN32 #undef main #endif
SDL_Surface *g_pScreen; SDL_Surface *g_pBitmap; Uint32 g_Black;
const int worlds = 50;
log class_log;
log::log() { Log=fopen("log.txt","w"); }
log::~log() { fclose(Log); }
log::OutputLog(const char* text) { fprintf(Log,text); fprintf(Log,"\n"); }
struct world g_World[worlds];
void RandBackground() { int i; int num_types;
num_types = g_pBitmap->w/16;
for(i = 0; i < worlds; i++) { g_World[i].coordx = rand() %640; g_World[i].coordy = rand() %480; g_World[i].type = rand() %num_types; } }
void DrawBackground() { int i;
for(i = 0; i < worlds; i++); { SDL_Rect src; SDL_Rect dest;
src.x = g_World[i].type * 16; src.y = 0; src.w = 16; src.h = 16;
dest.x = g_World[i].coordx; dest.y = g_World[i].coordy;
SDL_BlitSurface(g_pBitmap, &src, g_pScreen, &dest); if (SDL_BlitSurface == 0) { class_log.OutputLog("SDL Kopierung - FEHLGESCHLAGEN"); }else { class_log.OutputLog("SDL Kopierung - ERFOLGREICH"); } } }
int main() { int running;
srand(time(0));
if (SDL_Init(SDL_INIT_VIDEO)<0) { fprintf(stderr,"SDL konnte nicht initialisiert werden%s\n", SDL_GetError());
class_log.OutputLog("SDL Initialisierung - FEHLGESCHLAGEN");
exit(1); }else { class_log.OutputLog("SDL Initialisierung - ERFOLGREICH"); }
atexit(SDL_Quit); g_pScreen = SDL_SetVideoMode(640,480,0,0);
if (!g_pScreen) { fprintf(stderr,"SDL konnte Video Mode nicht setzen%s\n", SDL_GetError());
class_log.OutputLog("SDL Video Mode Setzung - FEHLGESCHLAGEN");
exit (1); }else { class_log.OutputLog("SDL Video Mode Setzung - ERFOLGREICH"); } g_pBitmap = SDL_LoadBMP("b.bmp");
if (!g_pBitmap) { fprintf(stderr,"Konnte Bitmap nicht laden%s\n", SDL_GetError()); class_log.OutputLog("SDL Bitmap laden - FEHLGESCHLAGEN");
exit(1); }else { class_log.OutputLog("SDL Bitmap laden - ERFOLGREICH"); }
RandBackground(); g_Black = SDL_MapRGB(g_pScreen->format,0,0,0); SDL_FillRect(g_pScreen,0,g_Black); SDL_UpdateRect(g_pScreen,0,0,0,0);
DrawBackground(); SDL_FreeSurface(g_pBitmap); running=1; while(running) { SDL_Event event;
while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: running=0; break;
case SDL_QUIT: running=0; break; } } }
return 0;
}
ich kann keinen fehler finden.
--
|
|
Profil || Suche
|
001
21.04.2002, 11:28
Prefect
|
Zwei Dinge; zunächstmal der eigentliche Fehler:
SDL_UpdateRect(g_pScreen,0,0,0,0); DrawBackground();
SDL_UpdateRect muß nach dem Zeichnen erfolgen, sonst wird der Bildschirminhalt ja nur mit den Bilddaten von vor dem Zeichnen aufgefrischt - und das ist ziemlich sinnlos.
Außerdem:
SDL_BlitSurface(g_pBitmap, &src, g_pScreen, &dest); if (SDL_BlitSurface == 0) { class_log.OutputLog("SDL Kopierung - FEHLGESCHLAGEN"); }else { class_log.OutputLog("SDL Kopierung - ERFOLGREICH"); }
Eigentlich sollte dir der Compiler eine Warnung geben, weil die Bedingung immer gleich false ist. Was du in dem if-Statement machst: du prüfst, ob die _Addresse_ der Funktion SDL_BlitSurface gleich 0 ist - was sie natürlich nie ist. Abgesehen davon gibt SDL_BlitSurface bei Erfolg 0 zurück, und bei Mißerfolg eine negative Zahl.
Der Code sollte also so aussehen:
ret = SDL_BlitSurface(g_pBitmap, &src, g_pScreen, &dest); if (ret < 0) class_log.OutputLog("SDL Kopierung - FEHLGESCHLAGEN"); else class_log.OutputLog("SDL Kopierung - ERFOLGREICH");
cu, Prefect
--
Widelands - Gemütliche Aufbaustrategie, Free Software Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.
|
|
Profil || Suche
|
002
21.04.2002, 12:14
Gnomo
|
Ok danke, ich werde das mal ausprobieren.
--
|
|
Profil || Suche
|
003
21.04.2002, 12:32
[RMen]OneStone
|
Der Code sollte also so aussehen:
ret = SDL_BlitSurface(g_pBitmap, &src, g_pScreen, &dest); if (ret < 0) class_log.OutputLog("SDL Kopierung - FEHLGESCHLAGEN"); else class_log.OutputLog("SDL Kopierung - ERFOLGREICH");
Warum nicht gleich so (?):
if(SDL_BlitSurface(g_pBitmap, &src, g_pScreen, &dest)) DoIfTrue(); else DoIfFalse();
--
georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/
|
|
Profil || Suche
|
004
21.04.2002, 15:05
Another1
|
@RMENEINSTEIN: das macht man so, damit man ret nochmal benutzen kann, da in diesem fall ret < 0 irgendein errorcode is, den man dann im notfall ausgeben kann, und das geht mit deiner variante nich
--
Another1
...relaxing..atm =) ... und Schweiz suckt!
|
|
Profil || Suche
|
005
21.04.2002, 15:34
Gnomo
|
@prefect: ich habe das jetzt verbessert, also erst nach dem zeichnen updaterect() aufgerufen, aber es geht immer noch nicht.
--
|
|
Profil || Suche
|
006
21.04.2002, 16:32
[RMen]OneStone
|
@EineAndereEins/EinAnderer: Aber in seinem Code verwendet er den Rückgabetyp nicht.
--
georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/
|
|
Profil || Suche
|
007
24.04.2002, 16:58
Prefect
|
Doch, ich verwende den Rückgabetyp von SDL_BlitSurface, nämlich bei der (nicht gezeigten) Deklaration der Variable ret. Aber das nur am Rande.
Gnomo: Hört sich seltsam an. Kannst du mal versuchen, SDL_MapRGB andere Werte zu übergeben um zu überprüfen, ob überhaupt irgendwas passiert? Wenn die RGB-Werte bei SDL_MapRGB geändert werden müßte der Hintergrund ja in einer anderen Farbe sein.
cu, Prefect
--
Widelands - Gemütliche Aufbaustrategie, Free Software Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.
|
|
Profil || Suche
|
008
24.04.2002, 17:17
Gnomo
|
Habs jetzt hingebekommen und thx an euch.
--
|
|
Profil || Suche
|
009
25.04.2002, 13:59
Prefect
|
Woran lag's denn?
cu, Prefect
--
Widelands - Gemütliche Aufbaustrategie, Free Software Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.
|
|
Profil || Suche
|
010
25.04.2002, 15:53
WareWolf
|
nebenbei: ab Sdltut#9 ist die Datei Galaxien.bmp defekt (in den Zip und rar), hab es an verschiedenen Tagen mehrmals gesaugt, aber gleiches Problem. (Macht zwar nichts, da man die anderen Files dennoch entpacken kann und man die fehlerhaften aus vorangegengenen Tuts kopiert)
--
Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴ WW
|
|
Profil || Suche
|