Conectar-se
Quem está conectado
16 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 16 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

[Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 20:05
Boa noite pessoa. Meu problema é o seguinte:

Tenho um objeto que desenha o sprite do meu jogador usando a função with. O problema  é que preciso desenhar a "sombra" que fica em cima dele, depois vem o comando de iluminação e depois desenho o sprite dele. Mas, preciso que esse último desenho fique em baixo do primeiro (não é uma opção inverter a ordem das funções por causa da iluminação).

Resumindo:

with (jogador)
{
  draw sombra
}

repeat (x)
{
  *função de iluminação*
}

with (jogador)
{
  draw sprite
}

Como faço pro sprite ser desenhado em baixo da sombra?


Última edição por matheusco em Sex 31 Out 2014, 11:52, editado 1 vez(es)
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 09/05/2013
Número de Mensagens : 822
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 105
Ver perfil do usuário

Re: [Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 20:10
Tente assim:

Código:
with (jogador)
{
draw sprite
depth=1 // quanto maior, mais baixo.
}
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 20:25
@WellingtonBecker escreveu:Tente assim:

Código:
with (jogador)
{
draw sprite
depth=1 // quanto maior, mais baixo.
}

Não deu. Aproveitei e tentei mudando a depth do próprio objeto que chama a função with, não rolou também.
avatar
Ranking : Nota B
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Número de Mensagens : 1013
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 79

Prêmios
   : 2
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 20:39
Reputação da mensagem: 100% (1 votos)
Desenhar um no Draw e outro no Draw End (que acontece depois, logo vem por cima)?
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 20:46
@Gonçalves escreveu:Desenhar um no Draw e outro no Draw End (que acontece depois, logo vem por cima)?

O que eu queria deu certíssimo, muito obrigado. Mas aconteceu alguns bugs. Os objetos que não se desenham ficaram transparentes, o que era luz virou gerador de trevas durante o dia (lol) e a luz não funciona durante a noite, haha. Mas já é alguma coisa, vou ver se consigo resolver isso e qualquer coisa volto pra pedir ajuda. Obrigado.
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 22:42
@Gonçalves escreveu:Desenhar um no Draw e outro no Draw End (que acontece depois, logo vem por cima)?

Então, fiz tudo certinho aqui e funcionou Very Happy Maaaas, tem algumas coisas que não entendi bem por quê acontecem.

Meu objeto que desenha tem depth 0, e como me disse lá na GMC, não importa a depth, o Draw End Event vem por cima, a menos que dois objetos usem Draw End.

Mas no meu caso, se eu tenho um objeto com depth menor que 0, ele escurece mais devagar (na mesma velocidade que os sprites desenhados pelo objeto) do que os objetos que tem depth maior (que estão acima da surface). Porém, a função que uso para escurecer a tela é essa:

draw_clear_alpha(day_color, day_alpha)

Sendo day_color basicamente preto e day alpha eu controlo pra aumentar ou diminuir a escuridão, e isso tá no Draw End Event. O mesmo acontece com o background. Se eu uso colocando lá nas opções da room, ele escurece mais rápido que os sprites desenhados pelo objeto; se coloco o objeto pra desenhar o background, ele passa a escurecer na mesma velocidade.

Draw Event:

surface_set_target(surface_light)

draw_background(back_01, view_wview[0]/2, view_hview[0]/2)

with (obj_shadowcaster_short)
{
draw_sprite_ext(sprite_index, image_index, (x - other.shadow_distance) - view_xview[0] + other.shadow_displacement, (y - other.shadow_distance) - view_yview[0], image_xscale, image_xscale, image_angle, c_black, other.shadow_alpha);
draw_sprite_ext(sprite_index, image_index, x - view_xview[0], y - view_yview[0], image_xscale, image_yscale, image_angle, -1, 1);
}

with (obj_player)
{
draw_sprite_ext(sprite_index, image_index, (x - other.shadow_distance) - view_xview[0] + other.shadow_displacement, (y - other.shadow_distance) - view_yview[0], image_xscale, image_xscale, image_angle, c_black, other.shadow_alpha);
draw_sprite_ext(sprite_index, image_index, x - view_xview[0], y - view_yview[0], image_xscale, image_yscale, image_angle, -1, 1);
}

with (obj_shadowcaster_tall)
{
draw_sprite_ext(sprite_index, image_index, (x - other.shadow_distance)- view_xview[0] + other.shadow_displacement, (y - other.shadow_distance) - view_yview[0], image_xscale, image_xscale, image_angle, c_black, other.shadow_alpha);
draw_sprite_ext(sprite_index, image_index, x - view_xview[0], y - view_yview[0], image_xscale, image_yscale, image_angle, other.color_tall_objects, 1);
}

surface_reset_target()

// Fool Proof

if surface_exists(surface_light)
{
draw_surface(surface_light,view_xview[0],view_yview[0])
}
else
{
surface_light = surface_create(view_wview[0],view_hview[0])
}

Draw End Event:

surface_set_target(surface_light)

draw_clear_alpha(day_color, day_alpha)

with (obj_lighter)
{
var i = center;
draw_set_alpha(bright)
repeat (circles)
{
draw_circle(x-view_xview[0], y-view_yview[0], i, false)
i += loop_factor
}
}

draw_set_alpha(1)
surface_reset_target()

// Fool Proof

if surface_exists(surface_light)
{
draw_surface(surface_light,view_xview[0],view_yview[0])
}
else
{
surface_light = surface_create(view_wview[0],view_hview[0])
}

Tem ideia do que tá acontecendo? Se ficou muito confuso eu posta um print.
avatar
Ranking : Nota B
Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Número de Mensagens : 1013
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 79

Prêmios
   : 2
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 22:46
Posta um print aí. XD
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Ter 28 Out 2014, 22:56


A parte que mostra o chão mais claro (sem ser no círculo, aquilo é a luz), está sendo desenhada pelo objeto que tem todos Draw, assim como os objetos azuis e metade dos amarelos (que são os mesmo objetos, com profundidades diferentes).

O que está dentro da profundida da surface ou acima, fica do jeito que eu quero. O que está abaixo fica escuro mais rápido. Só que meu código de escurecer está no Draw End Event, então não sei o que tá acontecendo.
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Qui 30 Out 2014, 20:15
Se alguém souber qual o problema, ainda não consegui resolver.
avatar
Data de inscrição : 27/02/2014
Número de Mensagens : 14
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3
Ver perfil do usuário

Re: [Resolvido] Profundidade do Desenho

em Sex 31 Out 2014, 00:21

Eu sugeriria que você usasse uma surface, mas como você já está fazendo isso, tente usar duas. Desenhe tudo na primeira, desenhe o sprite que fica por baixo na segunda e desenhe a primeira por cima da segunda.

Na verdade, essa é uma alternativa que cabe muito mais como um "remendo" do que como solução, pois tem um erro no seu código que vai gerar bugs estranhos. É esse:

Draw Event:

surface_set_target(surface_light)

Você não deve usar uma função de troca de surface dentro do evento Draw. Isso está detalhado no help. É possível que muitos dos bugs estejam vindo daí.

Boa sorte.
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Sex 31 Out 2014, 00:36
@Pai véi escreveu:
Eu sugeriria que você usasse uma surface, mas como você já está fazendo isso, tente usar duas. Desenhe tudo na primeira, desenhe o sprite que fica por baixo na segunda e desenhe a primeira por cima da segunda.

Na verdade, essa é uma alternativa que cabe muito mais como um "remendo" do que como solução. Além disso, tem um erro no seu código que vai gerar bugs estranhos. É esse:

Draw Event:

surface_set_target(surface_light)

Você não deve usar uma função de troca de surface no evento Draw. Isso está detalhado no help. É possível que muitos dos bugs estejam vindo daí.

Boa sorte.

Os withs é porque as instâncias têm alguns valores randômicos (escala e rotação), portanto preciso do with.

Quanto ao surface set target, onde devo colocar? No Draw Begin?

EDIT: Tem certeza sobre não poder usar no Draw Event? Li o help http://docs.yoyogames.com/source/dadiospice/002_reference/surfaces/surface_set_target.html e não tem nada sobre isso.
avatar
Data de inscrição : 27/02/2014
Número de Mensagens : 14
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3
Ver perfil do usuário

Re: [Resolvido] Profundidade do Desenho

em Sex 31 Out 2014, 00:40

@matheusco escreveu:Quanto ao surface set target, onde devo colocar? No Draw Begin?

Não. Ele não deve entrar em nenhum evento Draw. A diferença entre Draw Begin, Draw e Draw End é só a ordem.

Some care must be taken when using these functions. In particular please notice the following:

You should never change the drawing target while you are actually drawing on the screen, that is, never use it in drawing events. This will cause serious problems with the projection and viewport.
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Sex 31 Out 2014, 00:46
@Pai véi escreveu:
@matheusco escreveu:Quanto ao surface set target, onde devo colocar? No Draw Begin?

Não. Ele não deve entrar em nenhum evento Draw. A diferença entre Draw Begin, Draw e Draw End é só a ordem.

Some care must be taken when using these functions. In particular please notice the following:

You should never change the drawing target while you are actually drawing on the screen, that is, never use it in drawing events. This will cause serious problems with the projection and viewport.

De onde é isso? Não tem no link que mandei. Onde coloco então? Porque no final do código tenho que resetar o target.
avatar
Data de inscrição : 27/02/2014
Número de Mensagens : 14
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3
Ver perfil do usuário

Re: [Resolvido] Profundidade do Desenho

em Sex 31 Out 2014, 00:56

@matheusco escreveu:De onde é isso? Não tem no link que mandei. Onde coloco então? Porque no final do código tenho que resetar o target.

Isso é do manual do Game Maker 8, mas essa função existe desde o Game Maker 6, portanto, está tanto no manual antigo quanto no manual novo. Você deve colocar essa função fora do evento Draw, não importando qual evento seja.

Talvez, se você transferir todo esse código do evento Draw para o evento End Step, dê certo (pelo que eu pude ver, aparentemente você só usou o código pra desenhar dentro da surface).

Mas, quando você quiser desenhar a surface, obviamente você deve fazer isso no evento Draw.

Grande abraço.
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Sex 31 Out 2014, 01:09
@Pai véi escreveu:
@matheusco escreveu:De onde é isso? Não tem no link que mandei. Onde coloco então? Porque no final do código tenho que resetar o target.

Isso é do manual do Game Maker 8, mas essa função existe desde o Game Maker 6, portanto, está tanto no manual antigo quanto no manual novo. Você deve colocar essa função fora do evento Draw, não importando qual evento seja.

Talvez, se você transferir todo esse código do evento Draw para o evento End Step, dê certo (pelo que eu pude ver, aparentemente você só usou o código pra desenhar dentro da surface).

Mas, quando você quiser desenhar a surface, obviamente você deve fazer isso no evento Draw.

Grande abraço.

Hum, entendi agora. Beleze, vou ver se é isso que tá causando o problema, se não, volto aqui pra perguntar. Abraço.
avatar
Data de inscrição : 10/08/2014
Número de Mensagens : 395
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 51

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.tutoriaisgamemaker.com.br

Re: [Resolvido] Profundidade do Desenho

em Sex 31 Out 2014, 11:45
@Pai véi escreveu:
@matheusco escreveu:De onde é isso? Não tem no link que mandei. Onde coloco então? Porque no final do código tenho que resetar o target.

Isso é do manual do Game Maker 8, mas essa função existe desde o Game Maker 6, portanto, está tanto no manual antigo quanto no manual novo. Você deve colocar essa função fora do evento Draw, não importando qual evento seja.

Talvez, se você transferir todo esse código do evento Draw para o evento End Step, dê certo (pelo que eu pude ver, aparentemente você só usou o código pra desenhar dentro da surface).

Mas, quando você quiser desenhar a surface, obviamente você deve fazer isso no evento Draw.

Grande abraço.

Consegui resolver usando mais surfaces em diferentes objetos, pra controlar melhor onde vai ser desenhado o que. Mais simples do que ficar usando Draw End Event. Mas quanto ao evento que deve ser feito, perguntei no fórum GMC e essa especificação, de não desenhar no Draw era válida só pras versões antes do GM:S.

Obrigado pela ajuda.
Conteúdo patrocinado

Re: [Resolvido] Profundidade do Desenho

Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum