0

我一直在做一个 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。

4

1 回答 1

1

不要那样做。1)update确实不是全局函数,你得到的只有Processing 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();
}
于 2013-03-16T02:19:34.210 回答