我不确定如何使用图形绘制方法抛出了一堆扩展类和实现类,其中一些是抽象的,而另一些是接口。至少它不会引发任何编译器错误。但是我陷入了堆栈溢出运行时异常。
首先,我必须从这个界面开始。
public interface Drawable{
public abstract void draw(Graphics g);
}
然后由该抽象类实现。尽管它没有实现任何绘制代码。
public abstract class GameObject implements Drawable {}
下一个类将对其进行扩展。这是我在draw(g);处出现堆栈溢出错误的地方。
在那行代码中,net bean IDE给了我提示:“如果不将其绘制在子类中,则方法绘制可能会递归。”
public class Brick extends GameObject {
private int height;
private int width;
Brick(int xPosition, int yPosition, int width, int height, Color color) {
super(xPosition, yPosition, color);
this.width = width;
this.height = height;
}
public void draw(Graphics g) {
draw(g); // This line throws the Error.
g.setColor(color);
g.fillRect(xPosition, yPosition, width, height);
}
}
接下来的地方可能全错了。我写了一种使Wall建筑自动化的方法。然后,我在paint方法中调用该方法。我应该能够弄乱了它,最终,也许,也许没有。我认为这与错误没有任何关系,但是我以防万一。
public class Game extends JPanel {
int nBricks = 100;
Graphics g;
public void Wall(int nBricks) {
int yPosition = 0;
for (int xPosition = 0; xPosition < nBricks * 10; xPosition += 10) {
if (xPosition % 100 == 0) {
yPosition += 5;
}
Brick brick = new Brick(xPosition, yPosition, 10, 5, Color.GRAY);
brick.draw(g);
}
}
public void paint(Graphics g){
this.Wall(nBricks);
}
}
最后,主要方法是在此类中。
public class GameFrame extends JFrame{
private Game game;
public GameFrame(){
game.setDoubleBuffered(true);
this.getContentPane().add(game);
this.pack();
game.start();
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GameFrame().setVisible(true);
}
});
}
}
我可能应该注意,我遗漏了很多其他方法和类。原因是,他们与砌砖没有任何关系。
最佳答案
您在这里有无限递归
public void draw(Graphics g) {
draw(g); // This line throws the Error.
}
draw(g)
行正在调用自身。当被调用时,它会再次调用自身,依此类推,所以一段时间后它会溢出。也许您想要的是类似
g.draw();
的东西?也许super.draw(g);
关于java - 我试图绕一圈画一堵砖墙。对于突破游戏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34151254/