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 Ontem à(s) 19:49

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Ontem à(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


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 : 1625
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 : 1625
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 : 1625
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 : 1625
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 : 1625
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 : 1625
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 : 1625
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