Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите "зациклить" JPanel, перезапуск панели после проигрыша 
:(
    Опции темы
TBR
Дата 29.5.2013, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.5.2013

Репутация: нет
Всего: нет



Доброго времени суток!

Возникла потребность "зацикливания" JPanel. 

Есть код, в котором при сталкивании с "врагом", вылезает сообщение: " Вы проиграли", и по задумке автора в этот момент игра прекращается. Можно ли устроить как-то, чтобы вместо этого после сообщения игра возобновлялась с начала?

Код панели: 
Код

public class Road extends JPanel implements ActionListener, Runnable{
    
    boolean chek=false;
    boolean chek1=false;
    
    Timer mainTimer = new Timer(20, this);
    
    Image img = new ImageIcon(getClass().getClassLoader().getResource("res/Road.png")).getImage();
    
    Player p = new Player();
    
    Thread enemiesFactory = new Thread(this);
    
    Thread audioThread = new Thread(new AudioThread());
    
    List<Enemy> enemies = new ArrayList<Enemy>();
    
    public Road(){
  mainTimer.start();
  enemiesFactory.start();
  audioThread.start();
  addKeyListener(new MyKeyAdapter());
  setFocusable(true);
    }
    
    private class MyKeyAdapter extends KeyAdapter{
  public void keyPressed (KeyEvent e){
    p.keyPressed(e);
  }
  
  public void keyReleased (KeyEvent e){
    p.keyReleased(e);
  }
    }
    
    public void paint(Graphics g){
  g = (Graphics2D) g;
  g.drawImage(img,p.layer1, 0, null);
  g.drawImage(img,p.layer2, 0, null);
  g.drawImage(p.img, p.x, p.y, null);
  
  double v = (200/Player.MAX_V)*p.v;
  g.setColor(Color.WHITE);
  Font font = new Font("Arial", Font.ITALIC, 20);
  g.setFont(font);
  g.drawString("Скорость: "+v+"км/ч", 100, 30);
  
  Iterator<Enemy> i = enemies.iterator();
  while (i.hasNext()){
    Enemy e = i.next();
    if (e.x >= 2400 || e.x <=-2400){
    i.remove();
    } else {
    e.move();
    g.drawImage(e.img,e.x, e.y, null);
    }
    
  }
    }

    public void actionPerformed(ActionEvent e){
  p.move();
  repaint();
  testCollisionWithEnemies();
  testWin();
    }
    
    private void testWin(){
  if (p.s>20000){
    JOptionPane.showMessageDialog(null, "Вы выиграли");
    p.s=0;
    chek1=true;
    System.exit(0);
  }
    }
    
    private void testCollisionWithEnemies(){
  
  Iterator<Enemy> i = enemies.iterator();
  while (i.hasNext()){
    Enemy e = i.next();
    if (p.getRect().intersects(e.getRect())){
    JOptionPane.showMessageDialog(null, "Вы проиграли!!!");
    chek=true;
    System.exit(1);
    }    
  }
    }

    @Override
    public void run() {
  while (chek==false){
    Random rand = new Random();
    try {
    Thread.sleep(rand.nextInt(2000));
    enemies.add(new Enemy(1200, rand.nextInt(600), rand.nextInt(60), this));
    }
  catch (InterruptedException e){
    e.printStackTrace();
  }
    }
  
    }    
}



Панель вызывается  из мейна: 
Код

public class Main {

    /**
  * @param args
  */
    public static void main(String[] args) {
  // TODO Auto-generated method stub
  JFrame f = new JFrame("Путешествие по солнечной системе");
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setSize(800, 600);
  f.add(new Road());
  f.setVisible(true);

    }

}


Пробовала сделать run() в классе Main и в нем через while. Панель при этом прорисовывается снова, но вот обработка нажатия кнопок перестает работать.

Заранее спасибо за помощь!

Это сообщение отредактировал(а) TBR - 29.5.2013, 17:09
PM MAIL   Вверх
dorogoyIV
Дата 1.6.2013, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(TBR @  29.5.2013,  16:56 Найти цитируемый пост)
Доброго времени суток!

и вам не хворать! ;)

Цитата(TBR @  29.5.2013,  16:56 Найти цитируемый пост)
Можно ли устроить как-то, чтобы вместо этого после сообщения игра возобновлялась с начала?

конечно можно!

вот если бы ты выложила запускаемый код, да еще картинки там присутствуют, уже давно бы сделали.
а так, никто не знает, что, за классы Player, Enemy...

Цитата(TBR @  29.5.2013,  16:56 Найти цитируемый пост)
Пробовала сделать run() в классе Main и в нем через while. Панель при этом прорисовывается снова, но вот обработка нажатия кнопок перестает работать.

её поток был запущен, и он одноразовый (как презерватив ;) ).

нужно удалять панель "роад", и делать новую панель.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.