Mam klasę która tworzy obiekt i go rysuje
import java.awt.*;
public class podstawka {
public static int podstx = gra.szerokosc / 2 - gra.szerokosc / 10;
public static int podsty = gra.wysokosc - 80;
public static int szerokosc = gra.szerokosc / 5;
public static int wysokosc =20;// gra.wysokosc / 20;
public static void rysowanie(Graphics2D g) {
g.setColor(Color.yellow);
g.fillRect(podstawka.podstx, podstawka.podsty, podstawka.szerokosc, podstawka.wysokosc);
((Graphics2D) g).setStroke(new BasicStroke(2));
g.setColor(Color.black);
g.drawRect(podstawka.podstx, podstawka.podsty, podstawka.szerokosc, podstawka.wysokosc);
}
}
i w innej klasie chce dodać KeyListener, żeby móc poruszać tym obiektem
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
public class gra extends JComponent implements KeyListener, ActionListener {
kulka kul;
Animation animation;
private kostki kos;
public static int wysokosc=600;
public static int szerokosc=800;
public int ilekostek;
public boolean gra=false;
public int score=0;
public gra(kulka kul,int ilewys,int ileszer){
this.kul=kul;
kos=new kostki(ileszer,ilewys);
ilekostek=ileszer*ilewys;
addKeyListener(this);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.gray);
g.fillRect(1, 1, szerokosc, wysokosc);
super.paint(g);
g.setColor(Color.cyan);
g.fillOval(kul.x,kul.y,30,30);
kos.rysowanie((Graphics2D) g);
podstawka.rysowanie((Graphics2D) g);
if(ilekostek<=0)
{
gra=false;
kulka.vx=0;
kulka.vy=0;
g.setFont(new Font("",Font.BOLD, 20));
g.drawString("Wygrana!",szerokosc/3,wysokosc/3);
}
if(kulka.y>wysokosc-60)
{
gra=false;
kulka.vx=0;
kulka.vy=0;
g.setFont(new Font("",Font.BOLD, 20));
g.drawString("Przegrana :( Zdobyto: "+score, szerokosc/3,wysokosc/3);
score=0;
}
if(kulka.y>podstawka.podsty-kulka.wielkosc && kulka.x<podstawka.podstx+(podstawka.szerokosc) && kulka.x>podstawka.podstx )
{
kulka.vy = -kulka.vy;
}
g.dispose();
}
private void checkColisions() {
kul.kolizja(getWidth(),getHeight());
}
public void startAnimation() {
animation = new Animation();
Thread t = new Thread(animation);
t.start();
}
public void stopAnimation() {
animation.end_animation=true;
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
moveRight();
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
moveLeft();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
public void moveRight() {
podstawka.podstx += 20;
}
public void moveLeft() {
podstawka.podstx -= 20;
}
class Animation implements Runnable{
private boolean end_animation = false;
@Override
public void run() {
while(!end_animation){
kul.move();
checkColisions();
repaint();
try {
Thread.sleep(14);
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
mam jeszcze klase main
import javax.swing.*;
import java.io.IOException;
public class main {
public static void main(String[] args) throws IOException {
kulka kul = kulka.stworz(gra.szerokosc/3,gra.wysokosc/3);
gra g = new gra(kul,10,5);
JFrame okno = new JFrame("gra");
okno.setContentPane(g);
okno.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
okno.setBounds(500, 200,gra.szerokosc,gra.wysokosc);
okno.setVisible(true);
okno.setResizable(false);
okno.requestFocus();
g.startAnimation();
}
}
i 2 inne klasy od rysowania innych obiektów.
Chciałem zrobic, żeby obiekt z klasy podstawka poruszał się w lewo i w prawo po naciśnięciu strzałek. Obejrzałem kilka poradników i nie widzę błędu