Vou ter que fazer isso toda vez pra todo objeto?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Resolvido Vou ter que fazer isso toda vez pra todo objeto?

Mensagem por iSillum 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)

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester 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.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum 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

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por JoaoVanBlizzard 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

JoaoVanBlizzard

Ranking : Nota B
Número de Mensagens : 1925
Idade : 38
Data de inscrição : 04/03/2012
Notas recebidas : B+B
Reputação : 144
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

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

Mensagem por RafaelCazarotto 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 ;)

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 19
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum em Sab 26 Jan 2013, 15:09

Não entendi RafaelCazarotto

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por RafaelCazarotto em Sab 26 Jan 2013, 15:14

ok eu fasso uma engine bem rapida então jaja posto com o edit =]

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 19
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester 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.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por RafaelCazarotto 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)

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 19
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum 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?

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester 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

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por vinians 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!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

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

Mensagem por RafaelCazarotto 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

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 19
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum 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?

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester 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.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por vinians 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!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum 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 :|

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester 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.




theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum 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ê?

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por superrafao 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!

superrafao

Número de Mensagens : 414
Idade : 20
Data de inscrição : 18/08/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

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

Mensagem por vinians em Sab 26 Jan 2013, 16:48


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?
"Entregar" é modo de dizer. O que acontece é que ele "soma" o y no vspeed e quando ele verifica a colisão, ele retorna o Y ao valor anterior da ocorrência da colisão para que você possa usar o move_contact_solid() e o seu objeto nao fique preso dentro de outro.

Então move_contact_solid é na verdade a forma escrita do evento Collision?
Não necessariamente pois você pode usa-lo a qualquer momento até fora do evento de colisão. O que ele faz, como mostrei no desenho acima, é mover de 1 em 1 pixel (ele move internamente por isso fica rapido) até que haja uma colisão, isso faz com que ele "mova" até a posição de "contato" exato de 1 pixel. Esse é o funcionamento da engine do GM, o valor de vspeed na maioria das vezes é maior que 1, por isso há necessidade de usar este comando move_contact_solid();

Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum em Sab 26 Jan 2013, 16:56

olha, realmente vocês são muito pacientes surpreso2

Será que você poderia descrever um exemplo prático dessa função?
Tipo, olha o que acontece se eu fizer essa engine sem essa função, ele da esse bug, ou evita essa outra bug e facilita dessa forma?

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester em Sab 26 Jan 2013, 17:00

Por exemplo, na imagem 2 do Vinians, sem o move_contact(ou qualquer outro método) ele iria ficar preso ali, com o move_contact, ele sai dali.

Não consigo pensar em mais modos de explicar, pensei em fazer uma engine mas não sei como ela explicaria!

mas não desisto até você entender!

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum em Sab 26 Jan 2013, 17:08

Então a finalidade é evitar o Bug de ficar preso em algum outro objeto?

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester em Sab 26 Jan 2013, 17:17

é uma forma de sair de outro objeto basicamente.

consequentemente evitará esse erro.


mas existe diversas formas de fazer isso.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum em Sab 26 Jan 2013, 17:27

Olha, acho que vou aprender vendo utilizações e com o tempo mesmo...

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por VerdiMare em Sab 26 Jan 2013, 18:57

theguitarmester escreveu:ERRADO, ele vai fazer isso enquanto estiver colidindo com um sólido, e não quando não estiver.

Eu fui usar esse move_contact_solid aqui, embora que numa movimentação topdown, e o player se move enquanto eu estiver apertando a tecla da direção até encontrar um obj sólido e parar.

[EDIT]
Desculpem, eu não tinha visto que o tópico já estava na 2ª página.
Eu entendi também sobre esse código, obrigado a vocês.


Última edição por VerdiMare em Sab 26 Jan 2013, 19:37, editado 1 vez(es)

VerdiMare

Número de Mensagens : 679
Idade : 19
Data de inscrição : 21/02/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

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

Mensagem por vinians em Sab 26 Jan 2013, 19:01

Aqui um exemplo da diferença basica do uso e não uso do move_contact_solid().
Clique na imagem para poder testar



Observe que quando você desliga o move_contact_solid() você não consegue atingir os cantos corretamente pois ele detecta a colisão que ira ocorrer com o próximo somar de Y ou de X a para. Já quando está ligado, ele vai perfeitamente até os cantos. O exemplo foi feito no GMS e roda na versão free.
Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

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

Mensagem por iSillum em Sab 26 Jan 2013, 19:09

Entendi.

iSillum

Número de Mensagens : 72
Data de inscrição : 22/01/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por PedroX em Sab 26 Jan 2013, 19:49

theguitarmester escreveu:é uma forma de sair de outro objeto basicamente.
Notei que você repetiu isso várias vezes. Mas o que acontece não é isso. Ele não foge do sólido, ele vai em direção ao sólido. O GM detecta a colisão antes de esta acontecer realmente (um step antes). Ou seja, o GM não deixa que o objeto entre no sólido. Ao usar a função citada, aí o objeto vai ir mais na direção do sólido (pois a direction seria 270 numa queda), de forma que fique 1 pixel antes. Assim, já que usam muito !place_free(x, y+1) ao pular, o objeto estará a 1 pixel do sólido e assim poderá pular, não travando no chão. O Vinians explicou isso muito bem através do exemplo.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

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

Mensagem por Conteúdo patrocinado Hoje à(s) 20:20


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum