2

私は 2D 縦型シューティング ゲームを作成しています。このゲームでは、グラフィックス以外はすべてコーディングされています (そして機能しています)。これまで Graphics クラスを使用したことがないため、これはすべて初めてのことです。以下は、すべてを JFrame に描画するために使用するコードです。

public void paintAll()
{
    Graphics h = new Graphics2D();
    for(Bullet j : GameState.getEnBullets()){
        h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    for(Enemy j : GameState.getEnemies()){
        h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    for(Bullet j : GameState.getPlayBullets()){
        h.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    this.paint(h);
}

1行目「Graphics h = new Graphics2D();」Graphics2d は抽象的であるため、エラーが発生しますが、ここからどこへ行くべきかわかりません。

私が持っているすべての画像を取得し、それらを JFrame のポイントにペイントするためのコードが必要です。これまでにこれを行ったことがないことを思い出してください。これが間違った方法であるかどうか教えてください。

4

2 に答える 2

6

paintComponent()代わりにオーバーライドします。コンテキストを提供しGraphicsます。にキャストできますGraphics2D

Graphics2D g2d = (Graphics2D) g;

paintComponent()補遺: これは、 をオーバーライドし、JComponentに追加することを前提としていますJFrame

于 2011-06-07T04:01:57.113 に答える
4

同じことについてのウィルの2番目のスレッド(私のヘリコプタービュー)に関連してタイマーとJFrameのエラー

アンドリュー・トンプソンのマジック・グローブによる直感の修正

追加しました(カスタムグラフィックスと一緒にペイント、ペイントコンポーネント、またはペイントコンポーネントに精通していないため、それが正しいことを願っています)

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class MinimumSize extends JFrame {

    private static final long serialVersionUID = 1L;

    public MinimumSize() {
        setTitle("Custom Component Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void display() {
        add(new CustomComponent());
        pack();        
        setMinimumSize(getSize());// enforces the minimum size of both frame and component
        setVisible(true);
    }

    public static void main(String[] args) {
        MinimumSize main = new MinimumSize();
        main.display();
    }
}

class CustomComponent extends JComponent {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(100, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}
于 2011-06-07T10:27:31.793 に答える