Buenas a todos !!
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
#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
¿Qué errores te dá?
No pretendas poner un código de 200 líneas y que tengamos más idea de él que tú :/
Ve punto a punto revisando qué es correcto. Localiza la línea en que ves el fallo. Fíjate en las variables que intervienen en el fallo, y mira cuál es incorrecta o cual podría provocar el fallo.
Si encuentras una variable, simplemente localiza donde le das el valor, y busca el problema.
Avanza, y nos comentas.
disculpa , el unico error que me da es que la aplicacion cae, he estado despurando y cada vez que entro en el for de la linea 14 la aplicacion falla.
pienso que es por que esta dentro de un bucle while , pero por que justamente ahi?
por cierto la declaracioon de un SDL_Rect start[256] podria darme problema siendo una struct arreglo de 256 campos?
--------------------------------------------------------------------------------------------
el problema es el for dentro del bucle while cada vez que llamo a la funcion CopiarPantalla
la aplicacion se cierra.
la pregunta es como podria hacer para usar los 256 elementos de esa struct?
En los for pones:
for(unsigned int initializer = 0; initializer <255; initializer++)
<255. Si tiene 256 elementos, y los quieres recorrer todos, has de poner <256. Si pones <255 vas a recorrer hasta el elemento 255, de índice 254.
Por lo demás, sigue buscando qué pueda fallar.