2017-09-20 2 views
0

저는 프로그래밍에 익숙하지 않고 작은 게임을 만들기로 마음 먹었습니다. 지금까지 모든 4 방향 (왼쪽, 오른쪽, 위, 아래)으로 이동할 수있는 작은 블록 만 만들었습니다. . 아주 단순하고 특별한 것이 없습니다. 그러나 프로그램을 실행할 때 충돌이 발생하여 프로그램 자체가 중단되는 경우가 아니라 작업이 중단 될 수 있지만 프로그램이 종료됩니다.내 프로그램이 작동을 멈춘 것처럼 보입니다.

테스트가 진행되는 동안 W와 S와 같은 두 개의 키를 동시에 누르면이 문제가 발생한다고 생각합니다. 어떤 일이 멈추는 원인인지 아는 사람이 있습니까?

void setup(){ 
    size(1080,720); 
    frameRate(30); 
} 
int shipLR = 0; //Variable for the ship to go left/right 
int shipUD = 0; //Variable for the ship to go up/down 


void draw(){ 
    background(0); 
    shipLR = constrain(shipLR, 0, 1040); //Constrain the ship in the window 
    shipUD = constrain(shipUD,0,680); // Constrain the ship in the window 
    move(); 
    Shuttle(); 
} 

void Shuttle(){ 
    rect(shipLR, shipUD, 40,40); //Draw the ship 
} 

void move(){ 
    if (keyPressed) { 
    if (key == 'a') { 
     shipLR = shipLR - 20; // Go left 
     return;} 
    if (key == 'd') { 
     shipLR = shipLR + 20; // Go right 
     return;} 
    if (key == 'w'){ 
     shipUD = shipUD - 20; // Go up 
     return;} 
    if (key == 's') { 
     shipUD = shipUD + 20; // Go down 
     return;} 
    } 
} 

어떤 도움

크게 이해할 수있을 것이다.

편집 :이 문제가 더 자주 발생하도록하는 것을 발견했습니다. 60보다 낮은 값의 frameRate (현재 30을 시도 중)를 구현하면 더 자주 발생합니다.

편집 2 : 블록 하나에 내 이동 기능을 만들기위한 제안 사항은 다음과 같이 좋은 영향을 많이주었습니다. 이 프로그램은 더 이상 멈추지 않는 창 가운데에서 배를 움직일 때 더 이상 멈추지 않습니다. 드물게 창 테두리에 너무 자주 충돌 할 때만 작동합니다. 아마도 그것은 제약과 관련이 있습니까?

+1

이것은 전체 프로그램이 아니므로 더 게시 할 수 있습니까? 그것은 틀림없이 보지 않습니다. –

+0

하지만 전체 프로그램입니다. 그리고 내가 볼 수있는 한, 나는 틀린 것도 보지 못합니다. – Bruus

+0

수 없습니다. 최소한 메인이 있어야합니다. 그렇지 않으면 작동하지 않습니다. –

답변

0

move() (java 이름 지정 규칙은 메소드 이름이 소문자로 시작한다고 지정 함) 발견 된 첫 번째 키를 종료해야합니다. 코드는 여러 개의 동일한 조건을 줄이기 위해 다시 구성 할 수 있습니다 :

void move(){ 
    if (keyPressed) { 
    if (key == 'a') { 
     shipLR = shipLR - 20; // Go left 
     return; 
    } 

    if (key == 'd') { // still inside if keyPressed 
     shipLR = shipLR + 20; // Go right 
     return; 
    } 

    if (key == 'w') { 
     ... 
    } 
    } // end of if keyPressed 
} 
+0

응답 해 주셔서 감사 드리며 내가 제안한대로 이동 기능을 편집하여 대폭 개선되었지만 잠시 후 프로그램이 계속 작동하지 않습니다. – Bruus

0

프로그램이 "작동이 중지"또는 그것은 당신의 사각형이 움직이지 단지의 최종하지 않음을 추측 내. 모든 키를 놓아 둔 다음 하나의 키만 누르면 사각형이 다시 움직이기 시작합니다. (장래에 "작동이 멈춘다"는 말은별로 도움이되지 않는다.)

어쨌든, 이는 키 누름을 다루는 방식 때문입니다. 확인중인 열쇠가 아닌 다른 열쇠를 누르면 어떻게됩니까?

move() 함수를 입력하면 if(keyPressed) 블록을 입력하지만 해당 블록 안에 다른 if 문이 있으면 입력하지 않습니다. key 변수에는 가장 최근에 누른 키만 있습니다.

은 당신이 원하는 무엇에 따라 키가 유효 경우에만 변화 방향으로 그 if 문을 리팩토링해야 하나, 다른 모든 키 입력을 무시. 또는 boolean 변수 세트를 사용하여 동시에 여러 키를 추적 할 수 있습니다. 이 방법에 대한 자세한 내용은 here을 참조하십시오.

여전히 작동하지 않는 경우 정확히 어떤 일이 발생했는지 자세히 알려주십시오.

관련 문제