游戏画面变化问题

时间:2014-10-20 23:21:07

标签: java swing

当我设置它时,我希望它在按空格键时更改为另一个屏幕,但是当我按任意键时,它会自动关闭。如果有人能提供帮助那就太棒了!

屏幕等级:

package net.jacobmob.towerdefence;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Screen extends JPanel implements Runnable{

Thread thread = new Thread(this);

Frame frame;
/** Account*/
User user;

private int fps = 0;

public int scene;

public boolean running = false;

public Screen (Frame frame) {
    this.frame = frame;

    this.frame.addKeyListener(new KeyHandler(this));

    thread.start();
}

public void paintComponent(Graphics g) {
    g.clearRect(0, 0, this.frame.getWidth(), this.frame.getHeight());

    //Background
    if(scene == 0) {
        g.setColor(Color.CYAN);
        g.fillRect(0, 0, this.frame.getWidth(), this.frame.getHeight());
    }else if (scene == 1) {
        g.setColor(Color.GREEN);
        g.fillRect(0, 0, this.frame.getWidth(), this.frame.getHeight());

        //Grid
        g.setColor(Color.GRAY);
        for(int x =0; x < 22; x++) {
            for(int y = 0; y < 13; y++) {
            double width1 = getWidth() * 10000 / 1100;      
            double width2 = width1 / 10000;
            double width3 = this.frame.getWidth() / width2;
            double width = width3 / 22;

            double height1 = getHeight() * 10000 / 700;     
            double height2 = height1 / 10000;
            double height3 = this.frame.getHeight() / height2;
            double height = height3 / 14;

                g.drawRect(50 + (x * 50), 50 + (y * 50), (int) width, (int) height);
            }
        }   

    //Health + Moneys
        g.drawRect(x, y, width, height);

    }else{
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, this.frame.getWidth(), this.frame.getHeight());
    }


    //FPS AT THE BOTTOM
g.drawString(fps + "", 10, 10);
}

//Only First Time
public void loadGame() {
    user = new User(this);

    running = true;
}

public void startGame(User user) {
    user.createPlayer();

    this.scene = 1; //Level 1
}

public void run() {
    System.out.println("[Success] Frame Created");

    long lastFrame = System.currentTimeMillis();
    int frames = 0;

    loadGame();

    while(running) {
        repaint();

        frames++;

        if(System.currentTimeMillis() - 1000 >= lastFrame) {
            fps = frames;
            frames = 0;
            lastFrame = System.currentTimeMillis();
        }

        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    System.exit(0);

}

public class KeyTyped{
    public void keyESC() {
        running = false;;
    }
    public void keySPACE() {    
        startGame(user);
    }
}   
}

KeyHandler类:

package net.jacobmob.towerdefence;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyHandler implements KeyListener{

private Screen screen;
private Screen.KeyTyped keyTyped;

public KeyHandler (Screen screen) {
    this.screen = screen;
    this.keyTyped = this.screen.new KeyTyped();
}

public void keyPressed(KeyEvent e) {
    int keyCode = e.getKeyCode();

    System.out.println(keyCode);

    if(keyCode == 27);
        this.keyTyped.keyESC();

    if(keyCode == 32);
        this.keyTyped.keySPACE(); 

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}
}

帧类:

package net.jacobmob.towerdefence;
import javax.swing.JFrame;

public class Frame extends JFrame{

public static void main(String[] args) {
    new Frame();
}

public Frame() {
    new JFrame();

    this.setTitle("Gigantocypris Tower Defence - by Jacob O.B.");
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setExtendedState(MAXIMIZED_BOTH);
    this.setUndecorated(true);
    this.setResizable(false);
    this.setVisible(true);

    Screen screen = new Screen(this);
    this.add(screen);
}
}

1 个答案:

答案 0 :(得分:2)

这是绝对错误的。

if(keyCode == 27);
    this.keyTyped.keyESC();

if(keyCode == 32);
    this.keyTyped.keySPACE(); 

你想要

if(keyCode == 27){
    this.keyTyped.keyESC();
}

if(keyCode == 32){
    this.keyTyped.keySPACE(); 
}