Pessoal, como faço para apagar os rastros dos tiros? No código abaixo toda vez que o usuário aperta a tecla “space” um tiro é acionado. Coloquei a imagem de fundo p/ ser blitada antes do tiro para tentar apagar os rastros dos blitis da imagem do tiro mas não esta funcionando. Usando sem imagem de fundo e com a função fill rect pra pintar a tela preto, o código abaixo funciona sem rastro. Gostaria de uma ideia pra resolver o problema. Desde de já agradeço a atenção!
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_rotozoom.h>
#include <time.h>
#include <math.h>
#define MAX 100
// para compilar: gcc rot.c -o rot `sdl-config --cflags --libs` -lSDL_gfx -lSDL_image -lm
// ou gcc rot.c -o rot -lSDL -lSDL_image -lSDL_gfx -lm
SDL_Surface* window;
SDL_Surface* torre;
SDL_Surface* fundo;
SDL_Surface* tiro;
SDL_Rect rectTorre; // faz a figura nascer no meio da tela
SDL_Rect rectTiro;
int loop = 1, tiroAtivo = 0;
float angulo = 0;
int main(void)
{
SDL_Init(SDL_INIT_VIDEO);
window = SDL_SetVideoMode(760, 600, 0, 0);
torre = IMG_Load("soldado.png");
fundo = IMG_Load("fundo.png");
tiro = IMG_Load("tiro.png");
//rectTorre = {window->w/2, window->h/2}; // faz a figura nascer no meio da tela
rectTorre.x = window->w/2;
rectTorre.y = window->h/2;
SDL_Event event;
while(loop)
{
if(SDL_PollEvent(&event))
{
if(event.type == SDL_QUIT)
loop = 0;
if(event.type == SDL_KEYDOWN)
{
switch(event.key.keysym.sym)
{
case SDLK_UP: rectTorre.y -= 10; break;
case SDLK_DOWN: rectTorre.y += 10; break;
case SDLK_LEFT: rectTorre.x -= 10; break;
case SDLK_RIGHT: rectTorre.x += 10; break;
case SDLK_SPACE:
rectTiro.x = rectTorre.x;
rectTiro.y = rectTorre.y;
tiroAtivo = 1;
break;
case SDLK_r: angulo += 5; break;
case SDLK_t: angulo -= 5; break;
default: break;
}
}
}
SDL_Surface* transformedSurface = rotozoomSurface(torre,angulo,1.0,SMOOTHING_ON);
if(rectTiro.y > 0 && tiroAtivo)
{
rectTiro.y -= 10;
SDL_BlitSurface(fundo, NULL, window, NULL);
SDL_BlitSurface(tiro, NULL, fundo, &rectTiro);
}else
{
tiroAtivo = 0;
//SDL_BlitSurface(fundo, NULL, window, NULL);
}
SDL_BlitSurface(fundo, NULL, window, NULL);
SDL_BlitSurface(transformedSurface, NULL, window, &rectTorre);
//SDL_UpdateRect(window,0,0,0,0); // Atualiza todo o screen
//SDL_FillRect(window, NULL, 0);
SDL_FreeSurface(transformedSurface);
SDL_Flip(window);
}
IMG_Quit();
SDL_Quit(); // Fecha o SDL
return 0;
}