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
Parede isométrica transparência (Resolvido)
5 participantes
Página 1 de 2
Página 1 de 2 • 1, 2
Parede isométrica transparência (Resolvido)
Como eu poderia deixar uma parede isométrica transparente quando o player passar por trás dela?
Obrigado pela ajuda.
Obrigado pela ajuda.
Última edição por generalzero em Qua 28 maio 2014, 22:26, editado 2 vez(es)
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
mude a image_alpha do objeto isometrico qndo o jogador passar por ela
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
E como eu sei que o player passou pelo objeto?
E como muda o alpha da imagem pelo código?
E como muda o alpha da imagem pelo código?
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
- Código:
if place_meeting(x,y,obj_player) then image_alpha=0.4 else image_alpha=1
é só por isso no step da parede amigo
MissingNo- Games Ranking :
Notas recebidas : C
Data de inscrição : 03/06/2013
Reputação : 22
Número de Mensagens : 134
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- RPG Maker
Re: Parede isométrica transparência (Resolvido)
O place_meeting checa se o objeto está colidindo com o outro objeto (definido na função), nas posições x e y, que neste caso é toda a mascara de colisão do objeto (a imagem do objeto). image_alpha é a opacidade da imagem que vai de 0 a 1.
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
A pergunta que fica é:
Como é um objeto isométrico, a máscara de colisão está só na base da parede.
Testei agora e não deu certo.
Será que é porque o place_meeting testa a colisão pela máscara?
Como é um objeto isométrico, a máscara de colisão está só na base da parede.
Testei agora e não deu certo.
Será que é porque o place_meeting testa a colisão pela máscara?
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
Sim, mas você pode deixar a máscara de colisão com o formato da parede se isso não for atrapalhar suas colisões!
Gabreel- Data de inscrição : 02/10/2009
Reputação : 52
Número de Mensagens : 2232
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Javascript
- Outros
Re: Parede isométrica transparência (Resolvido)
Se eu botar a máscara de colisão em todo o objeto então não seria mais um objeto isométrico, não?
Parede:
Máscara da parede:
Parede:
Máscara da parede:
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
Não é a forma mais técnica, mas se você comparar a posição x e y do personagem com a da parede em um evento do tipo Step, pode deduzir se ele está atrás dela ou não.
Desse modo não importa o tipo de máscara ou colisão, já que será apenas uma leitura de coordenadas.
Desse modo não importa o tipo de máscara ou colisão, já que será apenas uma leitura de coordenadas.
Convidado- Convidado
Re: Parede isométrica transparência (Resolvido)
vc pode por um obj com a mascara da parede mna posição da parede.
vc cria um obj_mascara no create e vinvula este obj criado a pare e neste obj_mascara vc põe o código de place_meeting e muda o image_alpha do obj que criou o obj_mascara. é um caminho.
vc cria um obj_mascara no create e vinvula este obj criado a pare e neste obj_mascara vc põe o código de place_meeting e muda o image_alpha do obj que criou o obj_mascara. é um caminho.
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
O código executa de acordo com o que está definido até aquela linha.
Você pode mudar a mascara em um linha e voltar para a normal depois, por exemplo:
Você pode mudar a mascara em um linha e voltar para a normal depois, por exemplo:
- Código:
var temp_mask;
temp_mask = mask_index;
mask_index = -1; // remover mascara e usar a sprite do objeto para colisão
if place_meeting....
mask_index = temp_mask;
Re: Parede isométrica transparência (Resolvido)
Não deu muito certo.
Os códigos da parede estão assim:
CREATE:
depth=-x-y
var temp_mask;
temp_mask = mask_index;
mask_index = -1;
if place_meeting(x,y,obj_player) then image_alpha=0.4 else image_alpha=1;
mask_index = temp_mask;
Bom, as imagens acima são as imagens que eu uso para a parede e para a máscara.
Isso é o que eu gostaria de fazer:
Os códigos da parede estão assim:
CREATE:
depth=-x-y
var temp_mask;
temp_mask = mask_index;
mask_index = -1;
if place_meeting(x,y,obj_player) then image_alpha=0.4 else image_alpha=1;
mask_index = temp_mask;
Bom, as imagens acima são as imagens que eu uso para a parede e para a máscara.
Isso é o que eu gostaria de fazer:
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
Galera, tive avanços.
Após consultas alterei algumas linhas.
1) Alterei a máscara do sprite da parede para assumir como sendo toda a parede.
2) Ao invés de colocar o código no objeto da parede, eu coloquei o código dentro do sprite do player, ficando assim:
Não checo colisão porque eu verifico isso no place_meeting.
E o resultado foi este:
Muito próximo do que eu queria.
Como podem ver, a bolinha azul simboliza o player, que ao passar por traz da parede, ela ganha transparência.
Mas, ainda tenho algumas ressalvas:
1) Como é um objeto isométrico, a colisão dele teria que se dar apenas na área vermelha ilustrada na base do sprite. Os outros pontos de colisão teoricamente não existem pois ele não está colidindo com a parede, mas passando por ela. De repente será que não tem como colocar duas máscaras no mesmo objeto? Dai tem uma máscara de colisão e outra apenas para verificar se o player está atrás da parede. O correto é que o game veja isso:
2) Eu consegui colocar alpha em todos os sprites que tem wall. Funciona em partes, mas eu gostaria que fosse apenas na parede que o player está.
3) Como deu alpha em todo algumas paredes ficaram "acavaladas". Existe algum ajuste fino para que eu possa colocar uma parede do lado da outra sem que elas fiquem sobrepostas?
Após consultas alterei algumas linhas.
1) Alterei a máscara do sprite da parede para assumir como sendo toda a parede.
2) Ao invés de colocar o código no objeto da parede, eu coloquei o código dentro do sprite do player, ficando assim:
- Código:
if keyboard_check(vk_right) {x+=8}
if keyboard_check(vk_left) {x-=8}
if keyboard_check(vk_down) {y+=8}
if keyboard_check(vk_up) {y-=8}
var temp_mask;
temp_mask = mask_index;
mask_index = -1;
if place_meeting(x,y,obj_wall) then obj_wall.image_alpha=0.4 else obj_wall.image_alpha=1;
mask_index = temp_mask;
Não checo colisão porque eu verifico isso no place_meeting.
E o resultado foi este:
Muito próximo do que eu queria.
Como podem ver, a bolinha azul simboliza o player, que ao passar por traz da parede, ela ganha transparência.
Mas, ainda tenho algumas ressalvas:
1) Como é um objeto isométrico, a colisão dele teria que se dar apenas na área vermelha ilustrada na base do sprite. Os outros pontos de colisão teoricamente não existem pois ele não está colidindo com a parede, mas passando por ela. De repente será que não tem como colocar duas máscaras no mesmo objeto? Dai tem uma máscara de colisão e outra apenas para verificar se o player está atrás da parede. O correto é que o game veja isso:
2) Eu consegui colocar alpha em todos os sprites que tem wall. Funciona em partes, mas eu gostaria que fosse apenas na parede que o player está.
3) Como deu alpha em todo algumas paredes ficaram "acavaladas". Existe algum ajuste fino para que eu possa colocar uma parede do lado da outra sem que elas fiquem sobrepostas?
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
Quanto à 2° e 3° questões:
- Para afetar apenas a instância da parede em que o personagem está, aplique o código de transparência para o id específico desta instância. Pesquise sobre id no help do programa;
- Quando você aplica alpha em 2 ou mais objetos sobrepostos é normal que a sobreposição contenha uma opacidade maior, afinal são 2 camadas que estão ali. Você pode contornar isso usando paredes intermediárias semelhantes à isto:
- Para afetar apenas a instância da parede em que o personagem está, aplique o código de transparência para o id específico desta instância. Pesquise sobre id no help do programa;
- Quando você aplica alpha em 2 ou mais objetos sobrepostos é normal que a sobreposição contenha uma opacidade maior, afinal são 2 camadas que estão ali. Você pode contornar isso usando paredes intermediárias semelhantes à isto:
Convidado- Convidado
Re: Parede isométrica transparência (Resolvido)
Como já disse, mude a mascara no momento antes de testar a colisão e você pode usar milhares de máscaras diferentes até no mesmo script.
Tem algum outro motivo para não ter funcionado.
Tente também mask_index = sprite_index.
Tem algum outro motivo para não ter funcionado.
Tente também mask_index = sprite_index.
Re: Parede isométrica transparência (Resolvido)
E ai galera, como estão?
Bom, depois das dicas valiosas tive muitos avanços.
Obrigado a todos!
Em resumo:
1) Apesar da experiência de sumir com todas as paredes ser bem interessante eu acabei descobrindo o que estava fazendo de errado. Me desculpem, é que sou muito iniciante no game maker, mas eu tinha colocado o código do alpha no create do obj, e no no step. Ajustando isso o efeito foi bem o que eu procurava:
2) Como podem observar, depois da dica do @scratchware_dev e alguns ajustes finos, consegui deixar o efeito o alpha bem mais bonito, sem as sobreposições de imagens. Usei como obj_wall padrão a imagem da parede recortada e criei um obj_wall_canto para fazer o acabamento, e ficou bem legal.
3) Em relação ao mapeamento da imagem, me desculpem, mas não consegui fazer entrar na minha cabeça as explicações acima. Atualmente a máscara dos objetos está como todo o sprite. Isso funciona para fazer o efeito de transparência. Mas como eu faria para ele se comportar como na imagem abaixo e manter o place_meeting da transparência?
Bom, depois das dicas valiosas tive muitos avanços.
Obrigado a todos!
Em resumo:
1) Apesar da experiência de sumir com todas as paredes ser bem interessante eu acabei descobrindo o que estava fazendo de errado. Me desculpem, é que sou muito iniciante no game maker, mas eu tinha colocado o código do alpha no create do obj, e no no step. Ajustando isso o efeito foi bem o que eu procurava:
2) Como podem observar, depois da dica do @scratchware_dev e alguns ajustes finos, consegui deixar o efeito o alpha bem mais bonito, sem as sobreposições de imagens. Usei como obj_wall padrão a imagem da parede recortada e criei um obj_wall_canto para fazer o acabamento, e ficou bem legal.
3) Em relação ao mapeamento da imagem, me desculpem, mas não consegui fazer entrar na minha cabeça as explicações acima. Atualmente a máscara dos objetos está como todo o sprite. Isso funciona para fazer o efeito de transparência. Mas como eu faria para ele se comportar como na imagem abaixo e manter o place_meeting da transparência?
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
General, como o Kabeção lhe disse no outro post, você pode trabalhar a máscara do objeto independentemente para cada ação que for executar.
Não importa que na linha anterior do seu código a máscara atribuída ao objeto parede era a própria sprite, você pode simplesmente fazer isto:
Compreende o conceito? Você pode alterar uma definição do objeto SOMENTE para a ação seguinte e então RETORNAR ela pra condição original na linha posterior.
Não importa que na linha anterior do seu código a máscara atribuída ao objeto parede era a própria sprite, você pode simplesmente fazer isto:
- Código:
mask_index = máscara de checagem de transparência;
< ações de checagem de transparência aqui >
mask_index = máscara de colisão;
< ações de colisão aqui >
Compreende o conceito? Você pode alterar uma definição do objeto SOMENTE para a ação seguinte e então RETORNAR ela pra condição original na linha posterior.
Convidado- Convidado
Re: Parede isométrica transparência (Resolvido)
Pessoal, após a grande ajuda de vocês todos consegui chegar o ponto que desejava.
Ficou muito legal.
Então apenas para deixar registrado aqui para quem mais tiver dúvidas o procedimento que eu fiz foi o seguinte.
1) Criei um sprite vazado chamado spr_wall com as seguintes configurações:
- Precise collision checking
- Separate collision masks
[Modify Mask:]
- Bounding box: Automatic
- Shape: Precise
[Sprite]
2) Criei um sprite com o canto da parede chamado spr_wall_canto com as mesmas configurações, mudando apenas a imagem do sprite:
- Precise collision checking
- Separate collision masks
[Modify Mask:]
- Bounding box: Automatic
- Shape: Precise
[Sprite]
3) Criei um sprite chamado msk_wall com as seguintes configurações:
- Precise collision checking
[Modify Mask:]
- Bounding box: Automatic
- Shape: Precise
[Sprite]
4) Criei um objeto chamado obj_wall com as seguintes configurações:
- Solid
- Sprite: spr_wall
- Mask: msk_wall
[Create]
[Step]
5) Criei um objeto chamado obj_wall_canto com as seguintes configurações:
- Solid
- Sprite: spr_wall_canto
- Mask: msk_wall
[Create]
[Step]
6) Criei um objeto chamado obj_player com as seguintes configurações:
- Sprite: spr_player
- Mask: same as sprite
[Step]
Agora só criar a room e adicionar os elementos. Tudo funcionando.
Então pra finalizar, ficou só duas perguntas:
1) Existe algum ajuste fino para colocar elementos na room? Achei aquele grid do game maker um tanto quanto grande. Ele me obrigou a cortar uma boa parte da imagem pra poder montar a parede. Se fosse menor, tipo, pixel por pixel, seria melhor.
2) Como eu trabalho com HTML, CSS e Javascript, no front-end da pra setar classes e IDs para os elementos. Eu posso dizer que eu quero UM elemento com o ID x e posso também pegar todos os elementos que possuem a classe y. Tem como fazer isso no game maker? Pergunto isso porque no efeito de alpha da parede ele da um place_meeting passando o nome do player. Imagina se eu tiver 200 players, vai ser uma confusão. Então se eu disser pra ele que todos os elementos que possuírem tal classe ele deve executar esta função.
É possível?
Abraços!
Ficou muito legal.
Então apenas para deixar registrado aqui para quem mais tiver dúvidas o procedimento que eu fiz foi o seguinte.
1) Criei um sprite vazado chamado spr_wall com as seguintes configurações:
- Precise collision checking
- Separate collision masks
[Modify Mask:]
- Bounding box: Automatic
- Shape: Precise
[Sprite]
2) Criei um sprite com o canto da parede chamado spr_wall_canto com as mesmas configurações, mudando apenas a imagem do sprite:
- Precise collision checking
- Separate collision masks
[Modify Mask:]
- Bounding box: Automatic
- Shape: Precise
[Sprite]
3) Criei um sprite chamado msk_wall com as seguintes configurações:
- Precise collision checking
[Modify Mask:]
- Bounding box: Automatic
- Shape: Precise
[Sprite]
4) Criei um objeto chamado obj_wall com as seguintes configurações:
- Solid
- Sprite: spr_wall
- Mask: msk_wall
[Create]
- Código:
depth=-x-y
[Step]
- Código:
var temp_mask;
temp_mask = mask_index;
mask_index = -1;
if place_meeting(x,y,obj_player) then image_alpha=0.4 else image_alpha=1;
mask_index = temp_mask;
5) Criei um objeto chamado obj_wall_canto com as seguintes configurações:
- Solid
- Sprite: spr_wall_canto
- Mask: msk_wall
[Create]
- Código:
depth=-x-y
[Step]
- Código:
var temp_mask;
temp_mask = mask_index;
mask_index = -1;
if place_meeting(x,y,obj_player) then image_alpha=0.4 else image_alpha=1;
mask_index = temp_mask;
6) Criei um objeto chamado obj_player com as seguintes configurações:
- Sprite: spr_player
- Mask: same as sprite
[Step]
- Código:
if keyboard_check(vk_right) && place_free(x+8,y) {x+=8}
if keyboard_check(vk_left) && place_free(x-8,y) {x-=8}
if keyboard_check(vk_up) && place_free(x,y-8) {y-=8}
if keyboard_check(vk_down) && place_free(x,y+8) {y+=8}
Agora só criar a room e adicionar os elementos. Tudo funcionando.
Então pra finalizar, ficou só duas perguntas:
1) Existe algum ajuste fino para colocar elementos na room? Achei aquele grid do game maker um tanto quanto grande. Ele me obrigou a cortar uma boa parte da imagem pra poder montar a parede. Se fosse menor, tipo, pixel por pixel, seria melhor.
2) Como eu trabalho com HTML, CSS e Javascript, no front-end da pra setar classes e IDs para os elementos. Eu posso dizer que eu quero UM elemento com o ID x e posso também pegar todos os elementos que possuem a classe y. Tem como fazer isso no game maker? Pergunto isso porque no efeito de alpha da parede ele da um place_meeting passando o nome do player. Imagina se eu tiver 200 players, vai ser uma confusão. Então se eu disser pra ele que todos os elementos que possuírem tal classe ele deve executar esta função.
É possível?
Abraços!
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Parede isométrica transparência (Resolvido)
1) Você pode ajustar o "tamanho" do grid. Há dois campos com o valor pros espaçamentos em x e y no editor de rooms (na parte superior).
2) Pesquise sobre objetos "parent" no Game Maker.
2) Pesquise sobre objetos "parent" no Game Maker.
Convidado- Convidado
Re: Parede isométrica transparência (Resolvido)
Obrigado galera por tudo.
Como eu faço pra dar como resolvido este tópico?
Como eu faço pra dar como resolvido este tópico?
generalzero- Data de inscrição : 24/05/2014
Reputação : 1
Número de Mensagens : 9
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Página 1 de 2 • 1, 2
Tópicos semelhantes
» [Resolvido] Bater na parede e voltar
» (Resolvido) game de tiro com visão isométrica?
» [Resolvido]Problema com parede
» [Resolvido]pulo de parede
» [resolvido]ajundo com parede do mal é rampa
» (Resolvido) game de tiro com visão isométrica?
» [Resolvido]Problema com parede
» [Resolvido]pulo de parede
» [resolvido]ajundo com parede do mal é rampa
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos