Adicionando um visor
afinal estamos olhando através de um periscóprio

Adicionar o periscópio significa na prática limitar a visão a uma área determinada do cenário, com um desenho ou "recorte" não clássico (um retângulo, por exemplo).

Simplificadamente seriam dois círculos interligados, imitando o visor do periscópio, ou duas elipses. O que precisamos fazer é criar o recorte do visor e mostrar, dentro deste recorte, o que seria a visão do comandante. Na verdade, temos a visão do mar, naquela TImage de 360 x 186. O que precisamos fazer então é sobrepor a ela o visor, deixando transparecer apenas o pedaço correspondente ao que o comandante vê. Para isso usamos o truque da máscara de impressão (abordado em diversas matérias do club TILT).

Num editor gráfico qualquer, partimos das elipses sobrepostas. Removemos a parte interna e a tingimos de preto. Esta será a nossa máscara de impressão.

Usando esta mesma imagem, num segundo arquivo, pintamos o contorno com uma cor metálica qualquer. Para criar a idéa de volume (3D), usei um filtro especial do Paint Shop Pro, chamado Inner Bevel. Seleciona-se a região desejada e o filtro se encarrega de criar o efeito tridimensional, com o tipo de recorte que se deseja. Este mesmo filtro ainda será usado para produzir "volume" nos navios, mas isso já é um outro caso.

Temos portanto dois arquivos gráficos: a máscara, que é na verdade o inverso do que aparece nas figuras acima (a área visível deve ser branca e o contorno em preto) e o visor propiamente dito (o correspondente à transparência deve ser preto).

Para termos a visão, vamos adicionar ao programa mais duas TImage "invisíveis" a olho nú, que chamaremos de Mask e Visor. Na procedure que monta a visão do comandante, adicionamos:

Pegue aqui: a máscara e o visor.

var
  T1,T2,T3,T4: HBitmap;
...
 T3:= Form1.Visor.Canvas.Handle;
 T4:= Form1.Mask.Canvas.Handle;
 BitBlt(T1,0,0,360,186,T4,0,0,srcand);
 BitBlt(T1,0,0,360,186,T3,0,0,srcpaint);
end;

Pronto. Agora o jogador só vê a imagem que está dentro do visor.

 
online