私はJavaで単純なゲームを作っています。私はSwingを使っています。私はJFrameを持っており、その中に実際のゲームのために2つのJPanelsを持っていたいと思っています。すべてのJPanelには独自の座標があるので、点(0、0)はそのパネルの左上隅にあることを読んでいます。描画中にJPanel座標を使用する
私はメソッドpaintControl()をオーバーライドします。ゲームを表示する私のクラスのGameView(これは、上記の2番目のJPanelです)。しかし、私がgameViewの左上隅に何かを描画し、その画像の座標を(0,0)に設定すると、BarViewが描画されます。
私は図面に関する多くのチュートリアルや記事を読んでいます。私は何が間違っているのか分かりません。だから私の質問は、JPanelの座標ではなくJFrameの座標を使って何かを描くのですか?ここではいくつかのコードは次のとおりです。JFrameのにJPanelのを拡張するオブジェクトの追加
:JPanelの中
GameView v = new GameView();
BarView bv = new BarView();
frame.getContentPane().add(bv);
frame.getContentPane().add(v);
frame.setVisible(true);
v.requestFocus();
v.repaint();
bv.repaint();
描画:gameSceneで
public class GameView extends JPanel implements View, Commons{
public static final int WIDTH=WINDOW_WIDTH, HEIGHT=ARENA_HEIGHT;
private GameScene gameScene;
private TexturePaint paint;
private BufferedImage bi;
public GameView(){
addKeyListener(new CustomKeyListener());
addMouseMotionListener(new CustomMouseListener());
setSize(WINDOW_WIDTH, ARENA_HEIGHT);
setFocusable(true);
try {
bi = ImageIO.read(new File("src/res/texture.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.paint = new TexturePaint(bi, new Rectangle(0, 0, bi.getWidth(), bi.getHeight()));
}
@Override
public void paintComponent(Graphics g1) {
Graphics2D g = (Graphics2D) g1;
g.setPaint(paint);
g.fillRect(0, 0, WINDOW_WIDTH, ARENA_HEIGHT);
for(Iterator<Drawable> it = gameScene.models.iterator(); it.hasNext();)
{
Drawable d = it.next();
d.draw(g1);
}
Toolkit.getDefaultToolkit().sync();
}
とモデルの方法ドローは、通常、次のようになります。
public void draw(Graphics g1){
Graphics2D g = (Graphics2D) g1.create();
int cx = image.getWidth(null)/2;
int cy = image.getHeight(null)/2;
g.rotate(rotation, cx+x, cy+y);
g.drawImage(image, x, y, null);
}
"View、Commonsを実装する":これらは何ですか?ちんぷんかんぷん?? – gpasch
より良いヘルプを早く得るには、[mcve]を投稿してください。実際に問題を示すために画像が必要な場合は、それらにホットリンクしてください。 –