简体   繁体   中英

Simple 2D Java Game

I'm trying to create a java game in which balls randomly drop from the top of the screen and we need to catch the balls using a catcher which is located at the bottom of the screen.

I'm having a difficult time figuring out how to actually draw this onto my JFrame.

I've got a class for my 'catcher', 'ball', 'game space' and I would like to put it all together.

How do I draw my 'catcher' onto my screen?

Currently, I have a 'Game' class which looks like this.

public class Game extends JFrame implements KeyListener {

GameScreen gameScreen;
Catcher playerOneCatcher;

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

public Game() {

    super("CATCH");
    setSize(640,480);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setLocationRelativeTo(null);
    setResizable(false);
    addKeyListener(this);


    this.gameScreen = new GameScreen();
    this.playerOneCatcher = new Catcher(40, 10); 


}

I've tried something like this in my Catcher class...

public void paintComponent(Graphics g) {
    g.setColor(Color.BLUE);
    g.fillRect(positionX, positionY, this.width, this.height);
}

However, its not showing on my screen.

Any help would be greatly appreciated.

You need to rethink your strategy here. Swing is a component framework, with most components intended for building user interfaces. These components are not optimised for what's typically required in games. You want to look into double-buffering, sprites etc. The way to go will be to read up on Graphics2D class (or abandon Swing altogether!)

However answering to your question - if Catcher is a Swing component - you need to add it to the "parent" component, eg like this:

this.add(playerOneCatcher);

Same goes to gameScreen but from your snippet it is not obvious what this component is. I hope this helps.

Also, check this out for some ideas: 2D Java Game. Moving sprite above tiled images

  1. Did you call super.paintComponent (g) ? That can cause a few bugs.
  2. Did you call invalidate () or repaint () to repaint the thing you are painting on? I hope you have a special JComponent, and you are not drawing on a JFrame. That is NOT good.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM