SDL/C acertar tiro em objeto que esta se movimentando

Pessoal, fiz uma função que atira em objetos que estão se movendo, porém os tiros sempre chegar depois da posição desses objetos. Como posso fazer para que os tiros acertem as posições corretas?

Sem saber o que é “posição correta” e o que é “acertar depois”, fica difícil sugerir qualquer coisa. Mostra pra gente. Se o código for extenso, tenta desenhar/mostrar prints do que está acontecendo e do que você queria que acontecesse.

Abraço.

Posições corretas seriam as posições de um personagem em momento t, no meu caso tenho um vetor de zumbis quem andam na tela.
Seguem as funções que estou utilizando.

float distancia(SDL_Rect zumbi, SDL_Rect torre)
{
int xzumbi = zumbi.x;
int yzumbi = zumbi.y;

int xTorre = torre.x;
int yTorre = torre.y;

double distancia = sqrt(pow(yzumbi-yTorre,2) + pow(xzumbi-xTorre,2));

// retornar a distancia , na outra funcao guardar a menor distancia e o indice da menor distancia
return distancia;

}

void zumbiAlcance()
{
int dist;
int menorDist = 3000;
int indZumbi;

for (int i = 0; i < qtdTorres; i++)
{
	if(t1[i].estado == ATIVADA)
	{
		for (int j = 0; j < tamOrda; j++)
		{
			if (z1[j].estado == VIVO)
			{
				dist = distancia(t1[i].rect,z1[j].rect);

				if(dist < menorDist)
				{
					menorDist = dist;
					indZumbi = j;
				}
			}
		}

		t1[i].xVel = z1[indZumbi].rect.x;
		t1[i].yVel = z1[indZumbi].rect.y;
		menorDist = 3000;
	}

}

}

Cara, esse tipo de código é melhor ver rodando mesmo (ou postar imagens, como sugeri).

Mas uma análise: se as torres estão disparando contra alvos móveis, onde elas estão mirando? Você não pode deixar que as torres mirem na posição atual do inimigo, tem que fazer elas mirarem na posição futura dele (onde ele vai estar quando o tiro o alcançar). Se você dispara na posição atual, quando o tiro chegar lá é óbvio que o zumbi já terá passado.

Abraço.