GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Colisões não funcionando
por RastaMaan Hoje à(s) 19:49

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Hoje à(s) 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21


Introdução ao uso de surfaces

4 participantes

Ir para baixo

Introdução ao uso de surfaces Empty Introdução ao uso de surfaces

Mensagem por Tiago Lima Sáb 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
Tiago Lima

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 14/07/2008
Reputação : 17
Número de Mensagens : 199
Prêmios : Introdução ao uso de surfaces Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

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

Ir para o topo Ir para baixo

Introdução ao uso de surfaces Empty Re: Introdução ao uso de surfaces

Mensagem por All-x Sáb 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!
All-x
All-x

Games Ranking : Nota A

Notas recebidas : B A
Data de inscrição : 20/12/2008
Reputação : 189
Número de Mensagens : 2571
Prêmios : Introdução ao uso de surfaces Empty

Medalhas x 0 Tutoriais x 25 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Javascript
  • C ou C++


https://redscreensoft.com

Ir para o topo Ir para baixo

Introdução ao uso de surfaces Empty Re: Introdução ao uso de surfaces

Mensagem por fonetico Sáb 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
fonetico

Data de inscrição : 05/10/2009
Reputação : 7
Número de Mensagens : 1830
Prêmios : Introdução ao uso de surfaces Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Introdução ao uso de surfaces Empty Re: Introdução ao uso de surfaces

Mensagem por Henrique_GJ Sáb 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
Henrique_GJ

Data de inscrição : 30/12/2009
Reputação : 4
Número de Mensagens : 1344
Prêmios : Introdução ao uso de surfaces Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Java
  • C ou C++


http://sitedosjogos.forumeiros.com

Ir para o topo Ir para baixo

Introdução ao uso de surfaces Empty Re: Introdução ao uso de surfaces

Mensagem por Tiago Lima 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
Tiago Lima

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 14/07/2008
Reputação : 17
Número de Mensagens : 199
Prêmios : Introdução ao uso de surfaces Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

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

Ir para o topo Ir para baixo

Introdução ao uso de surfaces Empty Re: Introdução ao uso de surfaces

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos