1

Java (学校のプロジェクト) でゲームを作成しようとしていますが、次の設定があります。

JFrame で拡張されたメイン クラス、JPanel で拡張された「ゲーム」クラス。

このメイン クラス内から、クラス 'Player' とクラス 'Map' を呼び出します。クラス 'Map' には、2 つのサブクラス 'Blocks' と 'Bombs' が存在します。

しかし、私は疑問に思っています..このすべてのクラスのペイントメソッドを同じ JPanel (クラス Game) にペイントするにはどうすればよいですか?

私はすべてのクラスにメソッド「public void paint(Graphics g)」を与え、ペイントを行いました..しかし、プログラムを実行すると、サブクラスのペイントではなく、クラス「ゲーム」のペイントのみが表示されます。

これを実装するにはどうすればよいですか?

例として、コードを次のように縮小しました。

メインクラス:

    BomberGame game = new BomberGame();
        add(game);
        setSize(400, 400);
        setTitle("Bomber");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.show();

    }

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

ゲームクラス:

    package bomberb1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


import java.util.ArrayList;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class BomberGame extends JPanel {
    public BomberGame() {;
        BomberMap map = new BomberMap(this);
    }

    public void paint(Graphics g) {
        g.drawRect(10, 10, 10, 10);
        g.setColor(Color.red);
        g.fillRect(10, 10, 10, 10);
    }
}

マップ クラス:

    package bomberb1;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
import javax.swing.SwingUtilities;
public class BomberMap{
    BomberGame game;
    public BomberMap(BomberGame game) {
        this.game = game;
    }
    public void paint(Graphics g) {
        g.drawRect(30, 30, 20, 20);
    }
}
4

1 に答える 1

7

エンティティ クラス (マップ プレーヤーなど) にdrawは、オブジェクトを受け入れるメソッドがあり、オブジェクトGraphicsにアクセスして描画することができます。次のようになります。GraphicsJPanel

class GamePanel extends JPanel {

    Entity e=new Entity;

    @Override
    protected paintComponent(Graphics g) {
        super.paintComponent(g);

        e.draw(g);//call draw method for entity and pass graphics object
    }

}

class Entity {

   //will draw whats necessary to Graphics object
    public void draw(Graphics g) {
        //draw to the graphics object here
    }
}

その他の提案:

アップデート:

@GuillaumePolet が述べたように、より良いゲーム デザインはJPanel、ほとんどのゲーム エンティティの親クラスとして s を実装することです。詳細については、この同様の回答を参照してください。

于 2012-12-10T16:47:07.920 に答える