Entrar
Últimos assuntos
» player não consegue andarpor 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
Página 1 de 1
depth in draw
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:
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!!!
Re: depth in draw
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:
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- Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: depth in draw
isso eu sei meu amigo, nao sou um iniciante.
oque eu quero, e variar o depth no draw do mesmo objeto, intende...
oque eu quero, e variar o depth no draw do mesmo objeto, intende...
Re: depth in draw
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.
Re: depth in draw
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:
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- Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: depth in draw
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
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- Games Ranking :
Notas recebidas : A - B
Data de inscrição : 04/02/2009
Reputação : 120
Número de Mensagens : 1363
Prêmios :
x 0 x 9 x 0
x 0 x 1 x 0
x 0 x 0 x 1
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 2.0
- C#
Re: depth in draw
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:
@offtopic Sain no ingles fluente... uau ksks
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()
Re: depth in draw
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...
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- Games Ranking :
Notas recebidas : A - B
Data de inscrição : 04/02/2009
Reputação : 120
Número de Mensagens : 1363
Prêmios :
x 0 x 9 x 0
x 0 x 1 x 0
x 0 x 0 x 1
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 2.0
- C#
Re: depth in draw
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:
Caso não der certo desse jeito também, fora os já apresentados, não existe outro modo!
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- Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: depth in draw
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!
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!
Re: depth in draw
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:
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...
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- Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: depth in draw
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...
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...
Re: depth in draw
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:
Re: depth in draw
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.
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- Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: depth in draw
okok, fiz diversas tentativas desde que criei esse topico, mais uma nao faria mal... valeu ai! logo comento novamente...
Tópicos semelhantes
» [Resolvido] Depth em Draw
» como usar depth em uma draw
» [Resolvido]Depth funciona em Draw?
» [Resolvido]draw primitive e draw vertex...como usar?
» O que é Depth
» como usar depth em uma draw
» [Resolvido]Depth funciona em Draw?
» [Resolvido]draw primitive e draw vertex...como usar?
» O que é Depth
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos