Analogico controlar image angle

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

Analogico controlar image angle

Mensagem por GabrielXavier em Ter 10 Set 2013, 15:52

Estou tendo dificuldades de logica para resolver um problema aqui com um Joystick.

Quero que o analogico do lado "L" controle a velocidade e a direcão que o player esta indo como se fosse as teclas "W A S D" do teclado em um jogo visto de cima e o analogico do lado "R" interferindo no image_angle como se fosse o mouse,

O meu problema é que o joystick retorna um numero entre -1 e 1 no analogico variando dependendo do precionamento na alavanquinha quando nao esta precionando ele retorna 0.

Criei o post por talvez ja tem algo pronto que me adiantaria um bocado.

GabrielXavier

Ranking : Nota A
Número de Mensagens : 359
Data de inscrição : 25/02/2012
Notas recebidas : A
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 1

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por mZIl em Ter 10 Set 2013, 16:09

Eu não entendi. O analógico não pode retornar um valor entre -1 e 1, assim não teria nem como pegar a posição dele em relação ao centro. Ele tem que retornar além disso um vetor bidimensional, ou alguma coordenada em 2D pelo menos. Se ele faz isso que eu falei, bastaria fazer essa equação:

Código:

angulo = acos((vetorX * 0)+(vetorY * 1))
Explicando melhor o vetorX seria a quantidade que o analógico está na horizontal (Sendo 0 o centro, 1 a direita, e -1 a esquerda) e o vetorY seria a mesma coisa porém na vertical. No caso desse analógico não retornar um vetor unitário (Aonde a magnitude dele é sempre 1) bastaria aplicar isso antes (Ou você pode aplicar mesmo não precisando, para garantir):

Código:

comprimento = sqrt((vetorX^2)+(vetorY^2))
vetorX = vetorX/lenght
vetorY = vetorY/lenght
Edit: Eu não sei se o GameMaker tem alguma função que faça a mesma coisa, pois eu não uso o gamemaker já que eu não tenho dinheiro pra comprar. Mas a primeira função seria a mesma coisa que pegar um angulo entre 2 vetores, e a segunda é a função conhecida em inglês como "normalize". E o comprimento está usando uma equação idêntica a função para pegar a magnitude de um vetor. Se tiver alguém que reconheça essas equações de alguma função no GM seria bem interessante :3

mZIl

Número de Mensagens : 49
Idade : 19
Data de inscrição : 10/07/2013
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por shatterhand2 em Ter 10 Set 2013, 17:29

Você quer que a velocidade do movimento do personagem seja relativo à posição do controle analógico, ou seja absoluto nas 8 direções principais?


shatterhand2

Número de Mensagens : 645
Idade : 33
Data de inscrição : 21/10/2009
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://shatterhand.beatthegame.net

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por mZIl em Ter 10 Set 2013, 18:23

Eu tenho que me desculpar, pois eu cometi dois erros. O primeiro é que a função pode ser simplificada pra usar menos processamento. Antes era assim:

Código:
angulo = arccos((vetorX * 0)+(vetorY * 1))
Ela pode ser simplificada para:

Código:
angulo = arccos(vetorY)
Pois X*0 sempre será zero, e somar zero com qualquer coisa nunca irá mudar nada. Então fica assim mesmo. Óbvio que isso é só nesse caso. E como multiplicar algo por 1 dá sempre o mesmo resultado, é cortado fora também.

O segundo é que a primeira função irá retornar um valor em radiano. Além de que ela só dará o angulo entre 0~180 (Ou de 0pi~1pi). Então para arrumar isso o código inteiro ficaria assim e funcionaria não importando o tipo da input do controle:

Código:
//Primeira parte
comprimento = sqrt((vetorX^2)+(vetorY^2))
vetorX = vetorX/comprimento
vetorY = vetorY/comprimento

//Segunda parte---

if vetorX>=0 {
  angulo = radtodeg(arccos(vetorY))
else
  angulo = radtodeg(arccos(vetorY)) + 180
}
No lugar do vetorX, você coloca a posição X que o analógico está em relação ao seu centro, e no vetorY você substitui pela posição Y que o analógico está em relação ao centro.

Agora explicando o código. A primeira parte é aonde o vetor (Ou as posições do analógico) é "normalizado". Isso faz com que a magnitude (ou o comprimento) dele seja igual a 1. Então a direção do analógico será representada por duas variáveis que se você fizer "sqrt((X^2)+(Y^2))" dará 1. Isso é um vetor unitário, que geralmente é usado para representar rotação, direção e outras coisas.

Na segunda parte, eu pego o ângulo do vetor em relação a um vetor que está "apontando" para cima. Então se o seu analógico estiver para a direita, o ângulo será 90. Como eu disse que o angulo calculado só vai de 0~180, eu vejo se x é negativo, se for, quer dizer que o ângulo será maior que 180. Então eu pego o ângulo e adiciono 180 para dar o valor real.

Eu até daria alguns links, mas a página de vetores da wikipédia é simplesmente impossível de entender, e a maioria dos conteúdos em português fazem todos os cálculos usando equações. Então, se você entende inglês esse link vale ouro:

http://www.wildbunny.co.uk/blog/vector-maths-a-primer-for-games-programmers/

E claro, para usar vetores é muito mais fácil se você usar matrizes. Porém eu não saberia dizer o quão fácil seria adicionar funções extras para usar vetores no GM. Aliás, eu não achei nenhuma função nativa do GM para trabalhar com vetores.

Edit: A função para acos é na verdade arccos, 3 erros agora '-'. Arrumado também.

mZIl

Número de Mensagens : 49
Idade : 19
Data de inscrição : 10/07/2013
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por shatterhand2 em Ter 10 Set 2013, 18:44

Cara, da pra fazer muito mais simples que isso. Muito mais simples mesmo.

Nem vi se sua matemática tá certa ou não.. de fato, usando uma linguagem mais "baixo nível", provavelmente deveria usar matemática nesse nível.

Mas o GameMaker da recurso pra fazer de uma forma BEM mais simples. Eu só quero que ele responda qual forma ele realmente quer, e eu dou uma solução *bem* mais simples. Se eu não estou enganado, dá pra resolver isso com 3 linhas de código

shatterhand2

Número de Mensagens : 645
Idade : 33
Data de inscrição : 21/10/2009
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://shatterhand.beatthegame.net

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por mZIl em Ter 10 Set 2013, 18:50

shatterhand2 escreveu:Cara, da pra fazer muito mais simples que isso. Muito mais simples mesmo.

Nem vi se sua matemática tá certa ou não.. de fato, usando uma linguagem mais "baixo nível", provavelmente deveria usar matemática nesse nível.

Mas o GameMaker da recurso pra fazer de uma forma BEM mais simples. Eu só quero que ele responda qual forma ele realmente quer, e eu dou uma solução *bem* mais simples. Se eu não estou enganado, dá pra resolver isso com 3 linhas de código
Entendo rs. Eu já imaginava que teria algum modo mais simples de se fazer isso no Game Maker xD. Irei deixar alguém que realmente entenda o GM responder antes de "baixar o nível" assim tanto rs

mZIl

Número de Mensagens : 49
Idade : 19
Data de inscrição : 10/07/2013
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por shatterhand2 em Ter 10 Set 2013, 19:21

No caso de programação, "baixo nível" na verdade é mais elegante e elaborado Smile

shatterhand2

Número de Mensagens : 645
Idade : 33
Data de inscrição : 21/10/2009
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://shatterhand.beatthegame.net

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por GabrielXavier em Ter 10 Set 2013, 19:23

shatterhand2 escreveu:Você quer que a velocidade do movimento do personagem seja relativo à posição do controle analógico, ou seja absoluto nas 8 direções principais?

desculpe a demora é que minha net ficou fora do ar ai nem pude testar os codigos e agora estou na faculde via celular so vou poder testar ali pelas meia noite quando chegar em casa.

Sim a velocidade pode ser relativa a posicao do analogico.

GabrielXavier

Ranking : Nota A
Número de Mensagens : 359
Data de inscrição : 25/02/2012
Notas recebidas : A
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 1

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por PedroX em Ter 10 Set 2013, 20:32

Para o analógico direito:
Código:
image_angle = point_direction(0, 0, gamepad_axis_value(1, gp_axisrh),  gamepad_axis_value(1, gp_ahisrv));
Para o analógico esquerdo:
Código:
var vh, vv;
vh = gamepad_axis_value(1, gp_axislh);
vv = gamepad_axis_value(1, gp_axislv);
direction = point_direction(0, 0, vh,  vv);
hspeed = lengthdir_x(vh, direction)*5;
vspeed = lengthdir_y(vv, direction)*5;
Edit: é meu 10º edit no post... finalmente acho que vai dar certo.

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

Re: Analogico controlar image angle

Mensagem por shatterhand2 em Ter 10 Set 2013, 23:11

Experimenta fazer isso no step:

hspeed = 4*gamepad_axis_value(0,gp_axislh)
vspeed = 4*gamepad_axis_value(0,gp_axislv)
image_angle = direction


Você vai precisar fazer um ajuste pra considerar a deadzone do controle, mas acho que a partir dai você já pode resolver o seu problema Smile

EDIT: ops... agora que eu entendi direito o que você queria, você quer usar as duas alavancas.

perae

EDIT2:

Tenta isso:

hspeed = gamepad_axis_value(0,gp_axisrh)
vspeed = gamepad_axis_value(0,gp_axisrv)
image_angle = direction
x -= hspeed
y -= vspeed

x+= 4*gamepad_axis_value(0,gp_axislh)
y+= 4*gamepad_axis_value(0,gp_axislv)

É gambiarra braba, e você *vai* precisar ajustar pra considerar a deadzone, principalmente da alavanca direita.. Mas funciona, e você coloca o GameMaker pra fazer as operações matemáticas pra você.

shatterhand2

Número de Mensagens : 645
Idade : 33
Data de inscrição : 21/10/2009
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://shatterhand.beatthegame.net

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por GabrielXavier em Sab 14 Set 2013, 13:31

Ate hoje não iniciei meu projeto do concurso yes por causa que essa movimentação é essencial no projeto, mas nada faz meu game maker reconhecer meu contole como um gamepad ele so reconhece como joystick, comprei outro um controle sem fio hoje R$60.00  O_o para ver se funcionava mas não adiantou em nada, não consigui testar os codigos de você pois eles usam so funcões do gamepad e não do joystick :'(

Mas vou continuar tentando achar alguma solução para isso muito obrigado pelas respostas e assim que eu conseguir um "Gamepad" eu volto a comentar aqui neste post!

GabrielXavier

Ranking : Nota A
Número de Mensagens : 359
Data de inscrição : 25/02/2012
Notas recebidas : A
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 1

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por shatterhand2 em Sab 14 Set 2013, 14:10

Cara, o que você falou não faz o menor sentido.

Por acaso quando você testa o jogo, dá um erro antes de faltar um DLL, e depois o jogo funciona?

Qual é a sua versão do GMS?

shatterhand2

Número de Mensagens : 645
Idade : 33
Data de inscrição : 21/10/2009
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://shatterhand.beatthegame.net

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por GabrielXavier em Dom 15 Set 2013, 22:50

Sim oque eu falei realmente é oque esta acontecendo aqui comigo :/

Uso a versão
GMStudio-Installer-1.1.1013

Mas ja tentei na versão
GMStudio-Installer-1.2.1130

e nada de reconhecer meu controle como gamepad
não sei oque eu faço O_o ...

GabrielXavier

Ranking : Nota A
Número de Mensagens : 359
Data de inscrição : 25/02/2012
Notas recebidas : A
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 1

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por PedroX em Dom 15 Set 2013, 23:01

Vejam o tópico:

http://gmc.yoyogames.com/index.php?showtopic=570122

Parece que isso é esperado mesmo. As novas funções são experimentais.

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

Re: Analogico controlar image angle

Mensagem por GabrielXavier em Seg 16 Set 2013, 00:31

Pedro eu visitei este topico que você citou vi comentarios sobre o Xinput, pesquisei a respeito e consegui resolver parte do meu problema agora o meu game maker studio ja consegue reconhecer os meus dois controles (Meu Joypad e Me Joystick Hehe) e certamente os codigos que foram citados acima irão resolver meu outro problema, amanha inicio os testes sobre o image_angle pelo analogico e a movimentação tbm.
Assim que conseguir o resultado esperado volto a comentar...
Muito obrigado pelo empenho de todos aqui neste topico!

GabrielXavier

Ranking : Nota A
Número de Mensagens : 359
Data de inscrição : 25/02/2012
Notas recebidas : A
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 1

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por Kabeção em Seg 16 Set 2013, 00:45


Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por PedroX em Seg 16 Set 2013, 13:38

Gabriel, o código do Kabeção resolve o problema. Mas, mesmo assim, gostaria de saber como você resolveu, se puder informar.

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

Re: Analogico controlar image angle

Mensagem por GabrielXavier em Seg 16 Set 2013, 21:36

No meu caso acredito que a solução apresentada pelo cabeção não seria legal pois presiso usar as funções do gamepad para controlar o objeto pelos analogico por exemplo:

vh = gamepad_axis_value(1, gp_axislh);
vv = gamepad_axis_value(1, gp_axislv);


Nas funções de joystick não funcionaria o codigo acima (o codigo foi só um exemplo não estou usando ele)
Poderia achar uma solução para preencher essas necessidades com um joystick mas acredito que daria bastante trabalho.

A solução que encontrei foi usar um emulador que encontrei na net o "Xinput"
segundo posts que li ele faz com que qualquer controle joystick, joypad, gamepad que esteja conectado no pc seja reconhecido como um controle do xbox então as funções do Gamepad do GM:S vão funcionar mesmo em um joystick.
Para usar baixei uma versão na net configurei e é so colocar na pasta onde esta o execultavél do jogo, no caso do runner para funcionar quando vamos testar no Gm:S eu coloquei os arquivos na pasta raiz do gms (C:\Users\Gabriel\AppData\Roaming\GameMaker-Studio) e tudo funcionou perfeitamente)

Ai para o final do concurso posso enviar os arquivos do xinput junto ao exe do jogo se caso precisar, mas certamente quando for compilado o apk para o ouya as funções gamepad vão funcionar normalmente.

Não vou deixar o link dos arquivos por que não sei se é um programa pago ou free O_o pesquisei um pouco aqui não descobri nada a respeito, mas vou deixar um print dos arquivos, e se alguém quiser entre em contato comigo pelo face ou por mp.


GabrielXavier

Ranking : Nota A
Número de Mensagens : 359
Data de inscrição : 25/02/2012
Notas recebidas : A
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 1

Voltar ao Topo Ir em baixo

Re: Analogico controlar image angle

Mensagem por PedroX em Seg 16 Set 2013, 21:56

Como não tenho controle (na verdade o fio), estou usando o teclado mesmo para simular no Windows. Estou fazendo de forma que fique fácil remover depois.

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

Re: Analogico controlar image angle

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


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