Witam, jestem w trakcie pisania gry snake w javie i niby wszystko dziala prawidlowo, jednak zdarza sie, ze uruchomie program a ten nie reaguje na klawisze, zdarza sie to raz na kilka uruchomien, podejrzewam ze jest cos nie tak z timerem, ale nie mam pojecia jak to naprawic. Licze na wasza pomoc :)
package projekt;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JPanel;
public class Plansza extends JPanel{
private boolean gora = false, dol = false, lewa = false, prawa = false;
private Klawisz klawisz;
private ArrayList<Waz> waz;
private int x = 0, y = 0;
private int dlugosc = 0;
private int elementy;
Timer czas;
public Plansza(){
czas = new Timer();
Odswiezanie odswiezanie = new Odswiezanie();
czas.scheduleAtFixedRate(odswiezanie, 1, 100);
setPreferredSize(new Dimension(800, 600));
klawisz = new Klawisz();
waz = new ArrayList();
addKeyListener(klawisz);
Waz p = new Waz(x,y);
waz.add(p);
setFocusable(true);
elementy = 4;
}
private void ruch(){
if(prawa){
x += 20;
}
if(lewa){
x-=20;
}
if(gora){
y-=20;
}
if(dol){
y+=20;
}
Waz p = new Waz(x,y);
waz.add(p);
dlugosc = 0;
if(waz.size()>elementy){
waz.remove(0);
}
}
public void paint(Graphics g){
g.clearRect(0, 0, 800, 600);
for(int i = 0; i<waz.size();i++){
g.drawOval(waz.get(i).getX(), waz.get(i).getY(), 20, 20);
}
}
private class Odswiezanie extends TimerTask{
public void run(){
ruch();
repaint();
}
}
private class Klawisz implements KeyListener{
public void keyPressed(KeyEvent e) {
int klawisz = e.getKeyCode();
if(klawisz == KeyEvent.VK_UP && !dol){
gora = true;
lewa = false;
prawa = false;
}
if(klawisz == KeyEvent.VK_DOWN && !gora){
dol = true;
lewa = false;
prawa = false;
}
if(klawisz == KeyEvent.VK_LEFT && !prawa){
lewa = true;
dol = false;
gora = false;
}
if(klawisz == KeyEvent.VK_RIGHT && !lewa){
prawa = true;
gora = false;
dol = false;
}
}
@Override
public void keyTyped(KeyEvent e) {
//To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyReleased(KeyEvent e) {
//To change body of generated methods, choose Tools | Templates.
}
}
}