在我的平台游戏中,我有一个摆动计时器,每隔17毫秒就会触及以下方法。我在这里运行我需要运行的各种事件。我的计划是每当玩家死亡时让计时器睡1秒钟。
我的问题是我对如何睡觉挥杆计时器并不十分了解。我看到的每个例子都涉及使用一个不是我正在做的线程。当我执行以下操作时,我收到IllegalMonitorStateException错误。
public void actionPerformed(ActionEvent e)
{
if (!louis.isDead)
{
if (louis.right)
{
louis.moveR();
}
if (louis.left)
{
louis.moveL();
}
if (!louis.left && !louis.right)
louis.friction();
louis.gravity();
louis.checkCol(charMap, mapX, mapY);
mapX -= louis.moveX();
mapY -= louis.moveY();
louis.checkDeath(charMap, mapX, mapY);
}
else
{
try {
time.wait(1000);
} catch (InterruptedException e1) {e1.printStackTrace();}
mapX = initMapX;
mapY = initMapY;
louis = new Player(spawnX, spawnY);
}
repaint();
}
提前致谢
答案 0 :(得分:2)
我的问题是我对如何睡觉挥杆计时器并不十分了解。
你没有。你不会在Swing中睡任何东西,除非你想让你的整个GUI都睡着了。相反,为什么不简单地记录开始时间,检查每个滴答时间的经过时间,然后在经过的时间大于截止时激活你想激活的代码?
不确定你要做什么,但可能在这种范围内(代码未经测试)
private static final long TOTAL_DEATH_TIME = 1000L; // total time of your delay
private long deathInitTime = -1L; // start time of death throes
public void actionPerformed(ActionEvent e) {
if (!louis.isDead) {
// .... etc... unchanged from your code
} else {
// he's dead
if (deathInitTime < 0) {
// if dead but just now dead, initialize deathInitTime
deathInitTime = System.currentTimeMillis();
} else {
// he's been dead
// check how long he's been dead
long deathTime = System.currentTimeMillis() - deathInitTime;
if (deathTime > TOTAL_DEATH_TIME) {
// if he's been dead long enough, call this code
mapX = initMapX;
mapY = initMapY;
louis = new Player(spawnX, spawnY);
deathInitTime = -1L; // and re-initialize deathInitTime
}
}
}
repaint();
}