Surfaces são telas invisíveis utilizadas para desenhar e, somente quando concluimos o desenho, trasnferir o desenho para a tela do jogo, tornando-o visível. Este tutorial tem como objetivo ensinar o básico sobre como criar surfaces, apresentar algumas aplicações e explicar suas funções.
Para utilizar surfaces é essencial armazenar sua id durante a criação. Para isso declaramos uma variável dessa maneira:
nome_da_surface = surface_create(view_wview[0], view_hview[0])
Com sua surface criada, basta indicar quando desenharemos nela, o que desenharemos e quando ela será desenhada na tela. Leambrando que funções Draw devem ser sempre utilizadas no Draw Event, porém, com surfaces é possível desenhar nelas utilizando outros eventos e colocar somente a função que transfere o desenho da surface para a tela no Draw Event.
surface_set_target(nome_da_surface)
draw_clear_alpha(c_white, 0)
*seus desenhos*
surface_reset_target()
A função utilizada para transferir o desenho da surface para a tela é draw_surface(id, x, y), porém é importante lembrar que surfaces são muito "frágeis". Se houver uma mudança no tamanho da tela, ou o jogo ficar em segundo plano, a surface será destruída e ocasionará em erro ao tentar desenhar em uma surface que não existe. Para isso é importante criar uma medida à prova de falhas.
if surface_exists(nome_da_surface)
{
draw_surface(nome_da_surface, view_xview[0], view_yview[0])
}
else
{
nome_da_surface = surface_create(view_wview[0], view_hview[0])
}
Surfaces são utéis para criar efeito de dia/noite, iluminação, lanterna, eventos climáticos, desenhar sprites, sombras, entre outros. Tire um tempo pra ficar por dentro do funcionamento de todas funções relacionadas às surfaces e Draw para tirar melhor proveito da ferramenta.
Para surfaces que são utilizadas e descartadas é importante sempre lembrar de usar surface_free(surface) que irá liberar a surface da memória. Caso isso não seja feito, seu jogo terá uma notável queda de desempenho.
Dicas:
Surfaces são desenhadas na mesma profundidade do objeto que as criou. Crie outros objetos com diferentes profundidades (depth) para criar camadas de desenho.
É necessário que o objeto que está desenhando a surface esteja marcado como visível, ou a variável visible seja verdadeira no momento do desenho, caso contrário o desenho não aparecerá.
Desenhar consome muita memória, portanto evite desenhos desnecessários, como desenhar sombras durantes a noite. Para evitar isso realize uma checagem antes do código do desenho.
Seguem outras funções importantes para utilizar surfaces:
surface_resize(surface, largura, altura) - Altera o tamanho da surface.
surface_copy(surface_destino, x, y, surface_fonte) - Copia os desenhos da "surface_origem" para a "surface_destino" na posição indicada.
surface_copy_part(surface_destino, x, y, surface_fonte, xf, yf, largura, altura) - Copia parte do conteúdo da "surface_fonte" à partir da posição xf e yf com largura e altura indicadas.
surface_get_height(surface) - Retorna a altura de uma surface.
surface_get_width(surface) - Retorna a largura de uma surface.
surface_getpixel(surface, x, y) - Retorna a cor do pixel na posição indicada.
surface_getpixel_ext(surface, x, y) - Retorna a cor do pixel em abgr 32bit na posição indicada.
surface_save(surface, arquivo) - Salva uma surface no arquivo indicado.
surface_save_part(surface, arquivo, x, y, largura, altura) - Salva parte de uma surface à partir da posição x e y com largura e altura especificada.
Seguem outras funções importantes para utilizar surfaces:
surface_resize(surface, largura, altura) - Altera o tamanho da surface.
surface_copy(surface_destino, x, y, surface_fonte) - Copia os desenhos da "surface_origem" para a "surface_destino" na posição indicada.
surface_copy_part(surface_destino, x, y, surface_fonte, xf, yf, largura, altura) - Copia parte do conteúdo da "surface_fonte" à partir da posição xf e yf com largura e altura indicadas.
surface_get_height(surface) - Retorna a altura de uma surface.
surface_get_width(surface) - Retorna a largura de uma surface.
surface_getpixel(surface, x, y) - Retorna a cor do pixel na posição indicada.
surface_getpixel_ext(surface, x, y) - Retorna a cor do pixel em abgr 32bit na posição indicada.
surface_save(surface, arquivo) - Salva uma surface no arquivo indicado.
surface_save_part(surface, arquivo, x, y, largura, altura) - Salva parte de uma surface à partir da posição x e y com largura e altura especificada.
Nenhum comentário :
Postar um comentário