7 de novembro de 2014

Como usar Surfaces

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.

Nenhum comentário :

Postar um comentário