2012-10-03 4 views
2

저는 Java로 게임을 만들려고하고 있습니다. 이미 뭔가가 있습니다. 하지만 플레이어가 총알을 쏘게하고 싶습니다. 개체 배열을 만들고 모든 Bullet 인스턴스를 배열에 넣을 생각을했습니다. 스레드에서, 나는 그것들을 모두 움직이게하고 싶다 (배열의 모든 객체).Java - 게임 : 여러 인스턴스

이것은 내가 메인 클래스에 넣어 것입니다 :

Bullet[] BulletArray; 

public int Bullets = 0; 

public void run() { 

    for(int i = 0; i < Bullets; i++){ 
     BulletArray[i].Step(); 
    } 

    if(Key.FireKey){ 
     BulletArray[Bullets + 1] = new Bullet(); 
     Bullets += 1; 
    } 
} 

난 그냥 실행 기능은 원래의 코드에서 잘 실행되는 기본적인 것들, 즉를 포함 시켰습니다. 코드가 작동하지 않아 Fire를 누르면 오류가 발생합니다. 오류가 어딘가에 있습니다

BulletArray[Bullets + 1] = new Bullet(); 

내가 무슨 뜻인지 이해하시기 바랍니다.

+4

죄송합니다 ... 무엇이 문제입니까? – manub

+0

뭐가 문제입니까? 아니면 당신이 게임을하고 있다는 것을 알려주고 싶습니까? 그리고 FYI. 소문자 알파벳 또는 밑줄로 시작하는 변수를 선언하거나 추가해야합니다. –

+1

변수 이름을 작은 대문자로 시작하는 Java 명명 규칙을 적용해야합니다. BulletArray, Bullets => bullet 등 – assylias

답변

2

글쎄, 처음에는 BulletArray이 초기화되지 않았습니다.

run()을 입력하면 for() 루프가 실제로 블록을 입력하지 않기 때문에 제대로 작동하는 것처럼 보입니다. int i = 0이 신고되었으며 이미 귀하의 한도 인 int Bullet = 0 이상입니다. 이것은 루프 본문이 결코 실행되지 않는다는 것을 의미합니다.

그런 다음 Key.FireKey 키를 누르면 존재하지 않는 배열 인덱스를 참조하려고 시도합니다. 배열이 초기화 된 적이 없기 때문에 존재할 수 없습니다.

이 배열을 초기화하려면이 같은 더 많은 일을해야합니다
private int maxBullets = 10; 
Bullet[] bulletArray = new Bullet[maxBullets]; 

이 그런 다음 for() 루프가 실제로 들어갑니다. 그러나 Key.FireKey 블록에서 작성한 것보다 더 많은 총알을 발사하여 IndexOutOfBoundsException을 얻지 못하도록하려면 몇 가지 검사를 수행해야합니다. 즉

if(Key.FireKey) { 
    if(bullets < maxBullets) { 
     bulletArray[++bullets] = new Bullet(); 
    } 
} 
+0

덕분에, 나는 자바에 아주 익숙하다. 그리고 확실히 배열을 다루는 방법. 나는 그 질문이 다소 어리 석다는 것을 알고 있지만, 고마워! – DemoDreams

+1

그것은 바보 같은 질문이 아닙니다. :) 모두는 어딘가에서 시작해야합니다. – asteri