elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  error en bucle[codigo fuente]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: error en bucle[codigo fuente]  (Leído 1,647 veces)
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
error en bucle[codigo fuente]
« en: 4 Noviembre 2015, 16:34 pm »

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
Código
  1.  
  2.  
  3.  
  4. #include<SDL.h>
  5.  
  6. #include<cstdlib>
  7. #include<ctime>
  8.  
  9. using namespace std;
  10.  
  11.  
  12. void CopiarPantalla(SDL_Renderer *renderer, SDL_Rect start_pos[256],SDL_Texture *img)
  13. {
  14.   for(unsigned int Drawers = 0; Drawers <255; Drawers++)
  15.   {
  16.   SDL_RenderCopy(renderer, img,NULL,&start_pos[Drawers]);
  17.   }
  18.  
  19.  
  20. }
  21.  
  22.  
  23. int main(int argc, char *argv[])
  24. {
  25.  
  26. SDL_Rect player = {10,12,32,32};
  27.  
  28.  
  29. SDL_Window     *window    =  NULL;
  30. SDL_Renderer   *renderer  =  NULL;
  31. int width     =  0 ;
  32. int height  =  0 ;
  33.    bool Run  =  true;
  34.    SDL_Surface    *unloaded  =  NULL;
  35. SDL_Surface    *opt_img  =  NULL;
  36. SDL_Texture    *img  =  NULL;
  37.    SDL_Event    event;
  38. SDL_DisplayMode mode;
  39. unsigned int start = 0;
  40. SDL_Rect start_pos[256];
  41. SDL_Color color_pantalla = {0,0x12,0xa,0xff};
  42. SDL_Rect fillRect;
  43.  
  44. if(SDL_Init(SDL_INIT_EVERYTHING) < 0 )
  45. {
  46. SDL_Log("Imposible Cargar SDL_INIT [%s]", SDL_GetError());
  47.    Run    = false;
  48. }
  49. srand(time(NULL));
  50. for(unsigned int initializer = 0; initializer <255; initializer++)
  51. {
  52. start_pos[initializer].x = 10 + rand() % width;
  53.        start_pos[initializer].y = 10 + rand() % height;
  54.        start_pos[initializer].w = 32;
  55.    start_pos[initializer].h = 32;
  56. }
  57.  
  58. unloaded = SDL_LoadBMP("color.bmp");
  59. if(unloaded == NULL)
  60. {
  61. SDL_Log("No se cargo el graficio");
  62.    Run = false;
  63. }
  64. else
  65. {
  66.  
  67. opt_img =  SDL_ConvertSurfaceFormat( unloaded, SDL_PIXELFORMAT_RGBA8888, NULL );
  68. if(opt_img == NULL)
  69. {
  70. SDL_Log("Imposible optimizar");
  71. Run = false;
  72. }
  73. }
  74.  
  75.  
  76. if(Run == true)
  77. {
  78.  
  79.  
  80.  
  81.  
  82. //obtner el tamano de los valores de la pantalla.
  83. if( SDL_GetCurrentDisplayMode( 0, &mode ) == 0 )
  84.      {
  85. width   = mode.w;
  86. height  = mode.h;
  87. fillRect.w = width;
  88. fillRect.h = height;
  89. player.x = width /2;
  90. player.y = height/2;
  91.  }
  92.  
  93.  
  94. //crear la ventana SDL
  95. window = SDL_CreateWindow("Neo.App",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,width, height, SDL_WINDOW_SHOWN);
  96.     if(window == NULL)
  97. {
  98. SDL_Log("Imposible crear la ventana ,[%s]", SDL_GetError());
  99.     Run = false;
  100. }
  101. else
  102. {
  103. Run = true;
  104.     }
  105.     if(Run == true)
  106. {
  107. renderer = SDL_CreateRenderer(window , -1 ,  SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
  108. if(renderer == NULL)
  109. {
  110. Run = false;
  111. }
  112. }
  113. ///Creamo la textura aqui.
  114. SDL_SetColorKey(opt_img, SDL_TRUE, SDL_MapRGB(opt_img->format, 0,0,0));
  115.  
  116.  
  117. img = SDL_CreateTextureFromSurface( renderer, opt_img);
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. ///bucle principal.
  134. while(Run)
  135. {
  136. start = SDL_GetTicks();
  137. ///pollEvent's
  138. while(SDL_PollEvent(&event))
  139. {
  140. if(event.type == SDL_QUIT)
  141. {
  142. Run = false;
  143. #ifdef _DEBUG_ENABLE
  144.  SDL_Log("se acabo");
  145. #endif
  146. }
  147. if(event.type == SDL_KEYDOWN ||  event.type == SDL_FINGERDOWN)
  148.             {
  149. if(event.type == SDL_FINGERDOWN)
  150. {
  151. color_pantalla.g +=32 ;
  152. if(color_pantalla.g == 256)
  153. {
  154.             color_pantalla.g = 0;
  155.        color_pantalla.r += 32;
  156. color_pantalla.b += 64;
  157. if(color_pantalla.r == 256)
  158. color_pantalla.r = 0;
  159. if(color_pantalla.b == 256)
  160. color_pantalla.b = 0;
  161. }
  162. }
  163.  
  164.  
  165.  
  166. }
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174. }//end event;
  175.  
  176.  
  177. //update
  178.    for(unsigned int initializer = 0; initializer <255; initializer++)
  179. {
  180. start_pos[initializer].x = 10 + rand() % width;
  181.        start_pos[initializer].y = 10 + rand() % height;
  182.        start_pos[initializer].w = 32;
  183.    start_pos[initializer].h = 32;
  184. }
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195. //Draw
  196.  SDL_RenderClear(renderer);
  197.  SDL_SetRenderDrawColor( renderer, color_pantalla.r, color_pantalla.g, color_pantalla.b, color_pantalla.a);        
  198.          SDL_RenderFillRect( renderer, &fillRect );
  199.      CopiarPantalla(renderer,start_pos,img);
  200.  
  201.  SDL_RenderCopy(renderer, img,NULL,&player);
  202.  
  203. SDL_RenderPresent(renderer);
  204.  
  205. //FPS
  206. }
  207.  
  208.  
  209.  
  210.  
  211. }
  212.  
  213. return 0;
  214. }
  215.  



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


« Última modificación: 4 Noviembre 2015, 16:36 pm por bash » En línea

gracias por responder mis dudas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: error en bucle[codigo fuente]
« Respuesta #1 en: 4 Noviembre 2015, 20:09 pm »

¿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.


En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: error en bucle[codigo fuente]
« Respuesta #2 en: 4 Noviembre 2015, 20:11 pm »

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?
« Última modificación: 4 Noviembre 2015, 20:28 pm por bash » En línea

gracias por responder mis dudas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: error en bucle[codigo fuente]
« Respuesta #3 en: 4 Noviembre 2015, 20:41 pm »

En los for pones:
Código
  1. 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines