Я работаю над клоном pacman в java, используя затмение, и иногда оно выглядит более медленным, более конкретно, движение pacman / ghosts происходит медленно, иногда это нормально.Однажды это произошло, когда я запускал его, так что это было не после того, как я добавил код, и, похоже, не после какого-то определенного события в игре.Я не могу найти какой-либо триггер или намеренно вызывает задержку
Диспетчер ресурсов показывает такое же использование процессора (только около 50%) / использование памяти.Aswell FPS, кажется, постоянно составляет около 200 через лаги и в периоды, когда он работает хорошо.
Кто-нибудь знает, что это может быть?
Есть ли какая-то информация, которую я мог бы опуститьбыть полезным?
edit - я основываю движение на таймере, это плохо?Я опубликую соответствующий код движения ниже. Есть ли хороший способ разместить весь код здесь?
Timer movement = new Timer(20, new ActionListener()//500 is time in milliseconds between
//calls to actionPerformed as far as I know.
{
public void actionPerformed(ActionEvent arg0)
{
if(movingUp == true)
{
moveUp();
}
else if(movingDown == true)
{
moveDown();
}
else if(movingRight == true)
{
moveRight();
}
else if(movingLeft == true)
{
moveLeft();
}
}
});
public void moveUp()
{
yPos -= 1;
this.rect.y -= 1;
}
public void setDirUp()
{
movingUp = true;
movingDown = false;
movingRight = false;
movingLeft = false;
}
в основном классе в открытом ключе voidPressed:
if(keyCode == KeyEvent.VK_W)
{
if(pacMan.isUpHittingWall == false)
{
pacMan.setDirUp();
pacMan.isDownHittingWall = false;
pacMan.isRightHittingWall = false;
pacMan.isLeftHittingWall = false;
}
}
edit 2-Спасибо за помощь, ребята.Сейчас у меня есть движение, использующее системное время, и оно, похоже, решило проблему, потому что я реализовал его сначала только для pacman, а призраки все еще были медленными.Теперь есть проблема, когда движение вправо и вниз намного медленнее, чем движение влево или вверх. Единственное отличие, которое я вижу, состоит в том, что вправо и вниз - это сложение, а влево и вверх - вычитание.Что я могу сделать по этому поводу?
Обновленный код приведен ниже.
//updated movement code
public void moveUp(long timePassed)
{
yPos -= vy * timePassed;
this.rect.y -= vy * timePassed;
}
public void moveDown(long timePassed)
{
yPos += vy * timePassed;
this.rect.y += vy * timePassed;
}
public void moveRight(long timePassed)
{
xPos += vx * timePassed;
this.rect.x += vx * timePassed;
}
public void moveLeft(long timePassed)
{
xPos -= vx * timePassed;
this.rect.x -= vx * timePassed;
}
//I passed timePassed through a globalInputObject because my input is handled in public //void keyPressed(KeyEvent e) and I didnt know how else to get timePassed in to the //movement method
//Here is the code in gameLoop()
globalInputObject.isPacManMovingUp(timePassed);
globalInputObject.isPacManMovingDown(timePassed);
globalInputObject.isPacManMovingRight(timePassed);
globalInputObject.isPacManMovingLeft(timePassed);
//This is inside the GlobalInputObject
public void isPacManMovingUp(long timePassed)
{
if(pacMan.movingUp == true)
{
pacMan.moveUp(timePassed);
}
}
public void isPacManMovingDown(long timePassed)
{
if(pacMan.movingDown == true)
{
pacMan.moveDown(timePassed);
}
}
public void isPacManMovingRight(long timePassed)
{
if(pacMan.movingRight == true)
{
pacMan.moveRight(timePassed);
}
}
public void isPacManMovingLeft(long timePassed)
{
if(pacMan.movingLeft == true)
{
pacMan.moveLeft(timePassed);
}
}