2013-03-15 2 views
0

나는 시체가 중심점을 돌고있는 processing.js 데모에서 작업 해왔다. 나는 각각의 업데이트가 s 키가 눌려 졌는지 체크하는 입력을위한 리스너를 추가하려고 시도하고 있으며, 그렇다면 지정된 요소만큼 각 바디의 궤도 크기를 줄이는 메소드를 호출합니다.Processing.js의 update()에서 키보드 입력을 듣는 방법

예는 jsfiddle에서 here입니다.

는 기본적으로 나는 키 입력을 수신하도록 업데이트() 메소드에 코드를 배치 한 :

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

하지 마세요. 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(); 
}