Introdução ao uso de surfaces

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Qualidade Introdução ao uso de surfaces

Mensagem por Tiago Lima em Sab 11 Dez 2010, 20:03

Introdução ao uso de surfaces


Aprenda o básico sobre a utilização de surfaces



Nível: médio (nem tanto)
Requerimentos: GM 6, 7 ou 8 PRO

Uma surface (superficie) na realida seria como uma folha de papel em branco na qual você pode usar normalmente as funções de desenho do Game Maker para desenhar nela. Após criada, é possivel se utilizar o desenho nela até mesmo como sprite, entre outras coisas. É possivel tambem copiar de uma surface para outra e salvar uma surface como uma imagem no formato .png .

Antes de continuar é muito importante entender:

O Game Maker trabalho de uma forma um tanto peculiar (grande novidade), sabe o que aparece na tela enquanto você joga um jogo feito no Game Maker? Todas as imagens que compoem o cenário e os personagens do seu jogo, antes de ir parar no seu monitor são desenhados em uma surface especial, isso mesmo, assim que você abre um jogo feito no Game Maker ele cria automaticamente uma surface, e a cada step o GM apaga e redesenha essa surface, porem essa surface é diferente das outras, ela é especial, para se desenhar nela você utiliza o evento Draw, né? Porem para se desenhar em uma surface comum você jamais deverá usar o evento draw, ele é esclusivo da surface especial do GM.

Outra coisa, o game maker desenha por padrão na surface especial dele, se você quiser desenhar na sua (alias, só você é quem pode desenhar em uma surface comum, o Game Maker só usa a superficie padrão dele, e ela é a unica que é desenhada diretamente na tela ou monitor) você tenque avisar pra ele que você vai pra a surface que você criou, se não dá problema (o GM não tem bola de cristal nem lê pensamento Rolling Eyes .


Bem, deixando de papo, vamos começar?

Antes de tudo nós temos que criar uma surface, agora raciocina comigo, raciocina comigo, se é pra criar uma surface, que evento se usa? O Draw? ERRADO, se usa o evento Create!
Repetindo, o evento Draw só serve para se desenhar na surface especial do GM, na que você criar, não use o evento draw, por favor!!!

Evento Create:


surface_create(w,h)


Onde o W é a largura e H é a altura da surface, essa função retorna uma ID para a surface criada, portanto o resultado dela deva ser armazenado numa variavel.


ID_surface = surface_create(50, 50)


Pronto, nós já temos uma surface para desenharmos o que quiser nela!!! ( eu vou desenhar o papai e a mamãe!!! )

Porem até o momento nós só criamos a surface, agora temos que dizer pro GM que queremos usar ela.


ID_surface = surface_create(50, 50);
surface_set_target(ID_surface)


Pronto, agora podemos desenhar à vontade.
A função surface_set_target(ID_surface) recebe uma variavel que armazena a ID de uma surface.

Para desenhar em uma suface, eu repito, não use o evento Draw, ele é de uso exclusivo da surface especial do GM!!!
Iremos usar o evento Create mesmo, nesse caso; nada lhe empende de usar outro evento (a não ser a lógica de programação, né? E como eu disse, não use o evento DRAW!!!)


ID_surface = surface_create(50, 50);
surface_set_target(ID_surface);
draw_text(5,5,"Estou desenhado um texto no com o evento Create!!!")


Pronto, você já desenhou um texto na surface, porem ele ainda não será exibido na tela, why? Porque ele foi desenhado na sua surface, e como eu disse, a unica surface que vai parar na tela é a surface super especial do GM.
Então, vamos copiar a nossa surface para a surface especial do GM.

Antes de copiar, nós temos que avisar pro GM que já paramos de usar nossa surface, para isso se usa a função surface_reset_target()


ID_surface = surface_create(50, 50);
surface_set_target(ID_surface);
draw_text(5,5,"Estou desenhado um texto no evento Create!!!")
surface_reset_target()


Pronto, nossa surface já foi desenhada e já dissemos pro GM que acabamos de usar, agora vamos copiar para super surface, a sufarce especial do GM:

Evento Draw:

draw_surface(ID_surface,0,0)


Ué? não entendi, por que você colococou o código no evento Draw? É elementar meu caro leito, eu disse que o evento Draw só deve ser usado quando queremos desenha algo na surface especial do GM, o que nós queremos fazer não é desenhar a sua surface na surface especial do GM? Pois então...

A função draw_surface(ID_surface, x, y) recebi uma variavel com a ID de alguma surface e desenha essa mesma surface na surface especia do GM na posição que você indicar na função, como envolve desenhar na surface especial do GM, então nós colocamos o código no evento Draw, deu pra sacar?

Repetindo (Meu Deus...), para se desenhar em suas surfaces, não se usa o evento draw, para desenhar na surface do GM se usa o evento Draw.

Teste o código.

Oxi? Não apreceu o testo todo!!!
A razão é simples, o que você tentou desenhar na surface é maior que a sua surface, aumente o tamanho da surface que aparece tudo.

No Evento Create substitua:

ID_surface = surface_create(640, 480);
surface_set_target(ID_surface);
draw_text(5,5,"Estou desenhado um texto no evento Create!!!")
surface_reset_target()


Pronto, agora funfou!!!

Numa suface você pode usar todas as funções de desenho, e surfaces são uteis para criar efeitos especias, imagens manipulaveis e sprites mais dinamicos, por exemplo o solo do jogo worm deve ser feito usando uma surface como sprite.

Notas:

  • É possivel copiar uma surface para a tela(surface especial do GM), mas não é possivel copiar da tela para uma surface;
  • É possivel criar sprites e backgrounds apartir de uma surface;
  • Sufaces não combinam com 3D (dá Bug pra burro...);
  • Se mudar a resolução do monitor ou entrar a proteção de tela durante o jogo você pode perder a sua surface.


Surfaces muito grandes podem causar problemas no jogo, é recomendado se utilizar no maximo 2048 x 2048px de tamanho, o problema depende da placa de video, placas muito antigas não trabalharão com valores maiores que esses, porem placas muito boas podem suportar surfaces de até 8192 x 8192px.

Outras infromações ficam para outro dia...

Fonte de pesquisa: http://wiki.yoyogames.com/index.php/Surfaces

Por favor, digam se gostaram, pois é isso que alimenta em alguem o desejo de escrever tutoriais!!!

Tiago Lima

Ranking : Nota C
Número de Mensagens : 199
Data de inscrição : 14/07/2008
Notas recebidas : C
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.youtube.com/user/CanalNexteLevel

Voltar ao Topo Ir em baixo

Qualidade Re: Introdução ao uso de surfaces

Mensagem por Alex FC em Sab 11 Dez 2010, 20:17

Cara, você não sabe como me ajudou. Já faz algum tempo que tento entender surfaces e não conseguia justamente por causa do DRAW. E você deixa isso muito claro no seu tutorial.

Ótimo tutorial cara. Vai ajudar muita gente.

Dica: Coloque um exemplo de como usar esses surfaces (Ex: letreiros de music players).

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Qualidade Re: Introdução ao uso de surfaces

Mensagem por fonetico em Sab 11 Dez 2010, 21:39

Caraca! Era o que eu precisava! Valeu mesmo cara. Sempre queria saber como usar surfaces, e da mesma forma, sempre tinha dores de cabeça.

Só que... Ainda não vi muita utilidade delas. O exemplo de solo do worm não entendi, tem como você colocar alguns exemplos pra gente ver? Por que eu ainda não vi nenhuma utilidade nelas (mas sei que tem!).

fonetico

Número de Mensagens : 1830
Idade : 21
Data de inscrição : 05/10/2009
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: Introdução ao uso de surfaces

Mensagem por Henrique_GJ em Sab 11 Dez 2010, 22:09

pelo que eu entendi, com a surface podemos modificar algumas coisas no modo como se desenha a imagem na tela, PELO QUE EU ENTENDI

logo no worms, quando se dá um tiro, é como se deletassem da sprite somente os pixels que tem distancia menor que um determinado valor e que não colidem com objetos "solidos" tem como fazer isso no draw mas muito dificil e mal, o jeito seria colocar na room objetos que desenhassem no seu x e no seu y mas aí ficaria mais facil utilizar sprite mesmo que ficaria até melhor e nesse caso o draw normal adiantaria

acho que com surface você "desenha" na sprite nem sei se tem como fazer isso no draw mas segundo o tblima 123 é como se você desenhasse na sua propria folha de papale então como ele deu o exemplo do worms DEU PRA ENTENDER que isso só se faz com surfaces


PERGUNTINHA

os codigos usados em surfaces são os mesmos do draw? porque se forem num vai dar no mesmo?

porque tipo quando vamos fazer um jogo 3d as funções adaptadas ao 3d sempre começam com d3d_? então surface muda alguma cosia tbm?

se não mudar então dá no mesm oque usar draw :B

Henrique_GJ

Número de Mensagens : 1344
Idade : 19
Data de inscrição : 30/12/2009
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://sitedosjogos.forumeiros.com

Voltar ao Topo Ir em baixo

Qualidade Re: Introdução ao uso de surfaces

Mensagem por Tiago Lima em Dom 12 Dez 2010, 16:44

Olha pessoal, eu fiz uma engine aqui, ficou bem feinha pois foi com pressa, é para vocês verem como é que se deleta parte de um sprite usando surface.

Código:

http://www.4shared.com/file/TUM37YFO/deletar_parte.html

Os códigos usados nas surfaces são os mesmos do evento draw, porem com surfaces você pode cirar sprites, editar sprites, pode criar uma tela de pintura que não se apaga todo step...

Por exemplo, sabe aquele método de criar um objeto com um sprite de 1px x 1px pra usar como a ferramente lápiz do paint? Esquece isso! É só a cada step você desenhar um ponto com a função draw_point() em uma surface e depois exibir essa surface na tela.

Tiago Lima

Ranking : Nota C
Número de Mensagens : 199
Data de inscrição : 14/07/2008
Notas recebidas : C
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.youtube.com/user/CanalNexteLevel

Voltar ao Topo Ir em baixo

Qualidade Re: Introdução ao uso de surfaces

Mensagem por Conteúdo patrocinado Hoje à(s) 20:13


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum