Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

138
Visualizações
¿keyIsDown se está ejecutando cuando la tecla no está abajo?

Estoy trabajando en un controlador básico de cámara en primera persona en p5.JS, y estoy usando la función de movimiento dentro de una instrucción if (usa keyIsDown ) y todavía mueve la cámara cuando no se presiona la tecla (quiero decir como está abajo por un segundo y luego ya no se presiona).

También intenté usar while () pero eso lo bloquea.

 let d; let cam; let x, y, z; let img; let floor_texture; //place holder image floor_texture = 'https://miro.medium.com/max/1400/1*WI5Zw1eKEKNmRX3zreeUHw.png'; function preload() { img = loadImage(floor_texture); } function setup() { createCanvas(windowWidth, windowHeight, WEBGL); x = 0; y = 0; z = 0; cam = createCamera(); } function draw() { d = dist background(255); cam.pan(-movedX * 0.005); cam.tilt(movedY * 0.005); fill('white'); sphere(25); fill('red'); texture(img); translate(0, 350, 0) box(5000, 500, 5000) if (keyIsPressed && keyCode === 69) { requestPointerLock(); } cam.move(x, y, z); if (keyIsDown(87)) { z -= 0.1; } }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js"></script>

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Es porque no establece una nueva z cada vez keyIsDown(87) , sino que cam.move con z como argumento.

Entonces algo como:

 z = 0; cam.move(x,y,z); //here z = 0, so it doesn't move. z -= 0.1; cam.move(x,y,z); //here z = -0.1, so it moves, even if keyIsDown isn't true anymore.

Cada vez keyIsDown(87) es true , solo aumenta la velocidad a la que move la cam .

Si desea establecer la posición z de esa manera, tendrá que encontrar una manera de establecer la posición de la cámara, en lugar de moverla.

O podrías hacer algo como:

 draw() { ... if (keyIsDown(87)) { dz = -0.1; } else { dz = 0; } cam.move(dx,dy,dz) ... }
about 4 years ago · Juan Pablo Isaza Relatório

0

Un nombre más preciso para x , y y z sería velocityX , velocityY y velocityZ . Esto se debe a que está agregando -0.1 a z cada cuadro si se presiona un botón. Luego se agrega z a la posición de la cámara. Entonces, en este caso, deberíamos restablecer z a 0 después de mover la cámara.

 if (keyIsDown(87)) { z -= 0.1; } cam.move(x, y, z); z = 0;
about 4 years ago · Juan Pablo Isaza Relatório

0

En este caso, está restando de z (su velocidad) en cada tic mientras se presiona la tecla 87 ( W ).

Actualmente, este valor nunca se restablece cuando suelta la tecla.

Si desea que el usuario tenga una velocidad constante mientras mantiene presionada la tecla, pase un valor constante cuando se presione la tecla (y 0 en caso contrario) en lugar de z cuando llame a cam.move .

Si desea que el usuario acelere cuando mantiene presionada la tecla (como lo hace actualmente), deberá agregar una forma de devolverlo a una velocidad z de 0 cuando no se presiona la tecla.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda