Conheça a iniciativa da Biblioteca dos Desenvolvedores
Índice da Biblioteca
Área dos Usuários
Fórum de Discussão
OPERAÇÕES COM IMAGENS (ROTAÇÃO E ESCALA)
Nesse capitulo iremos aprender a usar as funções de rotação e escala que o Allegro disponibiliza para os programadores. Abaixo segue a imagem que iremos utilizar e uma lista das funções.
Imagem
rotate_sprite
rotate_sprite_v_flip
rotate_scaled_sprite
rotate_scaled_sprite_v_flip
Todas as funções de rotação e escala possuem o argumento angle ou scale que são do tipo fixed.
Em especial para esse argumento, devemos fazer a conversão do valor inteiro para fixo.
A função responsável por essa conversão é itofix (int).
VOCÊ PRECISA
SABER...
Ângulo com o valor positivo rotaciona a imagem no sentido horário. Ângulo com valor negativo rotaciona imagem no sentido anti-horário.
FUNÇÕES DE ROTAÇÃO
void rotate_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle);
Essa função rotaciona qualquer imagem.
No entanto, ela não segue as regras do mundo real. Por exemplo, para nós um circulo cheio tem 360 graus, para essa função um circulo cheio tem 256 graus. Assim como para cada um dos 4 lados de uma circunferência temos 90 graus, nessa função cada lado tem 64 graus. Ela recebe como argumentos:
O código acima deve deixar claro a diferença entre as duas funções.
Execute e confira o resultado...
FUNÇÕES DE ROTAÇÃO E ESCALA
void rotate_scaled_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle, fixed scale);
Essa função aumenta a escala e rotaciona ao mesmo tempo.
Se você precisar utilizar essas duas opções ao mesmo tempo essa função é perfeita. Ela recebe como argumentos:
Destino da imagem rotacionada e ampliada: screen
Imagem que devemos rotacionar ou ampliar: bdjogos
Posição x: 0
Posição y: 100
Ângulo da imagem: itofix(0) – Zero Graus
Escala da imagem: 2
Exemplo:
//Imagem com escala maior rotate_scaled_sprite(screen, bdjogos, 0, 0, itofix(0), itofix(2));
O exemplo acima mostra a imagem ampliada em 2x o tamanho dela. A escala sempre vai ser a quantidade de vezes que você quer expandir a imagem. Nesse caso a imagem foi expandida duas vezes.
void rotate_scaled_sprite_v_flip(BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle, fixed scale);
Essa função aumenta a escala e rotaciona ao mesmo tempo. Se você precisar utilizar essas duas opções ao mesmo tempo essa função é perfeita. Ela recebe como argumentos:
Destino da imagem rotacionada e ampliada: screen
Imagem que devemos rotacionar ou ampliar: bdjogos
Posição x: 0
Posição y: 100
Ângulo da imagem: itofix(0) – Zero Graus
Escala da imagem: 2
Exemplo:
//Imagem invertida e com escala maior rotate_scaled_sprite_v_flip(screen, bdjogos, 0, 0, itofix(0), itofix(2));
O exemplo acima mostra a imagem invertida e ampliada em 2x o tamanho dela. A escala sempre vai ser a quantidade de vezes que você quer expandir a imagem. Nesse caso a imagem foi expandida duas vezes.
Para exemplificar o resultado das duas funções segue o código abaixo.
FIM DO CÓDIGO Copie o código acima para o seu compilador e execute para conferir o resultado.
Caro leitor, chegamos ao fim do entendimento das funções de rotação e escala de imagens.
Qualquer dúvida entre em contato com o pessoal da BDJgos através do fórum.
01/06/2007 (C) Copyright. Todos os Direitos Reservados. Leia a política de privacidade do portal.
É proibida a cópia de conteúdo deste site de acordo com
a Lei Brasileira de Direitos Autorais.