我在左边的jpanel窗口中运行我的游戏进行乒乓球比赛。我在右侧添加了另一个jpanel窗口,以便用户可以重置游戏并决定获胜所需的点数。
无论如何,当我与左侧面板上的按钮(非游戏面板)进行交互时,我无法再次选择我的游戏屏幕而我的游戏停止响应。我正在使用netbeans而且我是初学者,所以任何帮助都表示赞赏!
这是问题的图片,然后用键盘控制游戏。当我按下按钮时,它会继续运行但不再响应键盘。 我还添加了一些代码。
public class LeikGluggi extends javax.swing.JPanel implements ActionListener, KeyListener {
int HRADISPADA = 10;
Spilari1 spilari1;
Spilari2 spilari2;
Bolti bolti;
public static int stadaLeiks = 0; //0 = stop, 1 = pása, 2 = spila
public LeikGluggi() {
initComponents();
spilari1 = new Spilari1();
spilari2 = new Spilari2();
bolti = new Bolti();
setSize(Leikbord.GLUGGI_BREIDD,Leikbord.GLUGGI_HAED);
this.addKeyListener(this); //látum vita þegar ýtt er á takka
this.setFocusable(true); //virkar bara þegar glugginn er valinn
Timer klukka = new Timer(30, this);
klukka.start();
}
-
private void uppfaera()
{
spilari1.uppfaera();
spilari2.uppfaera();
bolti.uppfaera();
bolti.markCheck();
bolti.skoppCheck(spilari1, spilari2);
}
public void resetLeik()
{
}
@Override
public void paintComponent(Graphics g)
{
g.setColor(Color.BLUE);
spilari1.paint(g);
spilari2.paint(g);
bolti.paint(g); //bolti teiknaður
if(stadaLeiks == 0)
{
g.setColor(Color.BLACK);
g.setFont(new Font("Consolas", Font.PLAIN, 30));
g.drawString("Ýttu á bilstöng til að byrja", 50, 200);
}
if(stadaLeiks == 1)
{
g.setColor(Color.BLACK);
g.setFont(new Font("Consolas", Font.PLAIN, 80));
g.drawString("PÁSA", 210, 250);
}
}
@Override
public void actionPerformed(ActionEvent e)
{
//þegar timer tikkar þá actinPerformed keyrt
if(stadaLeiks == 2)
{
uppfaera();
}
repaint();
}
//Spaði hreyfður ef ýtt er á takka
@Override
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_P)
{
if (stadaLeiks != 2)
stadaLeiks = 2;
else stadaLeiks = 1;
}
if (e.getKeyCode() == KeyEvent.VK_W)
{
spilari1.setyHradi(-HRADISPADA);
}
if (e.getKeyCode() == KeyEvent.VK_UP)
{
spilari2.setyHradi(-HRADISPADA);
}
if (e.getKeyCode() == KeyEvent.VK_S)
{
spilari1.setyHradi(HRADISPADA);
}
if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
spilari2.setyHradi(HRADISPADA);
}
}
@Override
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_W || e.getKeyCode() == KeyEvent.VK_S)
{
spilari1.setyHradi(0);
}
if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN)
{
spilari2.setyHradi(0);
}
}
public void keyTyped(KeyEvent e)
{
}
}
答案 0 :(得分:0)
创建新线程,在其中为对象设置动画并让它休眠一段时间,也许你阻止了太多ui线程,你的应用程序只是停止响应,确保更新你的ui的所有动作都在{{3}处理}
从该线程更改对象的位置并使用EDT
我只是在这里没有回答问题,我没有看到你的jbutton代码。 注意 - 编辑你的答案,我真的不知道你在这里问的是什么,请尝试在代码示例中使用英语,至少是一些评论。