1

ボックス(エイリアン)が各行(左から右/右から左)に移動してから下に移動し、マウスクリックでボール(火)が発生し、ボックスとボールが発生する単純なゲームを作成しようとしています満たす、プレイヤーが勝つ、そうでない場合、エイリアンは惑星に侵入します。

ゲームのアイデアは [http://www.stanford.edu/class/cs106a/cgi-bin/classhandouts/23-ufo-game.pdf][1] スタンフォードの講義 [1] から得ました。

だから私は自分のコードを使ってそのように作ってみました。

    package spaceInvader;

import javax.swing.JFrame;

public class Main {
public static void main(String args[]) throws InterruptedException{
    JFrame jf = new JFrame("YY");
    Space_GUI sg = new Space_GUI();
    jf.add(sg);
    jf.setSize(500,500);
    jf.setVisible(true);
    jf.setContentPane(sg);
    Thread.sleep(2000);
    sg.rc.move();

}
}




package spaceInvader;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Space_GUI extends JPanel{
    public RectangleComponent rc;

 public Space_GUI(){
    rc = new RectangleComponent();
    add(rc);    
}

}




package spaceInvader;

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

import javax.swing.JComponent;

public class RectangleComponent extends JComponent{

    private int _xCoord;
    private int _yCoord;
    private  static final int SIZE = 50;
    public RectangleComponent(){
        _xCoord = 10;
        _yCoord = 10;
        repaint();
    }

    public void move(){
        _xCoord = 20;
        _yCoord = 20;
        repaint();
    }
    public void paintComponent(Graphics g){
        _xCoord = getWidth()/2;
        _yCoord = getHeight()/2;
        super.paintComponent(g);
        g.setColor(Color.black);
        g.drawRect(_xCoord, _yCoord, SIZE, SIZE);
        g.fillRect(_xCoord, _yCoord, SIZE, SIZE);
    }
}

私のコードでは、ボックスを表示しようとしていますが、何も表示されていません。JButton を追加しようとしましたが、そのボタンのみが表示され、ボックスは表示されません。

4

1 に答える 1

2

なんらかの理由で、RectangleComponent コードが表示されるようになりましたが、問題が発生しています。

  • RectangleComponent は JComponent を拡張したものであり、JComponent の preferredSize は [0, 0] であるため、何もしなければもちろん何も表示されません。
  • 解決策の 1 つは、RectangleComponent に getPreferredSize メソッドを与えて、レイアウト マネージャーに必要なサイズを伝えることです。
  • 別の可能な解決策は、RectangleComponent オブジェクトを保持する Space_GUI JPanel に別のレイアウト マネージャーを使用することです。たとえば、BorderLayout を使用し、RectangleComponent BorderLayout.CENTER を追加した場合、RectangleComponent は Space_GUI JPanel を埋めます。
  • もう 1 つの問題は、_xCoord 変数と _yCoord 変数を慎重に設定し、次に move() で変更することですが、RectangleComponent の paintComponent メソッドでそれらをまったく別のものに設定しているため、すべて無駄です。
于 2011-12-10T21:10:25.330 に答える