Also ich wollte eigentlich dass das weiße Rechteck nach oben bewegt werden kann und dies mit der Taste 'W'. Irgendwie geht es aber nicht obwohl ich sehe, dass sich die Variabel "SP1_Pos_Y" verkleinert. Könnt ihr mir weiterhelfen?
Main:
Fenster:
Spieler :
Tastatur :
Main:
Java:
import java.awt.event.KeyEvent;
public class Hauptprogramm {
public static void main(String[] args) {
int Weltbreite = 1240;
int Welthöhe = 980;
Spieler spieler = new Spieler(Weltbreite, Welthöhe);
Fenster fenster = new Fenster(Weltbreite, Welthöhe, spieler);
long lastFrame = System.currentTimeMillis();
while (true)
{
long thisFrame = System.currentTimeMillis();
float timeSinceLastFrame = (float)(thisFrame - lastFrame)/1000;
lastFrame = thisFrame;
if(Tastatur.Knopfgedrückt(KeyEvent.VK_ESCAPE))System.exit(0);
spieler.Update(timeSinceLastFrame);
fenster.repaint();
try
{
Thread.sleep(20);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
Fenster:
Java:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Fenster extends JFrame
{
JLabel Zeichnen;
int Weltbreite, Welthöhe;
Spieler spieler;
public Fenster(int Weltbreite, int Welthöhe, Spieler spieler)
{
super("PONG");
setLayout(null);
this.spieler = spieler;
this.Weltbreite = Weltbreite;
this.Welthöhe = Welthöhe;
Zeichnen = new Zeichnen();
Zeichnen.setBounds(0, 0, Weltbreite, Welthöhe);
add(Zeichnen);
addKeyListener(new Tastatur());
setDefaultCloseOperation(3);
setUndecorated(true);
setResizable(false);
setSize(Weltbreite, Welthöhe);
setLocationRelativeTo(null);
setVisible(true);
}
private class Zeichnen extends JLabel
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, Weltbreite, Welthöhe);
g.setColor(Color.WHITE);
g.fillRect(spieler.getSpieler1().x, spieler.getSpieler1().y, spieler.getSpieler1().width, spieler.getSpieler1().height);
g.fillRect(Weltbreite-(spieler.getSpieler2().x*2), spieler.getSpieler2().y, spieler.getSpieler2().width, spieler.getSpieler2().height);
g.setColor(Color.RED);
g.fillOval(spieler.getBall().x, spieler.getBall().y, spieler.getBall().width, spieler.getBall().height);
}
}
}
Spieler :
Java:
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
public class Spieler {
private int SP_Breite, SP_Höhe, SP_Pos_X, SP1_Pos_Y, SP2_Pos_Y, B_Breite, B_Höhe, B_Pos_X, B_Pos_Y;
private Rectangle boundSpieler1, boundSpieler2, boundBall;
public Spieler(int Weltbreite, int Welthöhe)
{
SP_Breite = 20;
SP_Höhe = 200;
SP_Pos_X = 25;
SP1_Pos_Y = Welthöhe/2 - SP_Höhe/2;
SP2_Pos_Y = Welthöhe/2 - SP_Höhe/2;
B_Breite = 50;
B_Höhe = 50;
B_Pos_X = SP_Breite + SP_Pos_X;
B_Pos_Y = Welthöhe/2 - B_Höhe/2;
boundSpieler1 = new Rectangle(SP_Pos_X, SP1_Pos_Y, SP_Breite, SP_Höhe);
boundSpieler2 = new Rectangle(SP_Pos_X, SP2_Pos_Y, SP_Breite, SP_Höhe);
boundBall = new Rectangle(B_Pos_X, B_Pos_Y, B_Breite, B_Höhe);
}
public void Update(float timeSinceLastFrame)
{
if(Tastatur.Knopfgedrückt(KeyEvent.VK_W))SP1_Pos_Y -= 50*timeSinceLastFrame;
System.out.println(SP1_Pos_Y);
}
public Rectangle getBall()
{
return boundBall;
}
public Rectangle getSpieler1()
{
return boundSpieler1;
}
public Rectangle getSpieler2()
{
return boundSpieler2;
}
}
Tastatur :
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Tastatur implements KeyListener{
static boolean[] Tasten = new boolean[512];
public static boolean Knopfgedrückt(int keyCode)
{
if(keyCode >= 0 && keyCode < Tasten.length) return Tasten[keyCode];
else return false;
}
@Override
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode >= 0 && keyCode < Tasten.length)Tasten[keyCode] = true;
}
@Override
public void keyReleased(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode >= 0 && keyCode < Tasten.length)Tasten[keyCode] = false;
}
//Unnötig
@Override
public void keyTyped(KeyEvent arg0) {
}
}