2013-03-01 2 views
2

Привет У меня есть массив объектов пули. У меня есть объекты bullet isAlive var, установленный в false. Если я запустил код, не нажимая кнопку пробела (который запускает пулю) и распечатывает объекты массива isAlive var, и он печатает их все ложные (как следует).Элементы массива не установлены правильно

Если я нажимаю кнопку пробела, когда пуля появляется на экране и движется правильно, но когда я распечатываю массив пули, показывающий isAlive var, все они имеют значение true с одинаковыми положениями x/y. Если я нажму пробел дважды два пули появляются и ходят нормально, но снова, когда я печатаю массив, он показывает первые десять элементов как живых, с одинаковыми положениями x/y (первая пуля на экране), а следующая десятка также жива с тем же x/y (2-я пуля на экране)

больше никаких нажатий на пробел не добавляет новых пуль. здесь, 's код для fireButton()

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 ++; 
} 

и здесь были его называли в KeyPressedMethod

case KeyEvent.VK_SPACE: 
     fireBullet(); 
     break; 

кто может видеть, где я буду неправильно Being баловаться с кодом для? через некоторое время теперь и в моей голове :)

EDIT: Я отвечу на все вопросы, если могу здесь :) 1) currentBullet является частным членом класса и сначала инициализируется 0, а затем приращение в методе fireBullet() для каждого b Ullet произвели до 20 и затем сбрасываются в 0.

2), когда я iniatilise массива пули я назначить новые Пули() для каждой пулю конструктора element.Each устанавливает IsAlive ложных

; 3) пуля вар IsAlive снова устанавливается в ложь, когда он выходит из экрана 4) вот Keypressed метод в полной

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 

Я думаю, что рендеринг в порядке, как это рисунок пули, но рисунок 10 или двадцать из них на вершине друг от друга, поэтому, когда код запускается, вы видите только две пули, движущиеся вверх по экрану,

Проблема заключается в том, что в каждом пробеле должна быть только 1 живая пуля, но нажимая ее, когда все 20 пуль установлены в живую!

2nd EDIT: Я печатаю текущую пулю в конце игрового цикла и, похоже, правильно увеличивает, что указывает на то, что метод fireBullet() вызывается на каждом пробеле, просто кажется, что заполняет массив живыми пулями для каждое пресвещение

+1

Не могли бы вы показать нам свой метод 'keyPressed' в целом? – NPE

+1

Также попробуйте распечатать сообщение в начале 'fireBullet()' и посмотреть, будет ли метод вызываться ровно один раз при каждом нажатии пробела. – NPE

+0

и как вы устанавливаете currentBullet? –

ответ

0

Спасибо всем, что он работает! Как и предложенный выше NPE, я помещал небольшой шрифт в методе fireBullet(), а также в других двух нажатиях клавиш. Что происходит, когда я ударил пространство, когда код собирался загрузок «хитов». Оказалось, что у меня был addKeyListener (это) в моем методе рисования, а не в конструкторе JFrame, честно говоря, не знаю, как его поместили в метод рисования :)

Смежные вопросы