2012-11-17 104 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

我认为你应该在你的答案中编辑更多优秀的第一条评论。它使它更清晰。 :) –