2013-03-01 3 views
2

안녕하세요. 총알 개체가 배열되어 있습니다. 글 머리 기호 개체 isAlive가 false로 설정되어 있습니다. 스페이스 버튼 (글 머리 기호 실행)을 클릭하지 않고 코드를 실행하고 배열 객체 인 isAlive var를 인쇄하면 모두 false로 인쇄됩니다.배열 요소가 올바르게 설정되지 않았습니다.

글 머리 기호가 화면에 나타나고 올바르게 이동하면 isAlive 변수를 나타내는 글 머리 기호 배열을 인쇄 할 때 모두 동일한 x/y 위치로 true로 설정됩니다.이 공간을 클릭하면 버튼을 두 번 두 번 탄환이 나타나고 정상적으로 움직이지만 배열을 인쇄하면 같은 x/y 위치 (화면의 첫 번째 글 머리 기호)와 함께 처음 10 개의 요소가 표시되고 다음 10 개는 동일한 x/y 위치 (화면의 두 번째 글 머리 기호)

더 이상 스페이스 바를 누르면 새 글 머리 기호가 추가되지 않습니다. 여기 가 여기에

public void fireBullet(){ 
    if(currentBullet > BULLETS -1){ 
     currentBullet = 0; 
    } 
    if(bullet[currentBullet].isAlive()==false){ 
     bullet[currentBullet].setAlive(true); 
     bullet[currentBullet].setxPos(ship.getxPos()); 
     bullet[currentBullet].setyPos(ship.getyPos()); 
    } 
    currentBullet ++; 
} 

과 fireButton()에 대한의 코드는 그것 KeyPressedMethod에 불렸다의

case KeyEvent.VK_SPACE: 
     fireBullet(); 
     break; 
내가 잘못거야 어디

사람이 볼 수있는 존재가 코드와 함께 장난? 그리고 지금 내 머리를하고있는 동안 :

편집 : 나는 여기에 할 수있는 모든 질문에 대답 할게 :) 1) currentBullet은 개인 클래스 멤버이며 처음에는 0으로 초기화되고 각 b에 대해 fireBullet() 메서드에서 증가됩니다. ullet 거짓

3)로 가능한지 20까지 소성 한 다음 세트 I 총알 배열 iniatilise 때마다 element.Each 탄환 생성자 새로운 총알()을 할당) 0

2 리셋 이 화면 4) 여기를 떠날 때 총알 var에으로 isAlive이 전체

public void keyPressed(KeyEvent k) { 
    int keyCode = k.getKeyCode(); 

    switch (keyCode) { 

    case KeyEvent.VK_A: 
     //move ship left 
     if(ship.getxPos()<20){ 
      ship.setxPos(20); 
     }else 
     ship.setxPos(ship.getxPos()-1); 
     break; 
    case KeyEvent.VK_D: 
     if(ship.getxPos()>1260){ 
      ship.setxPos(1260); 
     }else 
     ship.setxPos(ship.getxPos()+1); 
     break; 
    case KeyEvent.VK_SPACE: 
     fireBullet(); 
     break; 
    } 


}//end keypressed event 

에 keypressed를 방법을 false로 다시 설정 나는 그것이 총알을 그리기하지만 위에 그 중 10 스무을 받고있다으로 렌더링이 괜찮 생각 서로의 코드가 실행될 때 두 개의 글 머리가 화면 위쪽으로 움직이는 것을 볼 수 있습니다.

문제는 스페이스 바 프레스 당 하나의 살아있는 총알이 있어야하지만 20 개의 총알이 살아남 으면 눌러야한다는 것입니다.

두 번째 편집 : 현재 루프가 끝날 때 총알을 인쇄하고 올바르게 증가하는 것처럼 보입니다. 이는 모든 스페이스 바를 눌러 fireBullet() 메서드가 호출되고 있음을 나타냅니다. 모든 언론

+1

'keyPressed' 메쏘드의 전체를 보여줄 수 있습니까? – NPE

+1

또한,'fireBullet()'의 시작 부분에 메시지를 출력하고, 스페이스 바를 누를 때마다 메소드가 정확히 한번 호출되는지를보십시오. – NPE

+0

및 currentBullet을 어떻게 설정합니까? –

답변

0

NPE가 위에서 제안한 것과 마찬가지로 fireBullet() 및 다른 2 개의 키 프레스에 작은 println을 넣었습니다. 코드가 수집되면 공간을 뚫고있는 동안 일어난 일이 무엇입니까? '히트'의 업로드. 내가 페인트 메쏘드에 addKeyListener (this)를 가지고 있고 JFrame 생성자가 아니라는 것을 알게되었다. 솔직히 페인트 메쏘드에 어떻게 넣었는지 모른다. :)

관련 문제