es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rectángulo no apareciendo con SDL

Quiero que aparezca un rectángulo gris en la posición 100, 100 en la pantalla.

Aquí está mi código para dibujar el bloque:

void drawBlock() {
  // hacer que las paredes sean grises
  SDL_SetRenderDrawColor(rend, 210, 209, 205, 255);
  SDL_Rect block = {
        .x = 100,
        .y = 100,
        .w = TAMAÑO_BLOQUE,
        .h = TAMAÑO_BLOQUE
  };

  SDL_RenderFillRect(rend, &block);
}

Luego inicializo la función anterior int main():

c
void drawBlock();

Y la llamo aquí:

    /* Limpiar la pantalla */
    SDL_SetRenderDrawColor(rend, 0, 0, 0, 255);
    SDL_RenderClear(rend);

drawBlock(); // la función se llama aquí

/* Mover el rectángulo */
x_vel = (right_pressed - left_pressed)*VELOCIDAD;
y_vel = (down_pressed - up_pressed)*VELOCIDAD;

x_pos += x_vel / 60;
y_pos += y_vel / 60;

rect.x = x_pos;
rect.y = y_pos;

if (x_pos <= 0) { // Limitar el objeto dentro de los límites de la pantalla
  x_pos = 0;
}
if (x_pos >= ANCHO - rect.w) {
  x_pos = ANCHO - rect.w;
}
if (y_pos <= 0) {
  y_pos = 0;
}
if (y_pos >= ALTURA - rect.h) {
  y_pos = ALTURA - rect.h;
}

/* Dibujar el rectángulo */
SDL_SetRenderDrawColor(rend, 255, 0, 0, 255);
SDL_RenderFillRect(rend, &rect);
/* Dibujar en la ventana y bucle */
SDL_RenderPresent(rend);
SDL_Delay(1000/FPS);

} // FIN DEL BUCLE DE EJECUCIÓN

/* Liberar recursos */
  SDL_DestroyRenderer(rend);
  SDL_DestroyWindow(window);
  SDL_Quit();

Sin embargo, el bloque no se muestra.

Aquí está mi código completo, donde también puedes ejecutarlo: https://replit.com/@STCollier/OffshoreBoringArguments?v=1

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece haber un problema con el código proporcionado. El bloque no se muestra porque la variable rend no ha sido inicializada, y tampoco se está pasando a la función drawBlock.

    Para solucionar este problema, debes inicializar la variable rend antes de llamar a drawBlock y también pasarla como parámetro a la función. Aquí tienes el código actualizado:

    /* Inicializar el renderizador */
    SDL_Renderer* rend = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    
    /* Función de dibujo - pasar el renderizador como parámetro */
    void drawBlock(SDL_Renderer* rend) {
      // hacer que las paredes sean grises
      SDL_SetRenderDrawColor(rend, 210, 209, 205, 255);
      SDL_Rect block = {
            .x = 100,
            .y = 100,
            .w = BLOCK_SIZE,
            .h = BLOCK_SIZE
      };
    
      SDL_RenderFillRect(rend, &block);
    }
    
    /* Llamar a la función drawBlock */
    drawBlock(rend);
    

    Al inicializar y pasar la variable rend, el bloque debería aparecer ahora en la posición (100, 100) en la pantalla.

Comments are closed.