he estado programando un aplicacion mobil usando sdl y cuando cargo para probar
me da errores la verdad tengo un buen tiempo y no doy con lo que me causa problema.
mas abajo dejo el codigo , aunque estoy pensando que es por un bucle que tengo pero no estoy seguro
Código
#include<SDL.h> #include<cstdlib> #include<ctime> using namespace std; void CopiarPantalla(SDL_Renderer *renderer, SDL_Rect start_pos[256],SDL_Texture *img) { for(unsigned int Drawers = 0; Drawers <255; Drawers++) { SDL_RenderCopy(renderer, img,NULL,&start_pos[Drawers]); } } int main(int argc, char *argv[]) { SDL_Rect player = {10,12,32,32}; SDL_Window *window = NULL; SDL_Renderer *renderer = NULL; int width = 0 ; int height = 0 ; bool Run = true; SDL_Surface *unloaded = NULL; SDL_Surface *opt_img = NULL; SDL_Texture *img = NULL; SDL_Event event; SDL_DisplayMode mode; unsigned int start = 0; SDL_Rect start_pos[256]; SDL_Color color_pantalla = {0,0x12,0xa,0xff}; SDL_Rect fillRect; if(SDL_Init(SDL_INIT_EVERYTHING) < 0 ) { SDL_Log("Imposible Cargar SDL_INIT [%s]", SDL_GetError()); Run = false; } srand(time(NULL)); for(unsigned int initializer = 0; initializer <255; initializer++) { start_pos[initializer].x = 10 + rand() % width; start_pos[initializer].y = 10 + rand() % height; start_pos[initializer].w = 32; start_pos[initializer].h = 32; } unloaded = SDL_LoadBMP("color.bmp"); if(unloaded == NULL) { SDL_Log("No se cargo el graficio"); Run = false; } else { opt_img = SDL_ConvertSurfaceFormat( unloaded, SDL_PIXELFORMAT_RGBA8888, NULL ); if(opt_img == NULL) { SDL_Log("Imposible optimizar"); Run = false; } } if(Run == true) { //obtner el tamano de los valores de la pantalla. if( SDL_GetCurrentDisplayMode( 0, &mode ) == 0 ) { width = mode.w; height = mode.h; fillRect.w = width; fillRect.h = height; player.x = width /2; player.y = height/2; } //crear la ventana SDL window = SDL_CreateWindow("Neo.App",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,width, height, SDL_WINDOW_SHOWN); if(window == NULL) { SDL_Log("Imposible crear la ventana ,[%s]", SDL_GetError()); Run = false; } else { Run = true; } if(Run == true) { renderer = SDL_CreateRenderer(window , -1 , SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if(renderer == NULL) { Run = false; } } ///Creamo la textura aqui. SDL_SetColorKey(opt_img, SDL_TRUE, SDL_MapRGB(opt_img->format, 0,0,0)); img = SDL_CreateTextureFromSurface( renderer, opt_img); ///bucle principal. while(Run) { start = SDL_GetTicks(); ///pollEvent's while(SDL_PollEvent(&event)) { if(event.type == SDL_QUIT) { Run = false; #ifdef _DEBUG_ENABLE SDL_Log("se acabo"); #endif } if(event.type == SDL_KEYDOWN || event.type == SDL_FINGERDOWN) { if(event.type == SDL_FINGERDOWN) { color_pantalla.g +=32 ; if(color_pantalla.g == 256) { color_pantalla.g = 0; color_pantalla.r += 32; color_pantalla.b += 64; if(color_pantalla.r == 256) color_pantalla.r = 0; if(color_pantalla.b == 256) color_pantalla.b = 0; } } } }//end event; //update for(unsigned int initializer = 0; initializer <255; initializer++) { start_pos[initializer].x = 10 + rand() % width; start_pos[initializer].y = 10 + rand() % height; start_pos[initializer].w = 32; start_pos[initializer].h = 32; } //Draw SDL_RenderClear(renderer); SDL_SetRenderDrawColor( renderer, color_pantalla.r, color_pantalla.g, color_pantalla.b, color_pantalla.a); SDL_RenderFillRect( renderer, &fillRect ); CopiarPantalla(renderer,start_pos,img); SDL_RenderCopy(renderer, img,NULL,&player); SDL_RenderPresent(renderer); //FPS } } return 0; }
pienso que el error puede estar la funcion copiar.. pero no estoy seguro. por cierto en Desktop cuando la corro la aplicacion cierra desde que entra al primer for , pero en mobil es diferente y es confuso.
gracias