Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 50
1

Игра Пинг Понг, управляется только одна ракетка

09.12.2017, 16:30. Показов 1721. Ответов 1

Author24 — интернет-сервис помощи студентам
Добрый день. Делаю для университета игру Пинг Понг (управление ракетками с клавиатуры), начал с ракеток (использую JButton, чтобы не париться пока с геометрией и рисованием) и наткнулся на проблему. Когда я добавляю на JPanel две ракетки, реагирует на нажатие кнопок только первая. Добавить сначала другую, работать будет она.
Возможно нужны разные потоки или передача фокуса, но я пробовал и то и другое, но пока не помогло

Панель
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import javax.swing.JPanel;
 
public class DrawFrame extends JPanel {
    
    public DrawFrame(int DEF_Width,int DEF_Height){
        this.setBounds(0, 0, DEF_Width, DEF_Height);
        
        Racket racket1=new Racket(20,20, this.getWidth(), this.getHeight());
        this.add(racket1.b);
        Racket racket2=new Racket(this.getWidth()-20,20, this.getWidth(), this.getHeight());
        this.add(racket2.b);
        
    }
}
Ракетки
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.awt.Color;
import javax.swing.JButton;
 
 
public class Racket {
 
    public JButton b = new JButton();
    public int x;
    public int y;
    public final int width = 10;
    public final int height = 50;
    public int panel_width;
    public int panel_height;
 
    public Racket(int x0, int y0, int panel_width, int panel_height) {
        this.panel_width = panel_width;
        this.panel_height = panel_height;
 
        this.x = x0;
        this.y = y0;
 
        this.b.setBounds(this.x, this.y, this.width, this.height);
        this.b.setBackground(Color.BLACK);
        this.b.repaint();
        this.b.addKeyListener(new KL(this));
 
    }
 
    
    public void moveUP() {
            if (this.y > 10) {
                b.setBounds(this.x, this.y -= 10, this.width, this.height);
                b.repaint();
            }
    }
 
    public void moveDOWN() {
            if (this.y < this.panel_height - this.height * 2 + 10) {
                b.setBounds(this.x, y += 10, width, height);
                b.repaint();
            }
        
 
    }
Клавиатура
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
 
 
public class KL implements KeyListener {
 
    Racket current_racket;
    public KL(Racket r) {
        this.current_racket=r;
    }
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    public void keyPressed(KeyEvent e) {
 
            if (e.getKeyCode() == KeyEvent.VK_W && this.current_racket.x<this.current_racket.panel_width/2) {
                
                this.current_racket.moveUP();
            }
            if (e.getKeyCode() == KeyEvent.VK_S && this.current_racket.x<this.current_racket.panel_width/2) {
                
                this.current_racket.moveDOWN();
            }
 
            if (e.getKeyCode() == KeyEvent.VK_NUMPAD8 && this.current_racket.x>this.current_racket.panel_width/3) {
                
                this.current_racket.moveUP();
            }
            if (e.getKeyCode() == KeyEvent.VK_NUMPAD2 && this.current_racket.x>this.current_racket.panel_width/3) {
                
                this.current_racket.moveDOWN();
            }
        
    }
 
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
 
    }
 
}
Помогите, пожалуйста, разобраться, что и как нужно сделать, чтобы работали обе. (потоки/фокус?)

////////////////////////
UPD: Если мышкой нажать на вторую кнопку она тоже заработает, выходит дело в фокусе? можно управлять обеими, но приходится перед этим нажимать на нужную
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2017, 16:30
Ответы с готовыми решениями:

Игра пинг-понг
Помогите пожалуйста с игрой, нужно пофиксить блок, которым мы управляем с мыши, чтобы он не уходил...

Игра пинг-понг
Ребят, нужна помощь делаю игру на Делфи, но мы этот язык не изучали еще, и поэтому возникают...

Игра пинг понг
Написал по видео урокам игру пинг понг, но игроку невозможно выиграть компьютер, подскажите что...

Игра пинг-понг
Ребят, помогите пожалуйста описать каждую строку в программе или хотя бы основные строки буду...

1
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
11.12.2017, 00:16 2
задайте обработку событий нажатий клавиш не ракеткам а скажем вашему JFrame
0
11.12.2017, 00:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2017, 00:16
Помогаю со студенческими работами здесь

Игра пинг-понг в Tkinter. Ошибка с отскакиванием объекта
Привет. Начал изучать python и появилось желание написать игру, пишу по гайду, но с небольшими...

Игра пинг-понг: отрисовка происходит там, где не должна
Написал отрисовку кадра в консоль и управление объектами. Начал тестировать многопоточность и в...

Начало проекта "Игра пинг понг"
Помогите сделать игру пинг понг, я видел там где-то и стало интересно.Объясните хотя бы принцип...

Пинг-понг
ребята Help please1 Надо сделать пинг-понг, вроде все более-менее вот тока отбивание от реек чере...

Пинг-понг
Приветствую. Как сделать так, чтобы шарик нормально рисовался и красная платформа при движении в...

Пинг Понг в C#
Кто знает как сделать пинг понг в C#


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru