如何在Processing.js中的update()中监听键盘输入

How to listen for keyboard input in update() in Processing.js

本文关键字:监听 键盘 输入 update Processing js 中的      更新时间:2023-09-26

我一直在做一个processing.js演示,其中物体围绕一个中心点运行。我正试图为输入添加一个侦听器,该侦听器检查每次更新是否按下了s键,如果按下了,则调用一个方法以按指定因子减少每个物体轨道的大小。

示例在jsfiddle上。

实际上,我在update()方法中放置了代码来侦听按键:

 void update()
    {
        //detect input
        if(keyPressed)
        {
            debugger; //debug
            if(key == 's' || key == 'S')
            {
                //shrink orbit
                ShrinkOrbit(planets,.9);
            }
        }    
    }

调用ShrinkOrbit(ArrayList <OrbitingBody> orbs, float reductionFactor)方法:

/*
* Reduces size of orbit for specified group of orbiting bodies
*/
void ShrinkOrbit(ArrayList<OrbitalBody> orbs, float reductionFactor)
{   
    for(OrbitalBody b:orbs)
    {
        b.x *= reductionFactor;
        b.y *= reductionFactor
    }
}

然而,目前不仅调试断点不触发,但我看到一些错误突然出现在chrome开发人员工具:

Uncaught SyntaxError: Unexpected reserved word 
Uncaught TypeError: Cannot read property 'reason' of null Actions.js:333
(anonymous function) Actions.js:333
(anonymous function) moo-clientcide-1.3.js:212
Array.implement.each moo-clientcide-1.3.js:329
(anonymous function) moo-clientcide-1.3.js:212
Class.JSLintValidate Actions.js:330
wrapper.extend.$owner moo-clientcide-1.3.js:3798
Class.jsLint Actions.js:277
wrapper.extend.$owner moo-clientcide-1.3.js:3798
(anonymous function) moo-clientcide-1.3.js:1027
defn

我是否错误地假设update()是一个全局方法,相当于setup,可以在任何草图中调用?我曾在另一个功能正常的jsFiddle中看到过这样的用法,这也是我得出结论的地方。如果有任何帮助,我的目标是Processing.js 1.4.1。

不要那样做。1)更新确实不是一个全局函数,你唯一得到的是处理API函数,两个主要调用是setup(),在开始时调用一次,和draw(),调用每一帧(除非你发出noLoop(),然后它只在你手动调用redraw()时运行),和2)使用事件处理程序,这就是它们的作用=)

boolean reduce = false;
void keyPressed() {
  if(str(key).equals("s")) reduce = true;
}
void keyReleased() {
  if(str(key).equals("s")) reduce = false;
}
void draw() {
  if(reduce) { doWhateverYouNeedToDo(); }
  drawStuff();
}