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
Como o GMS reconhece o controle do OUYA.
4 participantes
Página 1 de 1
Como o GMS reconhece o controle do OUYA.
Eu consegui instalar o controle do OUYA no pc, via Bluetooth, fiz toda a calibragem, esta tudo ok, porem o GMS não reconhece ele, nenhum comando de gamepad, funciona, usei este comando para verificar a detecção de um controle no windows, porem ele sempre retorna "Nenhum controle detectado".
- Código:
var gp_num = gamepad_get_device_count(); // Isso retorna quantos controles posso ter ao mesmo tempo neste dispositivo, no Windows são 4
for (var i = 0; i < gp_num; i++;)
{
if gamepad_is_connected(i) // Caso algum controle seja detectado
{
draw_text(32, 32 + (i * 32), gamepad_get_description(i)); // Aqui deveria aparecer a descrição do controle algo como: OUYA Game Controller
}
else
{
draw_text(32, 32 + (i * 32), "Nenhum controle detectado");
}
}
CRP-Max- Games Ranking :
Notas recebidas : C
Data de inscrição : 28/10/2008
Reputação : 29
Número de Mensagens : 822
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Como o GMS reconhece o controle do OUYA.
Parece que você precisa selecionar a opção de controle:
Global Game Settings -> Android -> General -> Bluetooth / iCade
Global Game Settings -> Android -> General -> Bluetooth / iCade
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:
Re: Como o GMS reconhece o controle do OUYA.
Na verdade eu já tinha visto isso, mas estas funções são somente para o Android, não fazem efeito no Windows, e o controle do PS3 também é Bluetooth e funciona normalmente, porém eu queria testar direto no controle do OUYA...PedroX escreveu:Parece que você precisa selecionar a opção de controle:
Global Game Settings -> Android -> General -> Bluetooth / iCade
CRP-Max- Games Ranking :
Notas recebidas : C
Data de inscrição : 28/10/2008
Reputação : 29
Número de Mensagens : 822
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Como o GMS reconhece o controle do OUYA.
Posso aproveitar o tópico? Estou com o mesmo problema. Conectei o gamepad na porta USB, os testes do windows funcionam (mostram o botão apertado e tudo), mas o GMS parece não reconhecer o controle como conectado. Coloquei alguns debug messages no create, pra testar, e veja o que resultou:
create:
create:
- Código:
var i; for(i := 0; i < 4; i += 1){
desenhaBot[i] := false;
}
botao[0] := gp_face1;
botao[1] := gp_face2;
botao[2] := gp_face3;
botao[3] := gp_face4;
if (gamepad_is_supported()){
show_debug_message("gamepad suportado!");
}
else {
show_debug_message("gamepad não suportado...");
}
controle := -1;
var gp_num = gamepad_get_device_count();
for (i := 0; i < gp_num; i++;)
{
if gamepad_is_connected(i){
show_debug_message("o gamepad conectado é o " + string(i));
show_debug_message(gamepad_get_description(i));
controle := i;
}
}
show_debug_message("nControles = " + string(gp_num));
show_debug_message("controle = " + string(controle));
Quer dizer, suporta controle, mas não encontra nenhum conectado. Lembrando: o controle está conectado e funcionando no windows, eu testei o jogo como se fosse lançado no windows.debug escreveu:**********************************.
Entering main loop.
**********************************.
Total memory used = 1641266(0x004776fd) bytes
StartGame() - DONE
controle = -1
nControles = 4
gamepad suportado!
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Como o GMS reconhece o controle do OUYA.
Meu gamepad oficial Xbox 360 não é reconhecido também mas, funciona com as funções joystick_.
Como o Windows tem uma infinidade de modelos diferentes de controles eu uso tanto as funções joystick_ quanto gamepad_ para garantir que a maioria funcione.
Um exemplo:
Se os dois casos forem falsos, gpad = 0.
Na hora de controlar:
Mover para cima e para baixo
Como o Windows tem uma infinidade de modelos diferentes de controles eu uso tanto as funções joystick_ quanto gamepad_ para garantir que a maioria funcione.
Um exemplo:
- Código:
globalvar gpad;
gpad = gamepad_is_supported();
gpad_id = -1; // device id
if gpad {
var gp_num = gamepad_get_device_count();
for (var i = 0; i < gp_num; i++;) {
if gamepad_is_connected(i) {
gpad_id = i;
gpad = true;
break;
} else {
gpad = false;
}
}
}
if !gpad && os_type = os_windows {
if joystick_exists(1) {
gpad = 2;
gpad_id = 1;
}
if joystick_exists(2) {
gpad = 2;
gpad_id = 2;
}
}
Se os dois casos forem falsos, gpad = 0.
Na hora de controlar:
- Código:
// eu uso key[constante_tecla] no lugar do usual keyboard_check...
// assim esse script me permitido usar o tecla e o joystick ao mesmo tempo sem dificuldades
var i;
for (i = 0; i < key_n; i += 1) {
key[i] = (keyboard_check(akey[i]));
pkey[i] = (keyboard_check_pressed(akey[i]));
rkey[i] = (keyboard_check_released(akey[i]));
if gpad = 1 {
key[i] = key[i] || gamepad_button_check(gpad_id,gp_map[i]);
pkey[i] = pkey[i] || gamepad_button_check_pressed(gpad_id,gp_map[i]);
rkey[i] = rkey[i] || gamepad_button_check_released(gpad_id,gp_map[i]);
}
if gpad = 2 {
key[i] = key[i] || joystick_check_button(gpad_id,joy_map[i]);
// ...
}
}
Mover para cima e para baixo
- Código:
x += (key[right]-key[left]) * spd;
y += (key[down]-key[up]) * spd;
Re: Como o GMS reconhece o controle do OUYA.
Muito bom, Kabeção! Eu já estava pronto pra dar um double-post, dizendo que as funções obsoletas são as que funcionam. A propaganda das novas funções é tão forte que eu ainda não tinha testado as velhas.
MAS seu código termina justamente na parte interessante... As funções velhas não têm checagem de "pressed" e "released", só de "check_button".
Não esquenta, eu posso fazer um "last_situation" ou coisa do tipo e ver se está diferente da atual. Vai ficar um script volumoso, mas o bom dos scripts é que eles podem ser escritos e deixados num canto, sem incomodar com seu volume.
Acho que o problema está resolvido. Quer dizer, eu queria MESMO era fazer o jogo reconhecer meu joystick velho com as novas funções, mas parece que não vai ter jeito. Já que isso não dá pra fazer, o que dá está bem direcionado.
MAS seu código termina justamente na parte interessante... As funções velhas não têm checagem de "pressed" e "released", só de "check_button".
Não esquenta, eu posso fazer um "last_situation" ou coisa do tipo e ver se está diferente da atual. Vai ficar um script volumoso, mas o bom dos scripts é que eles podem ser escritos e deixados num canto, sem incomodar com seu volume.
Acho que o problema está resolvido. Quer dizer, eu queria MESMO era fazer o jogo reconhecer meu joystick velho com as novas funções, mas parece que não vai ter jeito. Já que isso não dá pra fazer, o que dá está bem direcionado.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Como o GMS reconhece o controle do OUYA.
Eu uso keyboard_key_press e keyboard_key_release para facilitar minha vida.
O interessante é que enquanto o jogo estiver rodando o joystick simula o teclado em qualquer programa.
Mas entre não me preocupar com isso e perder horas simulando as funções, escolhe não me preocupar, até mesmo porque o destino do jogo não é o computador.
- Código:
for (i = 0; i < key_n; i += 1) {
if gpad = 2 {
if i >= 4 && i <=13 {
if joystick_check_button(gpad_id,ajoy[i]) {
keyboard_key_press(akey[i]);
} else {
keyboard_key_release(akey[i]);
}
}
}
key[i] = (keyboard_check(akey[i]) && tkey);
pkey[i] = (keyboard_check_pressed(akey[i]) && tkey);
rkey[i] = (keyboard_check_released(akey[i]) && tkey);
if gpad = 1 {
key[i] = key[i] || (gamepad_button_check(gpad_id,ajoy[i]) && tkey);
pkey[i] = pkey[i] || (gamepad_button_check_pressed(gpad_id,ajoy[i]) && tkey);
rkey[i] = rkey[i] || (gamepad_button_check_released(gpad_id,ajoy[i]) && tkey);
}
}
O interessante é que enquanto o jogo estiver rodando o joystick simula o teclado em qualquer programa.
Mas entre não me preocupar com isso e perder horas simulando as funções, escolhe não me preocupar, até mesmo porque o destino do jogo não é o computador.
Re: Como o GMS reconhece o controle do OUYA.
Muito bom, Kabeção. Excelente ideia. Ainda estou fazendo meus testes e esse 'script' vai ser usado. Mas vou trocar por variáveis, para não interferir em outros programas e para evitar possíveis transtornos.
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:
Re: Como o GMS reconhece o controle do OUYA.
Galera, notei o bug hoje enquanto desenvolvia meu jogo.
As funções funcionam depois de reiniciar com game_restart.
Vejam o exemplo que postei no bug tracker http://bugs.yoyogames.com/view.php?id=12351 e digam se acontece o mesmo com vocês.
....
Postando no GMC descobri o problema.
Parece que o GMS só reconhece a conexão do gamepad depois de alguns steps.
Use um alarm e cheque o gamepad depois de 3 steps.
As funções funcionam depois de reiniciar com game_restart.
Vejam o exemplo que postei no bug tracker http://bugs.yoyogames.com/view.php?id=12351 e digam se acontece o mesmo com vocês.
....
Postando no GMC descobri o problema.
Parece que o GMS só reconhece a conexão do gamepad depois de alguns steps.
Use um alarm e cheque o gamepad depois de 3 steps.
Re: Como o GMS reconhece o controle do OUYA.
Achei mais um pouco de informação no tópico: http://gmc.yoyogames.com/index.php?showtopic=574199
Resumindo tudo: você pode usar um emulador no Windows e então usar gamepad_* ou então usar joystick_* no Windows e gamepad_* no Ouya (assim como fez o Kabeção).OK pessoal, Windows normalmente não trabalha com controles do PS3. Até aparece no Painel de Controle, mas simplesmente não funciona direito.
Para fazê-los funcionar, você usa MotionInJoy (ou talvez haja outro programa também). Então, nas configurações do MotionInJoy, você escolher diferentes métodos de emulação. Muitos deles são versões DInput, como as opções de controles de PS1/PS2, mas um deles, o XBOX360, torna-o um dispositivo XInput. Então, se configurar o controle como XBOX360, vai usar XInput, e poderá ser usado com as novas funções gamepad*. Mas se configurar o controle como qualquer outro dispositivo, vai usar DInput e só poderá ser usado com as funções de joystick.
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:
Re: Como o GMS reconhece o controle do OUYA.
Nem. Deve ser o controle, como sugere o Pedro. O meu é o mais genérico do mundo, comprado pra jogar PS2, ele tem duas entradas, uma é usb. Uso o game_restart quantas vezes quiser e continua não encontrando o gamepad - embora o truque do joystick funcione! Ah, e eu procuro pelo gamepad 30 steps depois do jogo iniciado, acho que isso mais do que dá tempo pra qualquer delay.Kabeção escreveu:Galera, notei o bug hoje enquanto desenvolvia meu jogo.
As funções funcionam depois de reiniciar com game_restart.
Vejam o exemplo que postei no bug tracker http://bugs.yoyogames.com/view.php?id=12351 e digam se acontece o mesmo com vocês.
....
Postando no GMC descobri o problema.
Parece que o GMS só reconhece a conexão do gamepad depois de alguns steps.
Use um alarm e cheque o gamepad depois de 3 steps.
Agora, deixa eu entender esse lance de transformar o joystick num teclado, enquanto faço meus testes aqui... são funções com as quais não estou familiarizado.
Você escolhe uma tecla e força o windows a apertar a tecla se o botão do joystick estiver apertado, isso a cada step. O jogo vai entender que essa situação mudou de um step pro outro? Tipo "ah, se a tecla estava apertada e não está mais, é na hora de disparar um evento de key_release". É isso? Bacaaana!
Eu me perdi no "tkey". Você chegou a explicar ele? O que é?
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Como o GMS reconhece o controle do OUYA.
Sim.O jogo vai entender que essa situação mudou de um step pro outro?
O programa não só simula, ele faz o Windows receber a tecla como se realmente fosse apertada, por isso, enquanto o jogo rodar se você for no bloco de notas e usar o joystick, ele vai funcionar como o teclado.
O que mostrei é apenas um pedaço dos scripts que criei para controlar teclado e joystick.Eu me perdi no "tkey". Você chegou a explicar ele? O que é?
tkey serve para desativar os controles se for false.
Uso constantes com o nome dos botões (baseados no controle do Xbox360) para facilitar.
- Código:
rt=15
lt=14
rs=13
rb=12
ls=11
lb=10
back=9
start=8
ba=7
bb=6
by=5
bx=4
down=3
right=2
up=1
left=0
- Código:
akey[up] = ord('W');
akey[down] = ord('S');
akey[left] = ord('A');
akey[right] = ord('D');
/*akey[up] = vk_up;
akey[down] = vk_down;
akey[left] = vk_left;
akey[right] = vk_right;*/
akey[ba] = vk_space;
akey[bb] = ord('C');
akey[bx] = ord('Z');
akey[by] = ord('V');
akey[start] = vk_enter;
akey[back] = vk_backspace;
akey[lb] = ord('Q');
akey[ls] = ord('E');
akey[rb] = ord('R');
akey[rs] = ord('T');
akey[lt] = ord('Y');
akey[rt] = ord('U');
// Gamepad
if gpad = 1 {
ajoy[up] = gp_padu;
ajoy[down] = gp_padd;
ajoy[left] = gp_padl;
ajoy[right] = gp_padr;
ajoy[ba] = gp_face1;
ajoy[bb] = gp_face2;
ajoy[bx] = gp_face3;
ajoy[by] = gp_face4;
ajoy[start] = gp_start;
ajoy[back] = gp_select;
ajoy[lb] = gp_shoulderl;
ajoy[lt] = gp_shoulderrb;
ajoy[ls] = gp_stickl;
ajoy[rb] = gp_shoulderr;
ajoy[rt] = gp_shoulderrb;
ajoy[rs] = gp_stickr;
}
// Joystick
if gpad = 2 {
// o valor certo para cada botão é totalmente instável
// de joystick para joystick então é praticamente obrigatório
// dar a opção de configurar os controles para o jogador
ajoy[ba] = 1;
ajoy[bb] = 2;
ajoy[bx] = 3;
ajoy[by] = 4;
ajoy[start] = 8;
ajoy[back] = 7;
ajoy[lb] = 5;
ajoy[ls] = 9;
ajoy[rb] = 6;
ajoy[rs] = 10;
}
- Código:
// gpad_step()
// Definir keys e combo
var i,m,t2;
m = -1;
if gpad = 2 {
// Dpad
t2 = joystick_pov(gpad_id);
if t2 != -1 {
switch (t2) {
case 0: t2 = 90; break;
case 90: t2 = 0; break;
case 135: t2 = 315; break;
case 180: t2 = 270; break;
case 315: t2 = 135; break;
case 270: t2 = 180; break;
}
}
// Analogico simula botões direcionais
if t2 = -1 {
switch (joystick_direction(gpad_id)) {
case vk_numpad1: t2 = 225; break;
case vk_numpad2: t2 = 270; break;
case vk_numpad3: t2 = 315; break;
case vk_numpad4: t2 = 180; break;
case vk_numpad5: t2 = -1; break;
case vk_numpad6: t2 = 0; break;
case vk_numpad7: t2 = 135; break;
case vk_numpad8: t2 = 90; break;
case vk_numpad9: t2 = 45; break;
}
} else {
//t2 += 90;
}
// Simular botões direcionais
i = down;
if (t2 > 180 && t2 < 360) {
keyboard_key_press(akey[i]);
} else {
keyboard_key_release(akey[i]);
}
i = left;
if (t2 > 90 && t2 < 270) {
keyboard_key_press(akey[i]);
} else {
keyboard_key_release(akey[i]);
}
i = up;
if (t2 > 0 && t2 < 180) {
keyboard_key_press(akey[i]);
} else {
keyboard_key_release(akey[i]);
}
i = right;
if (t2 = 45 || t2 = 0 || t2 = 315) {
keyboard_key_press(akey[i]);
} else {
keyboard_key_release(akey[i]);
}
// Gatinhos
if (joystick_zpos(id) <= -0.5) {
keyboard_key_press(akey[rt]);
} else {
keyboard_key_release(akey[rt]);
}
if (joystick_zpos(id) >= 0.5) {
keyboard_key_press(akey[lt]);
} else {
keyboard_key_release(akey[lt]);
}
}
for (i = 0; i < key_n; i += 1) {
if gpad = 2 {
if i >= 4 && i <=13 {
if joystick_check_button(gpad_id,ajoy[i]) {
keyboard_key_press(akey[i]);
} else {
keyboard_key_release(akey[i]);
}
}
}
key[i] = (keyboard_check(akey[i]) && tkey);
pkey[i] = (keyboard_check_pressed(akey[i]) && tkey);
rkey[i] = (keyboard_check_released(akey[i]) && tkey);
if gpad = 1 {
key[i] = key[i] || (gamepad_button_check(gpad_id,ajoy[i]) && tkey);
pkey[i] = pkey[i] || (gamepad_button_check_pressed(gpad_id,ajoy[i]) && tkey);
rkey[i] = rkey[i] || (gamepad_button_check_released(gpad_id,ajoy[i]) && tkey);
}
}
- Código:
x += (key[right]-key[left]) * spd;
y += (key[down]-key[up]) * spd;
if pkey[start] {
pausar_game();
}
if rkey[bx] ataque_carregado();
Re: Como o GMS reconhece o controle do OUYA.
Show de bola, Kabeção!
Tentei montar um sistema por conta própria aqui, acabei caindo num bocado de bugs, voltei nesse tópico um monte de vezes, consegui fazer os 4 botões principais funcionar. Amanhã (se tiver tempo), faço o resto dos botões.
Tem Parece ter um erro na sua lógica. Por algum motivo, rkey está sempre retornando true, a menos que a tecla esteja sendo apertada. Deve ser o tal "tkey", que eu não vi ainda como faz...
Mas sem o "tkey", eu fiquei com a impressão que as teclas estão sendo soltas a cada step.
Resolvi da seguinte forma:
Nossa, é muito código. Depois eu termino de entender tudo (acho que consigo)... Boa noite!
Tentei montar um sistema por conta própria aqui, acabei caindo num bocado de bugs, voltei nesse tópico um monte de vezes, consegui fazer os 4 botões principais funcionar. Amanhã (se tiver tempo), faço o resto dos botões.
Mas sem o "tkey", eu fiquei com a impressão que as teclas estão sendo soltas a cada step.
Resolvi da seguinte forma:
- Código:
var i;
for (i := 0; i < 4; i += 1) {
if (gpad == 2) { // se é o joystick que está funcionando
if joystick_check_button(gpad_id, ajoy[i]) { // se o botão está apertado
keyboard_key_press(akey[i]); // faz a tecla estar apertada
}
else {
keyboard_key_release(akey[i]); // faz a tecla não estar apertada
}
}
key[i] := keyboard_check(akey[i]);
pkey[i] := key[i] && !prevkey[i] //keyboard_check_pressed(akey[i]); //
rkey[i] := !key[i] && prevkey[i]; //keyboard_check_released(akey[i]); //
if (gpad == 1) { // se é o gamepad que está funcionando
key[i] := gamepad_button_check(gpad_id, ajoy[i]) || key[i];
pkey[i] := gamepad_button_check_pressed(gpad_id, ajoy[i]) || pkey[i];
rkey[i] := gamepad_button_check_released(gpad_id, ajoy[i]) || rkey[i];
}
prevkey[i] := key[i];
}
- Código:
t2 := joystick_pov(gpad_id);
transforma := (360 + 90 - (t2)) mod 360;
Nossa, é muito código. Depois eu termino de entender tudo (acho que consigo)... Boa noite!
Última edição por saim em Sex 20 Set 2013, 14:16, editado 1 vez(es)
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Como o GMS reconhece o controle do OUYA.
@saim, se você quer apenas testar o jogo no Windows (e não publicar para ele), use o MotionJoy. Você gastará menos tempo nessa parte. O programa é leve.
http://www.baixaki.com.br/download/motioninjoy.htm
http://www.baixaki.com.br/download/motioninjoy.htm
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:
Re: Como o GMS reconhece o controle do OUYA.
Ah, PedroX, agradeço muito e até estou instalando o programa, aqui, pra ver se funciona com qualquer controle (no primeiro round, continuo mexendo com joystick, não gamepad, mas ainda vou tentar reiniciar a máquina, aprender a mexer direito nisso aqui), mas já que o Kabeção disponibilizou o script completo, aí, acho bacana ter uma forma universal de trabalhar. Daí, eu gravo os scripts e fica o suporte pra controles pelo resto da vida.
Claro que testar os controles de gamepad funcionando como gamepad é primordial, também.
Claro que testar os controles de gamepad funcionando como gamepad é primordial, também.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Como o GMS reconhece o controle do OUYA.
Endendi, então é assim que posso inverter o ângulo em 90 graus.
Pelo visto, keyboard_release ativa o rkey mesmo se a tecla não foi apertada antes.
Antigamente usava variáveis ou invés dessas funções então nem tinha percebido o problema.
Pelo visto, keyboard_release ativa o rkey mesmo se a tecla não foi apertada antes.
Antigamente usava variáveis ou invés dessas funções então nem tinha percebido o problema.
Re: Como o GMS reconhece o controle do OUYA.
Caramba... Agora me caiu a ficha! Desse jeito, eu vou conseguir fazer funcionar o joystick e não sei se o gamepad funciona do jeito certo!
PedroX, testei o motionjoy aqui, ele abre mas não roda. Acaba dando gpad = 2 e o motionjoy trava. Sei lá porque. Talvez seja isso:
Kabeção, seu código tem um pouco de erros de digitação. Fui personalizar, acabei alterando um monte de coisa. Eliminei a parte dos "Gatinhos" (suponho que fossem "gatilhos", mas não deu pra ter certeza, já explico porque).
É que ele muda o valor dos "triggers" (por isso acho que eram "gatilhos"), mas em função da posição de alguns eixos do analógico (por isso que eu não tenho certeza).
Como não vi sentido, como os triggers são botões como outros quaisquer, cortei fora.
Eu achava que o point of view era pro analógico. Do jeito que é, o switch até faz sentido (ah, eu mudei o cálculo de transformação, a equação estava errada - corrigi o post anterior, também).
Bom... Eu queria ver se alguém cujo controle é identificado como gamepad (gpad = 1, no exemplo) pudesse testar essa engine.
Eis aqui o link. A cor das bolinhas nos botões deve mudar ao apertar, manter apertado ou soltar algum deles. Como os eventos de apertar e soltar são muito rápidos, fiz uns alarmes; e pra ver a cor de soltar, tem que soltar o botão um tempinho depois de apertar (20 steps).
Ah, tem uma coisa que não está nos scripts: a posição das bolinhas dos direcionais deve variar de acordo com o que você mexer.
Se a engine funcionar toda como gamepad também, fico sossegado pra programar.
Valeu demais, moçada!
PedroX, testei o motionjoy aqui, ele abre mas não roda. Acaba dando gpad = 2 e o motionjoy trava. Sei lá porque. Talvez seja isso:
Meu controle é um... deixa eu procurar alguma indicação de marca aqui... um "bright games". Vou arrumar alguém com um controle de xbox ou ps3 sobrando.MotioninJoy drives your Playstation 3 controller (Sixaxis or Dualshock 3) on windows. By this way your Sixaxis or Dualshock 3 as a general game controller with motion sensor.
Kabeção, seu código tem um pouco de erros de digitação. Fui personalizar, acabei alterando um monte de coisa. Eliminei a parte dos "Gatinhos" (suponho que fossem "gatilhos", mas não deu pra ter certeza, já explico porque).
É que ele muda o valor dos "triggers" (por isso acho que eram "gatilhos"), mas em função da posição de alguns eixos do analógico (por isso que eu não tenho certeza).
Como não vi sentido, como os triggers são botões como outros quaisquer, cortei fora.
Eu achava que o point of view era pro analógico. Do jeito que é, o switch até faz sentido (ah, eu mudei o cálculo de transformação, a equação estava errada - corrigi o post anterior, também).
- Agora ficou assim:
- Pra identificar o controle, não mudei muito:
- Código:
// Detecta o joystick ou gamepad conectado (apenas 1) e armazena a sua id.
// Define a variável gpad como "0" se não houver joystick, como "1" se houver um gamepad e como "2" se houver um joystick
globalvar gpad, gpad_id;
gpad := gamepad_is_supported();
gpad_id := -1; // device id
if gpad { // se rola de usar gamepad
var gp_num := gamepad_get_device_count(); // quantidade de controles conectados
for (var i := 0; i < gp_num; i++;) { // de controle em controle
if gamepad_is_connected(i) { // se o tal está conectado
gpad_id := i; // pega a id do controle
gpad := true; // pra depois de 0, gpad VOLTA a ser true
break; // não voltar a ser false
}
else { // se não está conectado
gpad := false; // vira false (e fica false se nenhum estiver conectado)
}
}
}
if (!gpad && os_type := os_windows) { // se não tem nada conectado
if joystick_exists(1) { // se o joystick 1 existe
gpad = 2; // gpad não fica false (fica "2")
gpad_id = 1; // pega a id do controle
}
if joystick_exists(2) {
gpad = 2; // gpad não fica false (fica "2")
gpad_id = 2; // pega a id do controle
}
}
show_debug_message("gpad=" + string(gpad) + "; gpad_id=" + string(gpad_id));
- Código:
// nomes
globalvar bx, by, ba, bb, start, back, lb, ls, rb, rs, lt, rt, akey, ajoy, left, up, right, down, key_n, bot_n;
var i; i := 0;
// na ordem do joystick (mas no joystick, o primeiro botão é 1)
by := i; i += 1; // 0
bb := i; i += 1; // 1
ba := i; i += 1; // 2
bx := i; i += 1; // 3
lb := i; i += 1; // 4
rb := i; i += 1; // 5
lt := i; i += 1; // 6
rt := i; i += 1; // 7
start := i; i += 1; // 8
back := i; i += 1; // 9
ls := i; i += 1; // 10
rs := i; i += 1; // 11
bot_n := i; // número de botões (de apertar)
left := i; i += 1;
up := i; i += 1;
right := i; i += 1;
down := i; i += 1;
key_n := i; // número de teclas
// teclado
akey[up] := vk_up; //akey[up] := ord('W'); //
akey[down] := vk_down; // akey[down] := ord('S'); //
akey[left] := vk_left; // akey[left] := ord('A'); //
akey[right] := vk_right; // akey[right] := ord('D'); //
akey[start] := vk_enter;
akey[back] := vk_backspace;
akey[ba] := ord('A');
akey[bb] := ord('S');
akey[bx] := ord('Q');
akey[by] := ord('W');
akey[lb] := ord('E');
akey[lt] := ord('D');
akey[rb] := ord('R');
akey[rt] := ord('F');
akey[rs] := ord('T');
akey[ls] := ord('G');
// Gamepad
if (gpad == 1) {
ajoy[up] := gp_padu;
ajoy[down] := gp_padd;
ajoy[left] := gp_padl;
ajoy[right] := gp_padr;
ajoy[ba] := gp_face1;
ajoy[bb] := gp_face2;
ajoy[bx] := gp_face3;
ajoy[by] := gp_face4;
ajoy[start] := gp_start;
ajoy[back] := gp_select;
ajoy[lb] := gp_shoulderl;
ajoy[lt] := gp_shoulderlb;
ajoy[ls] := gp_stickl;
ajoy[rb] := gp_shoulderr;
ajoy[rt] := gp_shoulderrb;
ajoy[rs] := gp_stickr;
}
// Joystick
if (gpad == 2) {
// o valor certo para cada botão é totalmente instável
// de joystick para joystick então é praticamente obrigatório
// dar a opção de configurar os controles para o jogador
i := 1;
ajoy[by] := i; i += 1; // 1
ajoy[bb] := i; i += 1; // 2
ajoy[ba] := i; i += 1; // 3
ajoy[bx] := i; i += 1; // 4
ajoy[lb] := i; i += 1; // 5
ajoy[rb] := i; i += 1; // 6
ajoy[lt] := i; i += 1; // 7
ajoy[rt] := i; i += 1; // 8
ajoy[back] := i; i += 1; // 9
ajoy[start] := i; i += 1; // 10
ajoy[ls] := i; i += 1; // 11
ajoy[rs] := i; i += 1; // 12
}
globalvar key, pkey, rkey, prevkey;
for(i := 0; i < key_n; i++){
key[i] := false;
pkey[i] := false;
rkey[i] := false;
prevkey[i] := false;
}
- Código:
// gpad_step()
// Definir keys e combo
var i, t2;
if (gpad == 2) {
// Dpad
if (joystick_pov(gpad_id) != -1){
t2 := (360 + 90 - (joystick_pov(gpad_id))) mod 360;
}
else {
t2 := -1;
}
// Analogico simula botões direcionais
if (t2 == -1) {
switch (joystick_direction(gpad_id)) {
case vk_numpad1: t2 := 225; break;
case vk_numpad2: t2 := 270; break;
case vk_numpad3: t2 := 315; break;
case vk_numpad4: t2 := 180; break;
case vk_numpad5: t2 := -1; break;
case vk_numpad6: t2 := 0; break;
case vk_numpad7: t2 := 135; break;
case vk_numpad8: t2 := 90; break;
case vk_numpad9: t2 := 45; break;
}
}
// Simular botões direcionais
// down;
if (t2 > 180 && t2 < 360) {
keyboard_key_press(akey[down]);
} else {
keyboard_key_release(akey[down]);
}
// left;
if (t2 > 90 && t2 < 270) {
keyboard_key_press(akey[left]);
} else {
keyboard_key_release(akey[left]);
}
// up;
if (t2 > 0 && t2 < 180) {
keyboard_key_press(akey[up]);
} else {
keyboard_key_release(akey[up]);
}
// right;
if (t2 < 90 || t2 > 270 && t2 != -1) {
keyboard_key_press(akey[right]);
} else {
keyboard_key_release(akey[right]);
}
}
for (i := 0; i < key_n; i += 1) {
if (gpad == 2) {
if (i < bot_n) { // se é um botão "de apertar"
if joystick_check_button(gpad_id, ajoy[i]) {
keyboard_key_press(akey[i]);
} else {
keyboard_key_release(akey[i]);
}
}
}
key[i] := (keyboard_check(akey[i]));
pkey[i] := (key[i] && !prevkey[i]);
rkey[i] := (!key[i] && prevkey[i]);
if (gpad == 1) {
key[i] := key[i] || (gamepad_button_check(gpad_id, ajoy[i]));
pkey[i] := pkey[i] || (gamepad_button_check_pressed(gpad_id, ajoy[i]));
rkey[i] := rkey[i] || (gamepad_button_check_released(gpad_id, ajoy[i]));
// Analogico simula botões direcionais
key[up] := key[up] || (gamepad_axis_value(gpad_id, gp_axislv) <= -0.5;
key[down] := key[down] || (gamepad_axis_value(gpad_id, gp_axislv) >= 0.5;
key[left] := key[left] || (gamepad_axis_value(gpad_id, gp_axislh) <= -0.5;
key[right] := key[right] || (gamepad_axis_value(gpad_id, gp_axislh) >= 0.5;
}
prevkey[i] := key[i];
}
Bom... Eu queria ver se alguém cujo controle é identificado como gamepad (gpad = 1, no exemplo) pudesse testar essa engine.
Eis aqui o link. A cor das bolinhas nos botões deve mudar ao apertar, manter apertado ou soltar algum deles. Como os eventos de apertar e soltar são muito rápidos, fiz uns alarmes; e pra ver a cor de soltar, tem que soltar o botão um tempinho depois de apertar (20 steps).
Ah, tem uma coisa que não está nos scripts: a posição das bolinhas dos direcionais deve variar de acordo com o que você mexer.
Se a engine funcionar toda como gamepad também, fico sossegado pra programar.
Valeu demais, moçada!
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Tópicos semelhantes
» OUYA controle / keyboard
» tem como criar um jogo onde o controle e o joystick???
» Como cofigura um controle usb para ativar cada butão do teclado no jogo?
» Draw_Text - Não reconhece o parâmetro
» [Resolvido][Ajuda] Objeto não reconhece x de outro
» tem como criar um jogo onde o controle e o joystick???
» Como cofigura um controle usb para ativar cada butão do teclado no jogo?
» Draw_Text - Não reconhece o parâmetro
» [Resolvido][Ajuda] Objeto não reconhece x de outro
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos