Hallo
Mein Problem liegt nicht daran, das das Spiel nicht richtig funktioniert, sondern daran, dass ich eine art Log-In machen will, und das Spiel-Fenster erst danach erscheint.
Ich habe es jetzt so weit bekommen dass er zwar in der "Spiel-Dauerschleife" ist(er berechnet die winkel etc.) aber nichts im JFrame davon angezeigt wird.
Hier meine Main:
Hier mein Spielfenster:
Hier die Player Klasse:
Hier die Ball Klasse:
Mein Problem liegt nicht daran, das das Spiel nicht richtig funktioniert, sondern daran, dass ich eine art Log-In machen will, und das Spiel-Fenster erst danach erscheint.
Ich habe es jetzt so weit bekommen dass er zwar in der "Spiel-Dauerschleife" ist(er berechnet die winkel etc.) aber nichts im JFrame davon angezeigt wird.
Hier meine Main:
Java:
package GamePackage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Log extends JFrame {
public static void main(String[] args) {
Log frameTabel = new Log();
}
JButton blogin = new JButton("Login");
JPanel panel = new JPanel();
JTextField txuser = new JTextField(15);
JPasswordField pass = new JPasswordField(15);
Log(){
super("Login Autentification");
setSize(300,200);
setLocation(500,280);
panel.setLayout (null);
txuser.setBounds(70,30,150,20);
pass.setBounds(70,65,150,20);
blogin.setBounds(110,100,80,20);
panel.add(blogin);
panel.add(txuser);
panel.add(pass);
getContentPane().add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
actionlogin();
}
public void actionlogin(){
blogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String puname = txuser.getText();
String ppaswd = pass.getText();
if(puname.equals("test") && ppaswd.equals("12345")) {
newframe f =new newframe();
dispose();
long lastFrame = System.currentTimeMillis();
while(true){
long thisFrame = System.currentTimeMillis();
float timeSinceLastFrame = ((float)(thisFrame-lastFrame))/1000f;
lastFrame=thisFrame;
f.ball.UpdateBall(timeSinceLastFrame, f.b_speed, f.player.getBounding(), f.enemy.getBounding(), f.ballSize);
f.player.UpdatePlayer(timeSinceLastFrame, f.getUp(), f.getDown(), f.getShoot());
f.enemy.UpdatePlayer(timeSinceLastFrame, f.e_getUp(), f.e_getDown(), f.e_getShoot());
f.repaintScreen();
System.out.println("hier");
if(f.getClose())System.exit(0);
try {
Thread.sleep(15);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
} else {
JOptionPane.showMessageDialog(null,"Wrong Password / Username");
txuser.setText("");
pass.setText("");
txuser.requestFocus();
}
}
});
}
}
Java:
package GamePackage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class newframe extends JFrame {
public static void main(String[] args) {
newframe frameTabel = new newframe();
}
final int frameX = 800;
final int frameY = 600;
private DrawObjects screen;
private DrawObjects screen2;
private DrawObjects screen3;
private boolean key_up = false;
private boolean key_down = false;
private boolean key_close = false;
private boolean e_key_up = false;
private boolean e_key_down = false;
private boolean e_key_close = false;
JLabel scorePlayer;
JLabel scoreEnemy;
public final int ballSize = 10;
public final int ballPosX = frameX/2;
public final int ballPosY = frameY/2;
public final double b_speed = 400;
public final int playerSize = 50;
public final int playerPosX = 0;
public final int playerPosY = frameY/2-playerSize/2;
public final double p_speed = 350;
public final int enemySize = 50;
public final int enemyPosX = frameX-enemySize;
public final int enemyPosY = frameY/2-enemySize/2;
public final double e_speed = 350;
Ball ball = new Ball(ballPosX, ballPosY, ballSize, b_speed, frameX, frameY);
Player player = new Player(playerPosX,playerPosY,playerSize, p_speed ,frameX, frameY);
Player enemy = new Player(enemyPosX, enemyPosY, enemySize, e_speed, frameX, frameY);
newframe(){
this.scorePlayer = new JLabel();
this.scoreEnemy = new JLabel();
scoreEnemy.setBounds(frameX/2+50, 10, 25, 25);
scoreEnemy.setText("0");
scorePlayer.setBounds(frameX/2-50, 10, 25, 25);
scorePlayer.setText("0");
add(scorePlayer);
add(scoreEnemy);
screen = new DrawObjects();
screen2 = new DrawObjects();
screen3 = new DrawObjects();
screen.setBounds(0, 0, 1280, 720);
screen2.setBounds(0, 0, 1280, 720);
screen3.setBounds(0,0,1280,720);
add(screen);
add(screen2);
add(screen3);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(frameX, frameY);
setLocationRelativeTo(null);
setUndecorated(true);
setResizable(false);
setVisible(true);
}
public boolean getUp(){
return key_up;
}
public boolean getDown(){
return key_down;
}
public boolean getClose(){
return key_close;
}
public boolean e_getUp(){
return e_key_up;
}
public boolean e_getDown(){
return e_key_down;
}
public boolean e_getClose(){
return e_key_close;
}
public void repaintScreen(){
screen.repaint();
screen2.repaint();
screen3.repaint();
updateScore(scorePlayer, scoreEnemy);
}
private void updateScore(JLabel player, JLabel enemy) {
if(ball.getBounding().x>=frameX){
int score = Integer.parseInt(player.getText());
score++;
player.setText(String.valueOf(score));
}
else if(ball.getBounding().x<=0){
int score = Integer.parseInt(enemy.getText());
score++;
enemy.setText(String.valueOf(score));
}
}
private class DrawObjects extends JLabel{
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(player.getBounding().x,
player.getBounding().y,
player.getBounding().width,
player.getBounding().height);
g.setColor(Color.red);
g.fillRect(enemy.getBounding().x,
enemy.getBounding().y,
enemy.getBounding().width,
enemy.getBounding().height);
g.setColor(Color.black);
g.fillRect(ball.getBounding().x,
ball.getBounding().y,
ball.getBounding().width,
ball.getBounding().height);
}
}
private class KeyHandler implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_S)key_down = true;
if(e.getKeyCode() == KeyEvent.VK_W)key_up = true;
if(e.getKeyCode() == KeyEvent.VK_ESCAPE)key_close = true;
if(e.getKeyCode() == KeyEvent.VK_DOWN)e_key_down = true;
if(e.getKeyCode() == KeyEvent.VK_UP)e_key_up = true;
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_S)key_down = false;
if(e.getKeyCode() == KeyEvent.VK_W)key_up = false;
if(e.getKeyCode() == KeyEvent.VK_DOWN)e_key_down = false;
if(e.getKeyCode() == KeyEvent.VK_UP)e_key_up = false;
}
//Unnötig
@Override
public void keyTyped(KeyEvent arg0) {}
}
}
Java:
package GamePackage;
import java.awt.Rectangle;
public class Player {
int frameX;
int frameY;
private Rectangle bounding; //rectangle legt eine box an
private float p_posX; //spieler Pos auf X
private float p_posY; //spieler Pos auf Y
private double p_speed;
public Player(int posx, int posy, int size, double p_speed,int frameX, int frameY){
bounding = new Rectangle (posx, posy, size, size);
p_posX = posx;
p_posY = posy;
this.frameX = frameX;
this.frameY = frameY;
this.p_speed = p_speed;
}
public void UpdatePlayer(float timeSinceLastFrame, boolean up, boolean down, boolean shoot){
if(up)p_posY-=p_speed*timeSinceLastFrame;
if(down)p_posY+=p_speed*timeSinceLastFrame;
if(p_posX<0)p_posX+=p_speed*timeSinceLastFrame;
if(p_posY<0)p_posY+=p_speed*timeSinceLastFrame;
if(p_posX>frameX-bounding.width)p_posX-=p_speed*timeSinceLastFrame;
if(p_posY>frameY-bounding.height)p_posY-=p_speed*timeSinceLastFrame;
bounding.x=(int)p_posX;
bounding.y=(int)p_posY;
}
public Rectangle getBounding(){
return bounding;
}
}
Java:
package GamePackage;
import java.awt.Rectangle;
import java.util.Random;
public class Ball {
private final int frameX;
private final int frameY;
private Rectangle bounding; //rectangle legt eine box an
private float b_posX; //ball Pos auf X
private float b_posY; //ball Pos auf Y
private double b_speed;
private boolean right;
private boolean newRound = true;
private int angle;
Random r = new Random();
public Ball(int posx, int posy, int size, double b_speed,int frameX, int frameY){
bounding = new Rectangle (posx, posy, size, size);
b_posX = posx;
b_posY = posy;
this.frameX = frameX;
this.frameY = frameY;
this.b_speed = b_speed;
}
public Rectangle getBounding(){
return bounding;
}
public void resetBounding(){
bounding.x = frameX/2;
bounding.y = frameY/2;
}
public void UpdateBall(float timeSinceLastFrame, double speed, Rectangle p, Rectangle e, int size) {
if(newRound){
b_posX = frameX/2;
b_posY = frameY/2;
right = r.nextBoolean();
angle = r.nextInt(20);
System.out.println(angle);
newRound=false;
}
if(b_posX>=frameX || b_posX<0){
newRound = true;
}
if(b_posX<= p.width
&& b_posY>=p.y
&& b_posY<=p.y+p.height){
angle = angle*(-1);
right=true;
}
if(b_posX>= frameX-e.width
&& b_posY>=e.y
&& b_posY<=e.y+e.height){
angle = angle*(-1);
right=false;
}
if(b_posY<0||b_posY>frameY){
angle = (angle)*(-1);
//angle = r.nextInt(360);
}
if(right){
b_posX += timeSinceLastFrame*b_speed;
b_posY += Math.tan(angle);
}
else {
b_posX -= timeSinceLastFrame*b_speed;
b_posY -= Math.tan(angle);
}
bounding.x = (int) b_posX;
bounding.y = (int) b_posY;
}
}