In my platforming game, I have a swing timer that ticks the following method every 17 milliseconds. It is here that I run the various events that I need to run. My plan was to sleep the timer for 1 second whenever the player died.
My problem is that I don't really have a firm understanding of how to sleep a swing timer. Every example that I look at involves using a Thread which is not what I am doing. When I do the following I get a IllegalMonitorStateException error.
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();
}
Thanks in advance
My problem is that I don't really have a firm understanding of how to sleep a swing timer.
You don't. You don't sleep anything in Swing, not unless you want to put your entire GUI asleep. Instead why not simply record the start time, check the elapsed time with each tick, and then activate whatever code you want activated when the elapsed time is greater than your cut-off?
Not sure what you're trying to do, but perhaps something in this sort of range (code not tested)
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();
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.