2012-11-17 153 views
2

我正在嘗試開發Java磚式破碎機(如DxBall)遊戲,並且我想用它自己的繪製方法制作Ball對象。Java - 圖形油漆

我想要做的事:

public class Ball { 
    private int x, y, diameter; 
    public void Ball(){ 
    x = 0; 
    y = 0; 
    diameter = 20; 
    } 

    public void draw(Graphics g){ 
    g.setPaint(Color.red); 
    g.fillOval(x, y, diameter, diameter); 
    } 
} 

因此,我的遊戲引擎擴展JFrame及其paintComponent方法將調用遊戲對象繪製方法。總而言之,在Java中進行面向對象的遊戲是否合適?我的Ball類應該延伸什麼?

+0

這取決於你想在哪裏應用這個對象。 –

+0

我想在我的GameEngine類中應用這些對象,這是JFrame。 GameEngine進行一些計算並更改我的對象(球或槳)x,y或速度值,然後它將調用所有可繪製對象的繪製方法。 – user1832093

+0

不,你不能調用paint方法,而是調用draw方法。 –

回答

3

如果你希望做一個Ball圖形組件,可以擴展JComponent

public class Ball extends JComponent { 
    private int x; 
    private int y 
    private int diameter; 

    public Ball() { 
     x = 0; 
     y = 0; 
     diameter=20; 
    } 

    @Override 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setPaint(Color.red); 
     g.fillOval(x, y, diameter, diameter);   
    } 
} 

和簡單的調用repaint當你想畫的組件,而不是一個自定義的draw方法。

注意:構造函數沒有返回類型。

3

您的Ball類似乎看起來不錯。它不需要擴展任何東西。您需要將遊戲對象的paintComponent中的Graphics對象傳遞給Balldraw方法。

+0

我試圖將Graphics對象傳遞給我的Ball類,但失敗了。 – user1832093

+1

遊戲類中的paintComponent方法應調用Ball.draw(g)方法。它是如何失敗的? –

1

你的課很好,但我建議擴展一門課。這個類通常被稱爲SpriteActionGameObject含有類似

image (or animation), position, collision rect and some basic functions like get and set it's position, speed and some collision detection functions if you wish.

某些資源的基本信息。

希望他們幫助。並繪製該對象,做

g.drawImage(ball.image, ball.x, ball.y, null); 
+1

在很多遊戲中,對象會擴展一個類'Actor'或'Sprite',否則它將包含遊戲中任何元素的基本屬性,比如它的位置,圖像,碰撞矩形等, –

+0

我建議擴展類。對不起我的英語不好。 –

+0

我認爲你應該在你的答案中編輯更多優秀的第一條評論。它使它更清晰。 :) –