Witam, chciałem napisać grę typu Space Invaders i napotkałem problem, otóż po zabiciu pięciu przeciwników, chciałem aby reszta, zaczęła poruszać się szybciej, w tym celu chciałem, zmniejszyć wartość Interval w timerze. W tym celu, próbowałem najpierw wywołać metodę cancel(), a potem purge() w obiekcie klasy Timer, a następnie zrobić nowy obiekt, klasy Timer i uruchomić ponownie timer, tylko że, ze zmniejszonym interwałem.
int a=0;
class MonsterMove extends TimerTask
{
public void run()
{
if(a > 23)
a=0;
for(int y = 0; y < 4; y++)
for(int x = 0; x < 10; x++)
{
if(a<=10)
{
monster[y][x].x += 26;
repaint();
}
else if(a > 10 && a <= 11)
{
monster[y][x].y += 26;
repaint();
}
else if(a > 11 && a <= 22)
{
monster[y][x].x -= 26;
repaint();
}
else if(a > 22 && a <= 23)
{
monster[y][x].y += 26;
repaint();
}
}
a++;
}
}
if(destroyed >= 1)
{
velocity -= 100;
destroyed = 0;
monsterMove.cancel();
monsterMove.purge();
Timer monsterMove = new Timer();
monsterMove.scheduleAtFixedRate(new MonsterMove(), 0, velocity);
}
Velocity, to zmienna typu int, której na start, przypisuję 1300.
Destroyed to zmienna typu int, która zwiększa się o jeden, po zabiciu przeciwnika. (Na razie jest 1 dla testów, później zrobię pięć)
Po włączeniu programu, niby działa, jednak po spełnieniu warunku, robi się jakby drugi timer i wtedy przeciwnicy, przesuwają się zgodnie z kilkoma timerami, o różnych interwałach.
Mam nadzieję, że wyraziłem się w miarę zrozumiale.