Ir ao conteúdo
  • Cadastre-se

C++ limpar tela por menos tempo


Posts recomendados

Oi, eu estou fazendo um jogo com uma câmera que segue um personagem, quando o personagem se move, as coisas mudam de posição para simular o movimento do personagem. para fazer isso, ela limpa a tela com system("cls")e depois redesenha tudo nas posições diferentes, como na maioria dos jogos. Mas, a system("cls) está deixando a tela limpa por mais tempo do que deveria, mesmo que na linha depois de usá-la eu ja redesenhe, ainda fica por muito tempo. Isso deixa o jogo horrível de se jogar. gostaria de alguma função que limpe a tela por menos tempo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

ta consegui com uma outra função:

void clrscr()
{
	COORD coordScreen = { 0, 0 };
	DWORD cCharsWritten;
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	DWORD dwConSize;
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

	GetConsoleScreenBufferInfo(hConsole, &csbi);
	dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
	FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
	GetConsoleScreenBufferInfo(hConsole, &csbi);
	FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
	SetConsoleCursorPosition(hConsole, coordScreen);
	return;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Daniel Bittencourt system() não funciona aqui pra mim, o que eu costumo usar é isso:

#define		preto            0
#define		azul             1
#define		verde            2
#define		ciano            3
#define		vermelho         4
#define		magenta          5
#define		marrom           6
#define		cinza_claro      7
#define		cinza_escuro     8
#define		azul_claro       9
#define		verde_claro     10
#define		ciano_claro     11
#define		vermelho_claro  12
#define		magenta_claro   13
#define		amarelo         14
#define		branco          15

void LimpaTela(void)
{
    WORD wColor = ((preto & 0x0F) << 4) + (cinza_claro & 0x0F);
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord = {0, 0};
    DWORD cont;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    SetConsoleTextAttribute(hStdOut, wColor);
    if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
    {
        FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &cont);
        FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &cont );
        SetConsoleCursorPosition(hStdOut, coord);
    }
    return;
}

O que essa função faz é preencher tudo com espaços, e ela também reestabelece a cor do fundo e a dos caracteres para caso tenha usado a função SetConsoleTextAttribute() anteriormente para colorir algo. Pra resumir, FillConsoleOutputCharacter() e FillConsoleOutputAttribute() limpam os caracteres e atributos.

Por fim, ela coloca o cursor de volta na posição (0,0).

 

1 hora atrás, Daniel Bittencourt disse:

ta consegui com uma outra função

"conseguiu" com uma função que você achou por aí, imagino que não saiba como ela funciona.

Está usando a API do Windows, e não é nada muito complexo, o nome das funções são meio que autoexplicativos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...