ShadowTeam Napisano Maj 20, 2009 Zgłoś Share Napisano Maj 20, 2009 Przesiadłem się z DDraw na SDL(brak alphablendingu i rotacji bitmap :<) i mam parę problemów... 1.Czy można w SDL dodać kolorowy kursor? Udało mi się do tej pory tylko czarno-biały... 2.Jak utworzyć powierzchnię w SDL(sic!)? Chodzi o to, że do tej pory wskaźnik na powierzchnie działa tylko po np. załadowaniu do niej bitmapy funkcją SDL_LoadBMP, a chodzi mi o np. zadeklarowanie powierzchni "background" i kopiowanie jej na screen, a uzupełnianie z "elements" (aktualnie blituje elements na screen)... 3.Przygotowałem sobie do układania tła takie funkcję jak poniżej, jednak powodują one powstanie artefaktów(części obrazka położonego na prawo i dół na prawej i dolnej krawędzi ekranu), w DDraw do usuwania tego służył clipper... Jak to jest rozwiązanie w SDL? Zamieszczam kod mojej klasy: #define MAP_SIZE_Y 12 #define MAP_SIZE_X 16 #define TILE_SIZE_X 48 #define TILE_SIZE_Y 48 class Map { // Map() {sufrace_source = NULL, sufrace = NULL; }; // ~Map(); public: void SetArea(int row, int col, int value); void SetArea(unsigned short int table[MAP_SIZE_X][MAP_SIZE_Y]); unsigned short int GetArea(int row, int col); void DrawMap(SDL_Surface *sufrace, SDL_Surface *sufrace_source); SDL_Surface *sufrace_source; SDL_Surface *sufrace; private: unsigned short int Area[MAP_SIZE_Y][MAP_SIZE_X]; inline void DrawTile(int Pos_x, int Pos_y, int x, int y, SDL_Surface *sufrace, SDL_Surface *sufrace_source); }; void Map::SetArea(int row, int col, int value) { Area[row][col] = value; }; void Map::SetArea(unsigned short int table[MAP_SIZE_X][MAP_SIZE_Y]) { for(int y=0;(y < MAP_SIZE_Y);y++){ for(int x=0;(x < MAP_SIZE_X);x++){ Area[x][y] = table[x][y]; } } }; unsigned short int Map::GetArea(int row, int col) { return Area[row][col]; }; void Map::DrawMap(SDL_Surface *sufrace, SDL_Surface *sufrace_source) { for (int y=0;(y < SCREEN_RESOLUTION_Y / TILE_SIZE_X);y++) { for (int x=0;(x < SCREEN_RESOLUTION_X / TILE_SIZE_Y);x++) { DrawTile(x*TILE_SIZE_X,y*TILE_SIZE_Y,x,y, sufrace, sufrace_source); } } }; inline void Map::DrawTile(int Pos_x, int Pos_y, int x, int y, SDL_Surface *sufrace, SDL_Surface *sufrace_source) { int i = Area[x][y]; int bitmap_elements_rows; bitmap_elements_rows = sufrace_source->w/TILE_SIZE_X; int src_x = i%bitmap_elements_rows, src_y = i/bitmap_elements_rows; SDL_Rect Source = {src_x*TILE_SIZE_X,src_y*TILE_SIZE_Y,src_x*TILE_SIZE_X+TILE_SIZE_X,src_y*TILE_SIZE_Y+TILE_SIZE_Y}; apply_surface(Pos_x, Pos_y, sufrace_source, sufrace, Source); } Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Maj 20, 2009 Zgłoś Share Napisano Maj 20, 2009 CYTAT(ShadowTeam @ śro, 20 maj 2009 - 19:20) 1.Czy można w SDL dodać kolorowy kursor? Udało mi się do tej pory tylko czarno-biały... Kursor jako kursor może być zdaje się tylko czarno-biały, ale można to obejść rysując co się chce w pozycji kursora, a sam kursor ukryć. 2.Jak utworzyć powierzchnię w SDL(sic!)? Chodzi o to, że do tej pory wskaźnik na powierzchnie działa tylko po np. załadowaniu do niej bitmapy funkcją SDL_LoadBMP, a chodzi mi o np. zadeklarowanie powierzchni "background" i kopiowanie jej na screen, a uzupełnianie z "elements" (aktualnie blituje elements na screen)... Po przeczytaniu tutoriala powinno być jasne jak zrobić powierzchnię: http://lazyfoo.net/SDL_tutorials/index.php Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
ShadowTeam Napisano Maj 20, 2009 Autor Zgłoś Share Napisano Maj 20, 2009 Kursor jako kursor może być zdaje się tylko czarno-biały, ale można to obejść rysując co się chce w pozycji kursora, a sam kursor ukryć. Po przeczytaniu tutoriala powinno być jasne jak zrobić powierzchnię: http://lazyfoo.net/SDL_tutorials/index.php Wywala 'struct SDL_PixelFormat' has no member named 'rMask' próbowałem tego wcześniej... A co z pytaniem nr.3? Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.