 |
www.bdjogos.com Biblioteca de Desenvolvedores de Jogos
|
| Exibir tópico anterior :: Exibir próximo tópico |
| Autor |
Mensagem |
DarknessNeo
Registrado: 01/02/10 Mensagens: 1 Localização: SP - Interiorrr
|
Enviada: Seg Fev 01, 2010 3:41 am Assunto: Sobre correção do exercício do capitulo 24 |
|
|
Bom eu tava testando a resposta do exercício desse link
http://www.bdjogos.com/conteudo.php?link=resposta_24.php
| Código: |
- Usando o programa exemplo de movimentação, faça o objeto se mover pela tela de forma que o programa vá aumentando a velocidade do objeto.
Ele deve começar a se mover bem lento e ir ficando cada vez mais rapido.
Para resolver o exercício, criamos uma variável que controla a velocidade.. e criamos também duas outras para verificar a troca de botão.
Caso o usuário aperte um botão diferente, a velocidade é diminuida para 0;
Para ter a sensação de velocidade, também aumentamos o valor do rest. |
O que está acontecendo é o seguinte:
Se você manter o botão que direciona para a direita, por exemplo, a velocidade vai aumentando, porem se vc soltar o botao a velocidade deveria zerar e não continuar aumentado caso vc solte e aperte a mesma direção novamente.
Como eu acho que deveria ser:
Ao soltar o direcional, imediatamente, a velocidade deveria zerar.
Adicionei um switch antes do clear(screen);
| Código: | // Movendo um objeto nas coordenadas x e y
#include <allegro.h>
int main()
{
allegro_init();
set_color_depth(16);
install_keyboard();
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
// inicio da programação atual
int x = 0;
int y = 0;
// variáveis constantes nunca mudam durante a execução do programa
const int tamanho = 30;
int velocidade = 0;
// esta é uma variável flag, que indica qual o ultimo botao apertado
int ultimo_botao = 0;
int botao_atual = 0;
// Laço principal
while( !key[KEY_ESC] )
{
if ( key[KEY_UP] )
{
y = y - velocidade;
velocidade++;
ultimo_botao = 1;
}
if ( key[KEY_DOWN] )
{
y = y + velocidade;
velocidade++;
ultimo_botao = 2;
}
if ( key[KEY_LEFT] )
{
x = x - velocidade;
velocidade++;
ultimo_botao = 3;
}
if ( key[KEY_RIGHT] )
{
x = x + velocidade;
velocidade++;
ultimo_botao = 4;
}
if ( botao_atual != ultimo_botao )
{
botao_atual = ultimo_botao;
velocidade = 0;
}
//switch adicionado para melhor controle da velocidade
switch (ultimo_botao)
{
case 1: { if ( !key[KEY_UP] ) velocidade = 0; break; }
case 2: { if ( !key[KEY_DOWN] ) velocidade = 0; break; }
case 3: { if ( !key[KEY_LEFT] ) velocidade = 0; break; }
case 4: { if ( !key[KEY_RIGHT] ) velocidade = 0; break; }
}
// esta função limpa a tela ou um objeto que tem buffer no allegro
clear( screen );
circlefill( screen, x, y, tamanho, makecol(255, 50, 50) );
// imprimimos as coordenadas x e y na tela para o usuário ver
textprintf_ex( screen, font, 10, 10, makecol(255,0,0), 0, "Variavel X: %d", x);
textprintf_ex( screen, font, 10, 20, makecol(255,0,0), 0, "Variavel Y: %d", y);
textprintf_ex( screen, font, 10, 30, makecol(255,0,0), 0, "Velocidade: %d", velocidade);
// essa função faz o allegro esperar um pouco antes de voltar para o while
rest(50);
}
allegro_exit();
return 0;
}
END_OF_MAIN();
|
Abraço! |
|
| Voltar ao topo |
|
 |
André

Registrado: 27/01/08 Mensagens: 92 Localização: SP
|
Enviada: Seg Fev 01, 2010 12:38 pm Assunto: |
|
|
Ai darkness, foi mal ontem cara, tava te ajudando com o tutorial e fui dormir
Valeu por postar aqui, mas tipo, o clear(); pode ser utilizado bem no comeco do while() tambem, voce pode fazer essas verificacoes de teclas depois de ter limpado o buffer. E muito bem pensado esse lance do switch(). _________________ AC/DC
C/C++
PHP |
|
| Voltar ao topo |
|
 |
|
|
Você não pode enviar mensagens novas neste fórum Você não pode responder mensagens neste fórum Você não pode editar suas mensagens neste fórum Você não pode excluir suas mensagens neste fórum Você não pode votar em enquetes neste fórum
|
|