Zdravím,
tak dělám SDL podle seriálu zde a narazil sem na problém. Všechno mi jede, ukáže se černý okno, chybu to nepíše žádnou, ale kdyz zkopíruju zdroják z lekce 2 (vykreslování barevnejch pixelů v okně 800 x 600) tak je okno pořád černý.
Kdyz sem se učil SDL ze stránek root.cz, kde je v 5. lekci nahrání obrázku fukncí SDL_LoadImage() a taky sem jen zkopíroval jejich kód, taky se mi zobrazilo jen černé okno, s titulkem a tak, ale ten obrázek v něm nebyl zobrazenej. Zdá se mi, že je to ta samá chyba, nevíte někdo čím to?? Prosíím .... pro kontrolu přikládám kód:
Fórum › C / C++
SDL nekreslí
To DrawScene musi byt volano v game loopu (te nekonecne smycce).
Dík,
tak pokud to dobře chápu, tak by konec kódu měl vypadat takto:
bool done=false;
while(done == false){
DrawScene(screen);
SDL_Event event;
while(SDL_PollEvent(&event) ) {
if(event.type == SDL_QUIT) done=true;
}
}
}
ale to stejne nejde. Ani kdyz to dam za to SDL_Event; :(
A co to dela?
NO objevi se klasicky cerny SDL okno s titulkem Jednoducha ukazka 'inicializace' SDL grafiky a je to ... zkratka dela to vse krom toho vykreslovani :) BTW: to co sem tu uvadel jako prvni ... tak tam ta funkce byla taky v ty smycce ne ?
To KIIV: To je blbost, to PollEvent je smycka udalosti, tam kresleni nepatri.
To volf: ukaz co mas ted za kod
Hmmm takze sem prisel na par veci. Mam VC++ 9.0 a to je teda program. po zmačknutí F5 mi to spouštělo uplně něco jinyho než sem měl na obrazovce, zkratka to spouštělo předchozí projekt, takze cokoli sem menil v tom co sem delal porad to spoustelo to druhy, dost divna vlastnost teda, pak sem prisel na to ze se nejdriv musi dat "Rebuild" a pak teprve poustet debuger atd.
No a kdyz uz sem to teda vyresil a kdesi cosi, tak kdyz spustim tohle co sem sem pastnul, tak se mi pro zmenu neobjevi okno zadny, a debuger pise
. Podotykam ze chybu to tam nikde nepise zadnou. Predpokladam ze to skonci na nejakym tom exit (1) ale nevim na kterym, jelikoz sem nenasel kam se pise ten text z tech prikazu printf. Ja myslel ze to ma vytvorit nejaky chybovy textaky ne?? Boze proc nemuze neco fungovat normalne ..... :(The program '[2344] 2.exe: Native' has exited with code 1 (0x1).
To vollf82 : Klasická chování výpisu do texťáků a výpisů do konzole bylo v novějších verzích SDL odebráno.
Nevím, jestli to může být tím, ale int main() nemá návratovou hodnotu (0 = ok; 1 = ukončení po chybě)
Tak na co tam je tohle
printf("Vytvoření okna se nezdařilo: %s\n", SDL_GetError());
exit(1);
Kdyz se to nikam nenapíše sakra :( ... Me štve to, že i kdyz člověk zkopíruje nějakej kód z učebnice, tak to nejde kvůli nějakejm jinejm kravinam. Linkování atd. uz sem jakž takž pochopil (stejně mě štve, že i kdyz prilinkuju vsechny knihovny a include soubory, tak do projektu musim dopsat tohle - #pragma comment (lib, "SDL.lib") #pragma comment (lib, "SDLmain.lib") jinak to zkrátka nefunguje).
Dneska uz na to kaslu protoze mam nervy v hajzlu, ale sem zvedavej jestli to takhle pujde dal, jak se naucim SDL. Vsude ctu jak je to jednoduchy, prehledny a skveli pro začatky v grafice, ale VC++ mi prijde samo o sobe ze to spis ztěžuje práci. Uz jen ten případ kterej sem popisoval nahoře. V Dev-C++ zkrátka co sem měl před sebou, to se kompilovalo. A tady ... ?
Jinak to tím nebylo, žadny okno ani neproblikne a vypis v kompilátoru je následující:
'2.exe': Loaded 'C:\DATA\C++\SDL\2\Debug\2.exe', Symbols loaded.
'2.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\SDL.dll', Binary was not built with debug information.
'2.exe': Loaded 'C:\WINDOWS\system32\winmm.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\user32.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\secur32.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll'
'2.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcr90d.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\ddraw.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\dciman32.dll'
'2.exe': Unloaded 'C:\WINDOWS\system32\ddraw.dll'
'2.exe': Unloaded 'C:\WINDOWS\system32\dciman32.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\kbdus.dll'
'2.exe': Unloaded 'C:\WINDOWS\system32\kbdus.dll'
'2.exe': Loaded 'C:\WINDOWS\system32\kbdcz.dll'
'2.exe': Unloaded 'C:\WINDOWS\system32\kbdcz.dll'
The program '[3236] 2.exe: Native' has exited with code 1 (0x1).
Radši sem ještě hážu kód, vim je to dlouhý ale co kdyby:
Tak to mi taky prislo divny. Doporucil bych ti vykaslat se na SDL tutorial tady, protoze je uplne na prd. Na root.cz je lepsi, ale me se osvedcil: http://lazyfoo.net/SDL_tutorials/index.php. Sice je anglicky, ale vyplati se ucit se z nej.
Tedka nemuzu rozebirat kod, ale vecer podivam kdyz bude cas. BTW ten kod se mi moc nelibi, je to 5 pres 9...
Zdravím po ránu,
takže Wizard měl pravdu, bylo to přesně v tom. V tom tutoriálu ale chyba není takže nechápu jak se mi to tam dostalo kdyz sem to jen kopíroval. Možná už to opravili ale fakt nevim :( Každopádně díky.
Wizard napsal:
ono uz neni co rozoberat :) problem je na 100% v podmienke pri initalizacii SDL viz moj prispevok vysie
Zdravím a jsem tu zas :)
Může mi někdo poradit s touhle chybou co to vypisuje??
1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
1>2.obj : error LNK2019: unresolved external symbol _IMG_Load referenced in function "int __cdecl DrawImage(struct SDL_Surface *,char *,int,int)" (?DrawImage@@YAHPAUSDL_Surface@@PADHH@Z)
1>C:\DATA\C++\SDL\2\Debug\2.exe : fatal error LNK1120: 1 unresolved externals
Pravděpodobně vím co někdo napíše - že chybí přilinkovaná knihovna nebo tak něco. Ale stahnul sem si SDL_image devel VC8 ze stranek uvedenych v tutorialu. Přilinkoval sem co se dalo, jak v Tools - Options - Project and Solution - VC++ Directories ... tak v Project - Properties - Configuration Properties - Linker - General tak uz vazne nevim. I to SDL_image.h sem zkopiroval do složky include v adresari VC v Program Files. Kód sem sice dávam taky ale nevim jestli bude chyba tam.
Mas tam conflict. Jestli mas MSVS zkus prepnout Project config -> C/C++ -> code generation a tam musis prepnout Multi-threaded na Multi-threaded DLL.
Asi jsem to nepopsal uplne presne, MSVS ted nemam po ruce.
Jo, a nemas nactene zavislosti k funkci IMG_Load (to si musis zjistit co jsou, z hlavy ti to rozhodne nereknu)
Ptam se znova: Vis, odkud beres tu funkci IMG_load?
No z toho SDL_image.h ... Citace z tutorialu:
Nahrávání obrázků z disku
SDL umí nahrávat pouze obrázky ve formátu BMP, ale díky knihovně SDL_image, která se už stala de facto jeho součástí, může programátor používat i PCX, GIF, JPG, PNG, TGA, TIFF a další méně známé formáty. Stejně jako celé SDL je i SDL_image šířena pod licencí GNU LGPL.
Po přilinkování knihovny a vložení hlavičkového souboru SDL_image.h je možné volat funkci IMG_Load(), která vrací surface nahrávaného obrázku. Formát je detekován automaticky podle přípony, hlaviček apod.
SDL_Surface *SDL_LoadBMP(const char *file);
SDL_Surface *IMG_Load(const char *file);
Brý ráno :)
Tak sem to vyřešil přidáním řádku #pragma comment (lib, "SDL_image.lib") ... někde sem čet že je to jako ruční linkování knihoven. Opravte mě jestli se pletu. Ale proč teda sakra si to VC nenajde tu knihovnu samo, kdyz v Options projectu zadam linkeru cestu k tomu adresáři, kde ta knihovna je?? Proto sem stále nechápal proč mi to nejede. Nebo to tak nefunguje??
Tak jako tak se to ted spustí, chybu to nepíše žádnou, ale obrázek to taky nevykreslí takže sem tam kde sem byl. Ach jo, jdu se v tom zas hrabat no.
Do toho linkeru musis ty knihovny nekam primo vyjmenovat
Co to?
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
[SDL] Help — založil WraCkeR
Moderátoři diskuze