Nyt kävin alottelemaa SDL:n perusteita nii tuli heti onkelma vastaan. Ongelma on se, että olen tehnyt kuvan blittaus funktion. Jos sitä ei käytä koodissa, niin kääntyy EXEksi, mutta jos käyttää, niin käy valittamaan.
Koodini on tässä:
#include <SDL/SDL.h> #include <stdio.h> void loadBMP(int tiedosto, SDL_Surface * naytto, SDL_Surface * kuva, int x, int y); int main (int argc, char *argv[]) { if(SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "SDL:n alustus ei onnistunut.\n%s", SDL_GetError); SDL_Quit(); return 0; } SDL_Surface * naytto; SDL_Surface * kuva; naytto = SDL_SetVideoMode(800, 600, 16, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); piirra("kuva.bmp", naytto, kuva, 50, 50); SDL_Delay(5000); SDL_Quit(); return 0; } void piirra(char tiedosto[8], SDL_Surface * naytto, SDL_Surface * kuva, int x, int y) { kuva = SDL_LoadBMP(tiedosto); SDL_Rect coords; coords.x = x; coords.y = y; SDL_BlitSurface(kuva, NULL, naytto, &coords); SDL_Flip(naytto); }
Nytten se herjaa "piirra" funktiosta. Sen kun ottaa ennen SDL_Delayta pois niin ei virheita.
EDIT:Virhe:24 E:\C\SDL\main.c conflicting types for 'piirra'
17 E:\C\SDL\main.c previous implicit declaration of 'piirra' was here
E:\C\SDL\Makefile.win [Build Error] [main.o] Error 1
Tuo virhe johtuu siitä, että et ole esitellyt tuota piirä-funktiota. Lisääppä ennen main-funktiota rivi:
void piirra(char tiedosto[8], SDL_Surface * naytto, SDL_Surface * kuva, int x, int y);
tai vaihtehtoisesti siirrä piirrä-funktio ennen main-funktiota. Lisäksi sinulla on nyt turha määrittely ennen main funktiota (funktiolle loadBMP), sillä tullaista funktiota ei löydy sinulta.
Btw, ei kannata aina ladatessa ladata bittikarttaa tiedostosta, se on _erittäin_hidasta_. Kannattaa vaikka välittää piirrettävän kuvan osoitin (niin kuin välitätkin SDL_Surface *kuva:n, joka tosin on tyhjä).
Kannattaa kuitenkin hommata perusosaaminen C/C++:sta ennen grafiikkaohjelmointia, tuo funktioiden esittely on aikalailla perusasiaa (ei millään pahalla).
Ja et myöskään voi määritellä "char tiedosto[8]" ainakaan, jos syötät sille char[9]:n (muista, että lopussa on nollamerkki). Laita siis "char *tiedosto"
Aihe on jo aika vanha, joten et voi enää vastata siihen.