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

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 22/01/2013
Número de Mensagens : 72
Insígnias de JAM :

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

Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 14:51
Toda vez que eu quiser tornar um objeto solido eu vou ter que colocar collision para o objeto que eu quero que não atravesse?
Se eu tiver por exemplo 100 tipos de chão sólido diferente vou ter que colocar collision pra cada um?
Não teria um jeito mais prático?
Eu marquei os objetos como sólido e no step coloquei:

Código:
move_contact_solid(direction,12)
vspeed=0

mas não funcionou, o que eu faço?


Última edição por iSillum em Qua 30 Jan 2013, 12:27, editado 2 vez(es)
avatar
Ranking : Sem avaliações
Notas recebidas : B
Data de inscrição : 28/02/2012
Número de Mensagens : 1908
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 1
Ver perfil do usuáriohttp://guitarmester.no.comunidades.net/index.php?pagina=19362978

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 14:59
era para funcionar, tente com -1(Loucuras irão acontecer! mas tente).



você não precisa colocar collision para todas, existe uma função chamada 'Parent', coloque um chão como o principal, e nos outros, marque como parent esse.
Caso seu GM não esteja no modo normal, isto é, o advanced mode está desligado, essa função não aparecerá.

INFO(por min)> Parent é uma função que serve para um objeto herdar características e funções do outro, qualquer evento que vocÊ não tiver criado e o Objeto PAI tiver, ele irá copiar. ele tambem se comportará como o outro nas colisões usadas do outros(mas as suas própias).

PAI é o objeto que você marcou para ser o PARENT.
avatar
Data de inscrição : 22/01/2013
Número de Mensagens : 72
Insígnias de JAM :

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:02
theguitarmester eu coloquei assim no STEP, funcionou, mas eu queria saber mais sobre essa função (move_contact_solid) porem eu não achei nenhum tutorial sobre ela no fórum.

Código:
if move_contact_solid(270,12){
    vspeed=0
}

Quando eu já tiver criado outros tipois de chão eu vejo mais sobre esse
Código:
parent
avatar
Ranking : Nota B
Notas recebidas : B+B
Data de inscrição : 04/03/2012
Número de Mensagens : 1925
Insígnias de JAM :

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

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:05
Eu acredito que o problema pode esta na sprite ou no chão que você está colidindo,tem que ver se a opição na sprite chamada "precision collision check"
o ideal é desmarcar ela e colocar as propiedades de colisão em rectangle(são os mais tipicos problemas que ocorrem nas colisoes) se não for isso,examine se vc colocou corretamente as funçoes das instancias ok
avatar
Ranking : Nota C
Notas recebidas : D-D-D-C-C-B
Data de inscrição : 15/03/2012
Número de Mensagens : 564
Insígnias de JAM :

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

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:05
tem 2 modos para fazer isso, o primeiro é por os objetos como tile set assim vc poem na fase sobre a colisao que pod ser transparente ou vc pode por o parent, pra por o parent é facil
1- faça a colisao com um objeto esse vai ser a colisao principal
2- depois cada objeto que vc queira a colisão vc vai na caixa de escrita em baixo de nome oned ta escrito parent e selecione o objeto da colisao, vc vai fazer isso com todas os obvjeto que vc quer a colisao



se vc nao intendeu eu faço uma engine bem rapida ;)
avatar
Data de inscrição : 22/01/2013
Número de Mensagens : 72
Insígnias de JAM :

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:09
Não entendi RafaelCazarotto
avatar
Ranking : Nota C
Notas recebidas : D-D-D-C-C-B
Data de inscrição : 15/03/2012
Número de Mensagens : 564
Insígnias de JAM :

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

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:14
ok eu fasso uma engine bem rapida então jaja posto com o edit =]
avatar
Ranking : Sem avaliações
Notas recebidas : B
Data de inscrição : 28/02/2012
Número de Mensagens : 1908
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 1
Ver perfil do usuáriohttp://guitarmester.no.comunidades.net/index.php?pagina=19362978

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:15
a função move_contact é assim:

se você está colidindo(vou usar o exemplo do solid, com seus n° _solid(270,12)) com um sólido, você irá checar se até 12 pixeis na direção 270 não está colidindo, e, senão estiver, ir até a posição que não colide.
se usar -1, ele irá checar até onde não está colidindo naquela direção, e irá, podendo dar um salto Gigantesco(mas nunca ocorrerá o erro de ficar trancado dentro de um objeto sólido).


RafaelCazarotto, Cópia de Post é Pirataria.
avatar
Ranking : Nota C
Notas recebidas : D-D-D-C-C-B
Data de inscrição : 15/03/2012
Número de Mensagens : 564
Insígnias de JAM :

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

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:25
RafaelCazarotto, Cópia de Post é Pirataria
asuhaushauhsaus eu sei foi um grande engano, o mateus3332 é meu irmao e tava logado na conta dele depois eu vi e tentei cancelar o envio e postei na minha conta aushuahsuahsa ele ja editou o post dele, desculpa ai Very Happy
a engine ta quase pronta Smile

//EDIT
pronto ta aqui a engine

https://dl.dropbox.com/s/ahxrwu1v5e6wupe/engine%20colisao.gmk?dl=1

nao expliquei pq realmente nao precisa explicação hehehe e desculpe o engano de novo =]


Última edição por RafaelCazarotto em Sab 26 Jan 2013, 15:32, editado 1 vez(es)
avatar
Data de inscrição : 22/01/2013
Número de Mensagens : 72
Insígnias de JAM :

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:29
theguitarmester Vê se eu entendi, eu testei o move_contact_solid com números diferentes e eu percebi uma coisa:

Se eu coloco por exemplo move_contact_solid(270,12)

O objeto vai descer (por causa do 270) de 12 em 12 pixels até colidir com algo sólido?
É a diferença entre ele a gravidade e que essa função não tem aceleração?
avatar
Ranking : Sem avaliações
Notas recebidas : B
Data de inscrição : 28/02/2012
Número de Mensagens : 1908
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 1
Ver perfil do usuáriohttp://guitarmester.no.comunidades.net/index.php?pagina=19362978

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:44
Não, ele não irá descer de 12 em 12, e ele não tem haver com a gravidade.

ele irá descer no máximo 12 pixeis, se, só após de 12 pixeis ele se encontre livre de sólidos, mas ele descerá tudo de uma vez só, se ele se encontrar livre em 5 pixeis, ele moverá 5 pixeis, aquele n°12 é o limite para a deslocação .

mesmo que você coloque um numero altíssimo como 200, se ele achar se livre em 5 pixeis, ele irá mover 5 pixeis.
se você colocar -1, esse limite para a deslocação não irá existir.

entendeu, caso não, é só comentar, estamos aqui para aprender. Smile
avatar
Ranking : Nota B
Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Número de Mensagens : 2490
Insígnias de JAM :

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

Prêmios
   : 0
   : 2
   : 1
Ver perfil do usuáriohttp://xcreatorgames.weebly.com/

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:47
iSillum escreveu:Toda vez que eu quiser tornar um objeto solido eu vou ter que colocar collision para o objeto que eu quero que não atravesse?
Se eu tiver por exemplo 100 tipos de chão sólido diferente vou ter que colocar collision pra cada um?
Não teria um jeito mais prático?
Eu marquei os objetos como sólido e no step coloquei:

Código:
move_contact_solid(direction,12)
vspeed=0

mas não funcionou, o que eu faço?
Você não vai colocar isso no STEP sem uma condição. Este comando geralmente dentro de alguma condição ou Evento de COLISAO. Por exemplo, você pode usar para simular a gravidade:
Código:

if (place_free(x, y + 1))
{
    if (vspeed > 15) vspeed  = 15; // limita a forca da gravidade
    gravity_direction = 270; // para baixo
    gravity = 0.5; // forca da gravidade
} else
{
    move_contact_solid(270, 10);
    gravity = 0;
    vspeed = 0;
}
Esse exemplo pode ser colocado no Evento STEP, mas como voce pode observar existe uma Condição (comando IF) para usar o comando.
Quanto ao fato de criar isso para cada objeto, sim, se você nao usar o conceito de heranca. Supondo que todos os seus objetos CHAO se comportam de maneira semelhante, então eles podem HERDAR todos os códigos do "PAI" deles. Neste caso crie um objeto chamdo chao_pai e coloque o código acima no Evento STEP dele.
Depois nos outros objetos que você deseja que tenham comportamente semelhante ao "Pai" basta definir como disse o amigo acima a propriedade "Parent" colcando como "chao_pai" o seu parente. Pronto, assim você nao precisa mais definir o codigo em cada objeto que tenha o mesmo comportamento. Esse conceito de herança é muito poderoso no GM, tente aprender isso e podera criar qualquer tipo de coisa.
Flws!
avatar
Ranking : Nota C
Notas recebidas : D-D-D-C-C-B
Data de inscrição : 15/03/2012
Número de Mensagens : 564
Insígnias de JAM :

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

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 15:58
Eu fiz uma engine para ele e para fazer esse esquema de colisao bastou colocar o outro objeto como solid e paret como o obj da colisao principal
avatar
Data de inscrição : 22/01/2013
Número de Mensagens : 72
Insígnias de JAM :

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 16:05
Obrigado RafaelCazarotto pela engine, eu entendi esse tal de parent e vinians obrigado também, mas esse move_contact_solid ainda não está tal claro.

theguitarmester escreveu:Não, ele não irá descer de 12 em 12, e ele não tem haver com a gravidade.

ele irá descer no máximo 12 pixeis, se, só após de 12 pixeis ele se encontre livre de sólidos, mas ele descerá tudo de uma vez só, se ele se encontrar livre em 5 pixeis, ele moverá 5 pixeis, aquele n°12 é o limite para a deslocação .

mesmo que você coloque um numero altíssimo como 200, se ele achar se livre em 5 pixeis, ele irá mover 5 pixeis.
se você colocar -1, esse limite para a deslocação não irá existir.

entendeu, caso não, é só comentar, estamos aqui para aprender. Smile

Ele vai ver se abaixo do objeto (abaixo por causa do 270) tem 12 pixels livre, se tiver ele vai mover da posição em que ele esta 12 pixels para baixo de uma vez só (do 1 ao 12 e não 1,2,3,4..12), e vai continuar fazendo isso eternamente até se encontrar com um objeto sólido. <- Isso está certo?

Mas se ele verifica se tem 12 pixels livre para descer do 1 ao 12 porque ele também desse se tiver 5 pixels livres?
avatar
Ranking : Sem avaliações
Notas recebidas : B
Data de inscrição : 28/02/2012
Número de Mensagens : 1908
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 1
Ver perfil do usuáriohttp://guitarmester.no.comunidades.net/index.php?pagina=19362978

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 16:18
para talves MELHOR entendimento, vou marcar o que está certo e o que está errado.

Ele vai ver se abaixo do objeto (abaixo por causa do 270)
CERTO


tem 12 pixels livre, se tiver ele vai mover da posição em que ele esta 12 pixels para baixo de uma vez só (do 1 ao 12 e não 1,2,3,4..12)
CERTO, mas, se antes de chegar a 12 pixels, ele já se encontrar livre,(exemplo) em 4 pixeis, ele irá mover 4 pixeis.


, e vai continuar fazendo isso eternamente até se encontrar com um objeto sólido. <- Isso está certo?
ERRADO, ele vai fazer isso enquanto estiver colidindo com um sólido, e não quando não estiver.


Mas se ele verifica se tem 12 pixels livre para descer do 1 ao 12 porque ele também desse se tiver só 5 pixels livres?
12 é o numero maximo, antes do 12, ele verificará 1 pixel, 2 pixel, 3 pixel... até chegar no 12, e, se não achar no 12, ele irá para de verificar e o objeto ficará parado, para ele não para de verificar, coloque o n°-1, porque é um Comando extra, que mandará ele não para de executar até se encontrar livre.
avatar
Ranking : Nota B
Notas recebidas : B-C-A-C
Data de inscrição : 18/09/2008
Número de Mensagens : 2490
Insígnias de JAM :

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

Prêmios
   : 0
   : 2
   : 1
Ver perfil do usuáriohttp://xcreatorgames.weebly.com/

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 16:26
Explicação sobre o move_contact* (todos)
Quando o GM move os objetos usando vspeed e hspeed, a cada STEP ele soma este valores e testa a colisão, caso voce tenha definido. Então vamos supor que o seu vspeed esteja com o valor de 10 por STEP (a gravidade fe-lo chegar a isso), observe o desenho abaixo:

No próximo STEP ele vai somar mais 10 pixels no VSPEED o que o levaria a passar do Ponto de Contato veja:

Mas antes que isso ocorra, o GM intercepta essa ação atravez do Evento de Colisão e ele te entrega os valores de x e y ANTES de somar o 10. Por isso você usa o move_contact_solid(270, 15) para que ele o GM mova o objeto ATÉ o Ponto de Contato, fazendo com que fique assim:

Isso vale para move_contact() em qualquer direção. Espero que tenha entendido pois isso é muito importante para criar jogos de plataforma.

Flws!
avatar
Data de inscrição : 22/01/2013
Número de Mensagens : 72
Insígnias de JAM :

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 16:36
Mas antes que isso ocorra, o GM intercepta essa ação atravez do Evento de Colisão e ele te entrega os valores de x e y ANTES de somar o 10.

Mas pra que o GM me retorna os valores de X e Y? Como ele me mostra esses valores? Porque eu iria querer saber esse valores?

Por isso você usa o move_contact_solid(270, 15) para que ele o GM mova o objeto ATÉ o Ponto de Contato, fazendo com que fique assim:

Então move_contact_solid é na verdade a forma escrita do evento Collision?


theguitarmester eu ia pedir pra você me dar o exemplo só que o vinians já tinha feito isso :|
avatar
Ranking : Sem avaliações
Notas recebidas : B
Data de inscrição : 28/02/2012
Número de Mensagens : 1908
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 1
Ver perfil do usuáriohttp://guitarmester.no.comunidades.net/index.php?pagina=19362978

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 16:43
Então move_contact_solid é na verdade a forma escrita do evento Collision?
é só traduzir, "mova com um contanto", mover-se quando há uma colisão, no caso, uma colisão com um sólido.
o move_contact é algo que é bem útil usar nos collisions.

Mas pra que o GM me retorna os valores de X e Y?
ele irá aplicar os valores no objeto para que ele não esteja mais colidindo.



avatar
Data de inscrição : 22/01/2013
Número de Mensagens : 72
Insígnias de JAM :

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 16:46
Vocês dois disseram coisas diferentes, move_contact_solid serve pra não deixar o objeto atravessar, pra saber se está colidindo, pra quê?
avatar
Data de inscrição : 18/08/2010
Número de Mensagens : 414
Insígnias de JAM :

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

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

Re: Vou ter que fazer isso toda vez pra todo objeto?

em Sab 26 Jan 2013, 16:47
Isillum, você não sabe programar o Game Maker por escrito (pelos codigos)?
Porque se você não souber você vai ter que ler alguns tutoriais, tudo o que o vinians disse eu entendi, mas quando você disse :
"Mas pra que o GM me retorna os valores de X e Y? Como ele me mostra esses valores? Porque eu iria querer saber esse valores?
Isso me chegou a pensar que você não conhece os codes do game maker!
Caso eu esteja certo, veja no índice de tutorias que pode ajudar bastante!
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