GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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


pêndulo - QUASE lá

5 participantes

Ir para baixo

pendulo - pêndulo - QUASE lá Empty pêndulo - QUASE lá

Mensagem por saim Qua 07 Mar 2012, 14:13

O que era desejado
Um pêndulo que opere de modo moto-contínuo até que se adicione ou retire manualmente energia no sistema.

O que foi feito:
Depois de muito tentar, finalmente consegui chegar num pêndulo relativamente decente.
O problema de fazer um pêndulo usando as fórmulas da física real (tensão na corda, gravidade, vetor resultante) é que essas fórmulas usam aproximações.
Resolvi refazer uma engine que vi a muito tempo atrás mas que, na época, só consegui entender a idéia básica, que é a seguinte:
- Movimente o objeto normalmente, fingindo que não existe a corda (aplicando gravidade e tudo);
- Se a distância do objeto ao centro da corda for maior do que a corda, abre uma série de comandos:
...- Força a posição do pêndulo pra distância máxima;
...- Aponta a velocidade pra direção "posiçãoAnterior -> posiçãoAtual", mantendo o valor do módulo;
O código que estou usando é esse aqui:
Código:
ySpd += grav; //atualiza a velocidade vertical em função da gravidade
x += xSpd; y += ySpd; //atualiza a posição em função das velocidades
modSpd = point_distance(0, 0, xSpd, ySpd); //determina o módulo da velocidade
if (point_distance(x, y, cx, cy) > radius) { //se a distância ao centro for maior que o raio
   var ang;
   ang = point_direction(cx, cy, x, y); //define o ângulo do centro à posição
   x = cx + radius * cos(degtorad(ang)); y = cy + radius * sin(degtorad(-ang)); //puxa o objeto pra distância máxima
   dire = point_direction(xprev, yprev, x, y); //atualiza a direção do movimento, ligando a posição anterior à posição atual
   xSpd = modSpd * cos(degtorad(dire)); ySpd = modSpd * sin(degtorad(-dire)); //atualiza as velocidade horizontal/vertical em função da nova direção
   }

xprev = x; yprev = y; //a posição atual é a anterior do próximo step
Onde:
cx/cy = centro do pêndulo
xSpd/ySpd = velocidades horizontal/vertical
modSpd = módulo da velocidade, como vetor
xprev/yprev = x/y previous
radius = raio
grav = gravidade

radius * cos(degtorad(ang)) = lengthdir_x(radius, ang);
radius * sin(degtorad(-ang)) = lengthdir_y(radius, ang);
(estou tentando deixar de lado alguns vícios)

O que deu errado:
De alguma forma, o sistema está ganhando energia. Eu esperava que, ao completar 180°, a velocidade voltasse a zero, já que o objeto estaria subindo e, portanto, a gravidade estaria reduzindo a velocidade. Como o trecho a subir é o mesmo trecho que o objeto tem que descer, uma coisa eliminaria a outra.
Isso quase funcionou. Mas o objeto subiu um pouco mais do que devia e isso aconteceu em todas as voltas. Em pouco tempo, o objeto estava rodando ao redor do centro.
Se eu multiplico o valor de modSpd por 0.995 ou 0.9945, o pêndulo funciona adequadamente, mas esses valores foram encontrados na base da tentativa-e-erro, não há matemática envolvida.
Gostaria de pedir ajuda aos universitários. Literalmente. Alguém que esteja com mecânica fundamental mais fresca, na cabeça, por favor examine essas equações e me diga em que momento a energia está entrando no sistema.
Ou algum estudante de segundo grau mesmo, que seja bom com números, verifique essas contas e veja o que há de errado.
Se for necessário (pra jogar no excell, sei lá) tenho como gerar um texto com o valor dessas variáveis no final de cada step.


Última edição por saim em Qui 08 Mar 2012, 14:39, editado 1 vez(es)
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por cascavelo Qua 07 Mar 2012, 15:44

Enfrentei o mesmo problema desenvolvendo um engine para uma bola que quicava, por mais que eu tentasse controlar a gravidade a bola ia subindo a cada quique que dava até sumir da tela. Quebrei a cabeça um tempão e cheguei na conclusão que é um bug do sistema de gravidade do GM. Tive que retirar altura do sprite artificialmente pra conseguir o resultado desejado.
O problema parece ser a maneira que o GM lida com a gravidade, não parece ser algo real. O GM parece péssimo para lidar com física.
cascavelo
cascavelo

Games Ranking : Nota A

Notas recebidas : A - A - A - A - A -A -C
Data de inscrição : 08/12/2011
Reputação : 71
Número de Mensagens : 1011
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por saim Qua 07 Mar 2012, 16:12

Só que o GM não está lidando com física, nesse caso. Todas as variáveis são manipuladas manualmente, justamente pra evitar o uso de uma engine built-in que eu não sei como funciona. Nesse caso, a culpa não tem como ser do GM...
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por cascavelo Qua 07 Mar 2012, 17:35

Ok, agora entendi o que você fez, achei que tinha usado a "gravity". Mas acho melhor você postar o código completo para que se possa testar.
cascavelo
cascavelo

Games Ranking : Nota A

Notas recebidas : A - A - A - A - A -A -C
Data de inscrição : 08/12/2011
Reputação : 71
Número de Mensagens : 1011
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por PedroX Qua 07 Mar 2012, 18:42

Não é bem moto-continuo, porque perde velocidade, mas pode te servir:
http://dl.dropbox.com/u/38888521/Pendulo.gmk

Tem como adicionar uma força em uma certa direção, no exemplo adiciona na direction que já está movendo, ao apertar espaço.

É bem simples e pode ser transformado em base de seno e cosseno.

Até mais!

_________________


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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por saim Qui 08 Mar 2012, 08:13

cascavelo escreveu:Mas acho melhor você postar o código completo para que se possa testar.
Está completo, basta definir as variáveis citadas no create event. O código que postei, obviamente, fica no step.

Pedrø escreveu:Não é bem moto-continuo, porque perde velocidade, mas pode te servir
AARGH!!! Agora vou ter que esperar até chegar em casa pra testar!
Perder velocidade não é exatamente um problema, eu ia mesmo colocar um atrito artificialmente, quando tudo desse certo, só queria que DESSE certo antes de modificar.
Valeu! Smile
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por cascavelo Qui 08 Mar 2012, 14:34

Está completo, basta definir as variáveis citadas no create event. O código que postei, obviamente, fica no step.

Dá este erro:

ERROR in
action number 1
of Step Event
for object object0:

Error in code at line 8:
dire = point_direction(xprev, yprev, x, y); //atualiza a direção do movimento, ligando a posição anterior à posição atual
^
at position 28: Unknown variable xprev
cascavelo
cascavelo

Games Ranking : Nota A

Notas recebidas : A - A - A - A - A -A -C
Data de inscrição : 08/12/2011
Reputação : 71
Número de Mensagens : 1011
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por saim Qui 08 Mar 2012, 14:40

Ah, tá, esqueci dessas. Agora já atualizei o tópico inicial.
Elas devem ser definidas como xprev = x e yprev = y, no create.
[edit]Aliás, deixa eu motrar como está o create:
Código:
cx = x; cy = y; radius = 50; grav = 0.5;
x += radius;
xprev = x; yprev = y;
xSpd = 0; ySpd = 0; modSpd = 0; dire = 0;
maxMod = 0;

Edit 2
saim escreveu:@Pedrø, o exemplo funciona de um jeito muito bacana, mas não é o que eu estou procurando, por dois motivos (culpa minha, que não citei essas premissas):
- Quando a massa está acima do centro, ela não cai. Eu gostaria que caísse, como se a massa estivesse presa a uma corda.
- Você usa speed e direction. Eu tenho birra de usar essas variáveis, porque eu não sei como elas funcionam internamente. Aí, qualquer coisa que funcione, vai ser meio que uma "mágica". Nada contra usar lengthdir, porque essas eu SEI como funcionam, mas nunca sei exatamente como speed, hspeed, vspeed e direction são tratadas internamente e, mesmo quando a coisa é simples (como nesse caso) eu fico na dúvida se as posições são atualizadas ANTES ou DEPOIS do código ser executado.

Tem um terceiro problema que também é culpa minha, mas ESSE pode ser resolvido: eu não entendi nada! --\' Não entendi como você adiciona energia, não entendi como o objeto atualiza sua posição, não entendi o motivo do "-1" - nada. Eu adoraria ver uma versão comentada desses scripts. Por mais que eles não sirvam pro meu jogo (se é que esse jogo sai do papel), são muito interessantes.

Moçada, foi mal pelo double post. Dormi no ponto. Corrigido.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por PedroX Qui 08 Mar 2012, 23:09

Atualizei o exemplo no mesmo link.
Veja agora se melhorou os comentários.
Fiz versões alternativas para que você veja a diferença entre as funções do GM e as contas usadas manualmente.

_________________


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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por saim Sex 09 Mar 2012, 13:51

Melhorou no sentido de mostrar como fazer sem usar as built-ins (estava muito tarde e não cheguei a testar, mas vi os comentários), mas ainda não entendi como os códigos funcionam, o que eles fazem, etc.
Talvez porque estava muito tarde - e eu estava muito empolgado com um outro assunto (relacionado a games, mas que não tem nada a ver com game maker) - eu não consegui visualizar qual o sentido dos seus códigos. Por outro lado, você tem uma cabeça bem complexa, você está tão acostumado a pescar que pode se esquecer que precisa explicar como amarrar o anzol.

Mas não esquenta com isso não, ainda que eu consiga entender, o código não vai me servir, porque eu realmente quero que, quando o objeto estiver em baixa velocidade e acima do centro, ele caia por gravidade simples, sem continuar o movimento circular (a corda que une o objeto ao centro não pode ser rígida).

A pergunta inicial permanece, agora piorada: porque se eu reduzo a velocidade, multiplicando por um valor mais baixo como 0.7, por exemplo, o objeto se prende ao chegar a uns 45°?
Isso mesmo, se eu multiplico, no step dos meus códigos, o módulo da velocidade por um valor desses, o objeto fica preso, flutuando, perto de 45°.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por Klior Sex 09 Mar 2012, 15:51

saim sempre com suas duvidas interessantes...
tem que acrescentar isso na sua assinatura:
"Meus tutoriais: Variáveis, Arrays, Máquina de Estados Finitos, Game genérico, Surfaces, cores, Blend Modes, A* pathfinding, Debugando, lengthdir_x/y, lasers
Minhas engines: Desenhar bandeira, Efeitos texto
Minhas duvidas: ........."

sobre sua duvida estarei dando uma olhada no fds, caso ainda não esteja resolvida..
Klior
Klior

Data de inscrição : 07/03/2010
Reputação : 13
Número de Mensagens : 426
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • C#
  • Javascript


Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por Mr. Kaleb Sex 09 Mar 2012, 18:27

Ah, saim, agora o bicho pegou, porque, você quer uma corda maleável, então você vai ter que achar um extensão ou algo parecido, porque, digo por experiência própria, já tentei fazer algo parecido, e é bastante complexo ao meu ver.
O jeito mais fácil de fazer seria com joints, lembra daquelas engines do Jiraya de localização de pontos? Pois é, seria algo parecido, mas mesclado com um sistema de física que fosse complexa o suficiente para se adequar.
Fora isso, não sei de mais nada.
Mr. Kaleb
Mr. Kaleb

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 07/09/2010
Reputação : 21
Número de Mensagens : 1400
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por PedroX Sex 09 Mar 2012, 19:01

Entendi saim.

Para descomplicar um pouco, adicionei mais comentários.
Facilitou um bom tanto.

Qualquer coisa posta ai. Não desista não.

Edit

Assim que você entender, passo para a parte dele cair, como numa corda flexível.
Mas isso exigirá um pouco de trabalho.

_________________


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:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : pendulo - pêndulo - QUASE lá Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

pendulo - pêndulo - QUASE lá Empty Re: pêndulo - QUASE lá

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos