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
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


depth in draw

+2
DieBoy
Isaque Onix
6 participantes

Ir para baixo

depth in draw Empty depth in draw

Mensagem por Isaque Onix Qui 04 Set 2014, 13:44

ola, gostaria de saber como desenhar varios sprites um em cima do outro, apenas variando o depth (do draw)

bom, pra explicar melhor, eu estou armazenando as informaçoes de um "objeto" que e baseado em varios sprites, e essas informaçoes estao armazenadas em arrais.
mais, as veses, o sprite que esta em baixo tambem precisa ser desenhado em cima, tem como fazer isso?

eu tentei algo assim:

Código:
depth=arr[0,4]//aqui, arr = -100
draw_sprite(arr[0,0],arr[0,1],arr[0,2],arr[0,3])
depth=arr[1,4]//aqui, arr = 99
draw_sprite(arr[1,0],arr[1,1],arr[1,2],arr[1,3])
//E SO UM EXEMPLO!!!

Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : depth in draw 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
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por DieBoy Qui 04 Set 2014, 13:56

Olá, os "draw's" já seguem a mesma depth do objeto que a está desenhando...
Ou seja, se um objeto com 1 de depth desenhar um sprite no mesmo local que outro com 0...O sprite desenhado pelo que está com depth 0, ficará por cima!

Mas, caso deseje que um mesmo objeto desenhe 2 sprites...Fique sabendo que no caso segue a ordem de desenho...
Ou seja, o 1° sprite a ser desenhado, ficará embaixo do 2° e assim em diante.

Veja exemplo:

Código:

draw_sprite(50, 50, spr_1); //Esse ficará embaixo de todos os sprites seguintes
draw_sprite(50, 50, spr_2); //Esse ficará em cima do spr_1 e embaixo do spr_3
draw_sprite(50, 50, spr_3); //Esse ficará por cima de todos os anteriores
DieBoy
DieBoy

Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios : depth in draw 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

depth in draw Empty Re: depth in draw

Mensagem por Isaque Onix Qui 04 Set 2014, 14:04

isso eu sei meu amigo, nao sou um iniciante.
oque eu quero, e variar o depth no draw do mesmo objeto, intende...
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : depth in draw 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
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por matheusco Qui 04 Set 2014, 14:07

Isaque Onix escreveu:isso eu sei meu amigo, nao sou um iniciante.
oque eu quero, e variar o depth no draw do mesmo objeto, intende...

Talvez trocando a própria depth do objeto que está desenhando, durante o desenho. Meio difícil sincronizar isso, dependendo do que você quer fazer, mas talvez dê certo. Só testando mesmo.
matheusco
matheusco

Data de inscrição : 10/08/2014
Reputação : 51
Número de Mensagens : 395
Prêmios : depth in draw Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

http://www.tutoriaisgamemaker.com.br

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por DieBoy Qui 04 Set 2014, 14:12

o.O então...Como eu acabei de falar, a ordem do desenho e blabla...Faria isso.

Mas como eu acabei de falar também...A depth do draw, é a mesma do objeto...Portanto basta mudar a variável depth do objeto...Segue exemplo:

Código:

depth = 0;
draw_sprite(50, 50, spr_1); //Por cima de todos
depth = 1;
draw_sprite(50, 50, spr_2); //Por cima de spr_3
depth = 2;
draw_sprite(50, 50, spr_3); //Embaixo de todos
DieBoy
DieBoy

Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios : depth in draw 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

depth in draw Empty Re: depth in draw

Mensagem por dharrison Qui 04 Set 2014, 14:20

Mudar o depth não adianta, pois a cada novo Frame/Step o depth ficará sendo alterado.

O depth influencia na layer que o Objeto está, não o Draw que ele cria.

Basta fazer da mesma forma que o DieBoy explicou, mas sem usar as linhas Depth.
Por padrão o draw é feito na ordem que ele é colocado, quando mais para baixo, mas acima ficará o desenho
dharrison
dharrison

Games Ranking : Nota B

Notas recebidas : A - B
Data de inscrição : 04/02/2009
Reputação : 120
Número de Mensagens : 1363
Prêmios : depth in draw Empty

Medalhas x 0 Tutoriais x 9 Moedas x 0

Ouro x 0 Prata x 1 Bronze x 0

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


Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por Isaque Onix Qui 04 Set 2014, 14:42

nossa...

DieBoy, o código que você me passou e igual ao que eu coloquei no tópico explicando que eu ja tentei...

e, dharrison, como disse no tópico, sao muitas arrais que sao desenhadas juntas criando um personagem, mais as veses uma fica por baixo, as veses por cima, etc... por isso, nao da pra desenhar uma-a-uma. seria mais de 1000 linhas de codigos e ainda sim nao daria certo, pois algo que deveria ficar por cima, ao ser trocado, poderia ficar por baixo...

andei pesquisando e me deparei com um topico, que, ate deu certo, mais nao 100%...
o topico: http://gmc.yoyogames.com/index.php?showtopic=495251
meu teste:
Código:
d3d_start()
d3d_set_depth(-100)
draw_sprite_ext(sprite3,0,x,y-16,1,1,0,c_red,1) draw_text(x+52,y-16,-100)
d3d_set_depth(100)
draw_sprite_ext(sprite3,0,x,y,1,1,0,c_white,1) draw_text(x+52,y,100)
d3d_set_depth(-100)
draw_sprite_ext(sprite3,0,x,y+16,1,1,0,c_blue,1) draw_text(x+52,y+16,-100)
d3d_end()

@offtopic Sain no ingles fluente... uau ksks
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : depth in draw 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
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por dharrison Qui 04 Set 2014, 14:49

acontece essas funções que você usou são em 3D.
As suas Arrays são desenhadas em sequencia, tipo 1, 2, 3...

porque se sim, você pode usar um laço de FOR para o Draw

fora isso não muito como solucionar esse problema...
dharrison
dharrison

Games Ranking : Nota B

Notas recebidas : A - B
Data de inscrição : 04/02/2009
Reputação : 120
Número de Mensagens : 1363
Prêmios : depth in draw Empty

Medalhas x 0 Tutoriais x 9 Moedas x 0

Ouro x 0 Prata x 1 Bronze x 0

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


Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por DieBoy Qui 04 Set 2014, 14:58

o.O não entendi(Tbm não entendi a do d3d funfa...mas não estou falando disso)...De qualquer forma você fazendo assim não vai desenhar de 1 em 1?

Bom, deixa pra lá. Mas avise se isso funcionou para você. Para que possam trancar o tópico.

Caso não tenha funcionado, já que vai desenhar de 1 em 1 mesmo, faça do jeito que já falei:

eu escreveu:
Mas, caso deseje que um mesmo objeto desenhe 2 sprites...Fique sabendo que no caso segue a ordem de desenho...
Ou seja, o 1° sprite a ser desenhado, ficará embaixo do 2° e assim em diante.

Veja exemplo:

Código:

draw_sprite(50, 50, spr_1); //Esse ficará embaixo de todos os sprites seguintes
draw_sprite(50, 50, spr_2); //Esse ficará em cima do spr_1 e embaixo do spr_3
draw_sprite(50, 50, spr_3); //Esse ficará por cima de todos os anteriores

Caso não der certo desse jeito também, fora os já apresentados, não existe outro modo!
DieBoy
DieBoy

Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios : depth in draw 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

depth in draw Empty Re: depth in draw

Mensagem por Isaque Onix Qui 04 Set 2014, 15:36

pois e, Na verdade, estou usando os codigos aqui como exemplos, nao sao os codigos reais do meu game... e as arrais sao desenhadas em sequencia e ja utilizam o loop FOR... mais como disse, dependendo do sprite que e desenhado ele deve ficar por cima, e dependendo, por baixo...
mais pode deixar... vou estudar um outro modo...

e eu sei que os codigos sao 3D, por isso o d3d_start() e o d3d_end()... mais foi um teste devido um encontrado em uma de minhas pesquisas...
agradeço a vocês por tentarem!
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : depth in draw 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
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por Igor KinGamer Qui 04 Set 2014, 23:45

Inevitavelmente, os draws precisam ser chamados na ordem certa. Você pode tentar usar uma priority queue pra isso. Nunca usei uma no GM (pra ser sincero, nem em nenhum outro lugar), mas parece ser ideal (digamos assim...) para o seu caso.

Basicamente, você coloca cada informação na fila usando a prioridade para definir quem deve ser desenhado primeiro. Então, num laço, vai desenhando em ordem conforme a prioridade (como, pelo que vi, o único jeito de pegar um valor da fila é pegar o de maior ou menor prioridade, você teria que fazer uma cópia da fila e ir retirando dessa cópia, enquanto ela não estivesse vazia, o valor de maior (menor) prioridade e desenhando).

Os valores na fila seriam os de primeiro índice da array (arr[x,y]), usando como prioridade o depth (no seu exemplo, o valor guardado em arr[x,4]). Quando quisesse alterar o depth para um sprite, há uma função para alterar a prioridade associada a um valor. Para desenhar os sprites em ordem, seria necessário, como falei ali em cima, um laço tirando os valores em ordem de uma cópia da fila, usando então esses valores pra desenhar. Algo assim:
Código:
var cop, i;
cop = ds_priority_create(); //*
ds_priority_copy(cop, fila_original); // Faz uma cópia da fila, para não destruir a original
while (ds_priority_size(cop) > 0)
{
    i = ds_priority_delete_max(cop); // Pega o valor de índice com maior prioridade (depth) na fila
    draw_sprite(arr[i,0],arr[i,1],arr[i,2],arr[i,3]);
}
ds_priority_destroy(cop); // Pra não ficar ocupando a memória *

// * Na verdade, não é necessário ficar criando e destruindo a fila "cop".
// Como isso é feito várias vezes (o tempo todo), dá pra criar uma fila só
// e usar sempre a mesma.

E é isso, acho que dá pra fazer assim. Se não ficou muito claro o que eu quis dizer, eu tento explicar melhor. Talvez haja outro jeito mais simples, mas, se não houver...
Igor KinGamer
Igor KinGamer

Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios : depth in draw 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

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por Isaque Onix Sex 05 Set 2014, 00:03

boom, obrigado por responder, mais eu li, reli, mais ainda nao intendi tudo...

1: como defino a prioridade de cada sprite
2: essa variavel fila_original vem de onde? e oque coloco nela? (deduzi que fosse a arr[0,4], mais aqui nao rolou...
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : depth in draw 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
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por PedroX Sex 05 Set 2014, 00:07

Você deve criar uma ds_priority salvando o id na variável fila_original. A prioridade é definida adicionando o valor desejado (que seria o depth).

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : depth in draw Empty

Medalhas x 0 Tutoriais x 17 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://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por Isaque Onix Sex 05 Set 2014, 00:13

huum acho que intendi... vou testar aqui, e, logo respondo...
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : depth in draw 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
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por Igor KinGamer Sex 05 Set 2014, 00:18

1) Na verdade, a prioridade estaria associada ao índice da array. Por exemplo, arr[0,0], ..., arr[0, 3] são as informações de um sprite. Então o 0 seria colocado na fila com a prioridade igual ao que seria o depth desse sprite (digamos, 10). arr[1,0], ... arr[1, 3] são as informações de outro sprite. Então, o 1 iria para a fila com o depth correspondente como prioridade (digamos, 9).

Logo, com esses dois sprites, você teria dois valores na fila (cada um representando o primeiro índice da array para acessar os dados do sprite): 0, com prioridade 10, e 1, com prioridade 9.

2) fila_original seria a fila onde estão guardados os valores com suas prioridades. Ou seja, (como o PedroX falou) uma fila já criada. Quando você fosse alterar o depth de um sprite, na verdade, você alteraria a prioridade do valor de índice da array referente ao sprite nessa fila.

Se estivesse lá o valor 4 com prioridade 0 (lembre-se que o 4 seria usado então em arr[4, ...) e você quisesse mandar mais pra trás (desenhado primeiro), com prioridade 20, você faria ds_priority_change_priority(fila_original, 4, 20).

Seria bom você ler a parte de DS Priority Queues no help do GM para ver as funções e saber como usar. Tenho que ir dormir, então depois, qualquer coisa, tento responder.
Igor KinGamer
Igor KinGamer

Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios : depth in draw 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

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

Mensagem por Isaque Onix Sex 05 Set 2014, 00:25

okok, fiz diversas tentativas desde que criei esse topico, mais uma nao faria mal... valeu ai! logo comento novamente...
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : depth in draw 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
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

depth in draw Empty Re: depth in draw

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