Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

@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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!