Marzo 01, 2019, 06:17:05 AM Ultima modificación: Marzo 01, 2019, 10:32:09 AM por cristopher2545
Buenas a todos!

tengo un pequeño problema que no soy capas de resolver, os cuento:

quiero que el jugador apriete varias teclas al mismo tiempo para hacer una acción, que esta acción solo se cumpla si las 2 teclas se pulsaron a la vez por ejemplo

TECLA A + TECLA B = salto
TECLA A +TECLA B +TECLA C = sprintar

si alguien sabe como hacerlo o darme una idea seria genial!
de antemano gracias!  :)
Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!

Hola cristopher2545! Le podés aplicar álgebra booleana.

Lo que querés hacer es lo que haría la puerta lógica "AND". En álgebra booleana esto se expresa de esta forma:
Con dos valores:
A * B = B * A
O con tres valores
(A * B) *C = A * (B * C) = A * B * C

Aplicándolo a lo que querés hacer vos quedaría así:
[gml]//Las teclas las definís vos según tu necesidad
var tecla_a = keyboard_check(tecla);
var tecla_b = keyboard_check(tecla);
var tecla_c = keyboard_check(tecla);

//Primer caso (TECLA A + TECLA B = salto)
if (tecla_a * tecla_b){
    //Ejecutar un script de salto
    salto();
}

//Segundo caso (TECLA A + TECLA B + TECLA C = sprintar)
if (tecla_a * tecla_b * tecla_c){
    //Ejecutar un script de sprint
    sprint();
}
[/gml]

Lo que sucede es que, al presionar las teclas, las variables se actualizan a 1. Y al soltar, a 0.
Suponé que estás presionando las teclas "a" y "b":
[gml]if (tecla_a * tecla_b *tecla_c) {...}
//Es igual que:
if (1 * 1 * 0) {...} //1 * 1 * 0 = 0, que es false
[/gml]
Se tiene que presionar las 3 teclas al mismo tiempo para que ese evento se ejecute.

Te recomiendo que leas información sobre álgebra booleana. Este tema aplicado a la programación es muy útil.

Cita de: Hezz en Marzo 01, 2019, 06:58:01 AM
Hola cristopher2545! Le podés aplicar álgebra booleana.

Lo que querés hacer es lo que haría la puerta lógica "AND". En álgebra booleana esto se expresa de esta forma:
Con dos valores:
A * B = B * A
O con tres valores
(A * B) *C = A * (B * C) = A * B * C

Aplicándolo a lo que querés hacer vos quedaría así:
[gml]//Las teclas las definís vos según tu necesidad
var tecla_a = keyboard_check(tecla);
var tecla_b = keyboard_check(tecla);
var tecla_c = keyboard_check(tecla);

//Primer caso (TECLA A + TECLA B = salto)
if (tecla_a * tecla_b){
    //Ejecutar un script de salto
    salto();
}

//Segundo caso (TECLA A + TECLA B + TECLA C = sprintar)
if (tecla_a * tecla_b * tecla_c){
    //Ejecutar un script de sprint
    sprint();
}
[/gml]

Lo que sucede es que, al presionar las teclas, las variables se actualizan a 1. Y al soltar, a 0.
Suponé que estás presionando las teclas "a" y "b":
[gml]if (tecla_a * tecla_b *tecla_c) {...}
//Es igual que:
if (1 * 1 * 0) {...} //1 * 1 * 0 = 0, que es false
[/gml]
Se tiene que presionar las 3 teclas al mismo tiempo para que ese evento se ejecute.

Te recomiendo que leas información sobre álgebra booleana. Este tema aplicado a la programación es muy útil.

venga ya de haber sabido colega <3 creo debo darle una desempolvada  al libro de matemáticas para no estar batallando
te agradezco la respuesta <3
Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!