如何修复暂停前未运行的某些代码

时间:2019-07-19 04:11:43

标签: java swing user-interface timer jframe

在计时器暂停游戏之前,我的飞船图片并未删除。它也没有显示我的爆炸,并且爆炸之前没有播放声音文件。那么,为什么这些事情在timer.pause事件之前没有发生?我已经按照他们需要的正确顺序准备了一切。

这是我正在研究的游戏,基本上是将我自己的想法投入银河游戏。此方法是我的Collison方法的一部分,此特定代码用于处理与玩家飞船的子弹碰撞。我这样做是为了在秋天上学之前刷新我的一些Java技能,如果您不更新自己的知识,那么我基本上听说过的第三课很难。无论如何,我有多个类和方法,我将尝试给出相关的代码,如果您需要更多代码,请告诉我。我尝试在Google上进行研究,但没有什么比我正在研究的好。我查看了建议的java thread.sleep puts swing ui to sleep too,但它不适合我的需要,首先,我使用的是计时器,而不是线程,其次,我希望gui暂停,请阅读我的完整信息。

for (int i=0;i<bCollection.size();++i) {
                Rectangle r1=new Rectangle(bCollection.get(i).bulletLocation(0),bCollection.get(i).bulletLocation(1),bCollection.get(i).bsize,bCollection.get(i).bsize);
                Rectangle r2=new Rectangle(spaceShip.getX(),spaceShip.getY(),ShipSize,ShipSize);
                if (r1.intersects(r2)) {
                    bCollection.get(i).removeBullet();
                    bCollection.remove(i);
                    insertExplosion(spaceShip.getX(),spaceShip.getY(),ShipSize,ShipSize);
                    pSound.playSoundFile("Explosion.wav");
                    window.remove(spaceShip);
                    window.repaint();
                    synchronized(timer) {
                        try {
                            timer.wait(5000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    window.add(spaceShip,0);
                    window.repaint();
                    livesLeft--;
    //              break;
                }
            }

没有错误消息。发生的情况是游戏先暂停一下,然后爆炸,发声,移开太空飞船,然后将飞船放回原处。我希望它能使声音爆炸,并在暂停前移开飞船,然后在暂停后将飞船放回原处。预先感谢。

编辑: 所以我看了这个建议的线程:Synchronization in Swing

这有点接近,只是它并没有真正起作用,因为我得到了与以前相同的结果。我在那篇文章中尝试了两件事,那就是尝试分别创建一个新的计时器,但是随后我得到了非法的监视器状态异常错误,因此我将其放在同步块中以解决该问题,并且我的程序也发生了同样的事情。我尝试用另一种方式创建新的计时器,方法是“ new Timer(TIMER_DELAY,new TimerListener())。start();”而且这也不起作用,因为除了timer.stop和/或wait之外,没有在TimerListener类中放入任何东西,这无法解决我的问题。别人知道吗?

0 个答案:

没有答案