我正在制作一个游戏,我需要绘制一些线条和点。我有一个名为paintDot
的通用函数(下面的检查代码),我想在不同的函数中调用它。我不知道怎么称呼它,有什么帮助?
public void paintDot (Graphics g, int x, int y)
{
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillOval(x,y,15,15);
}
这是我需要调用绘图函数的另一个函数/方法: ATM的坐标只是硬编码所以我知道它的工作正常。
正如您所看到的,我正在使用错误的争论来调用paintDot
方法。不知道应该在Graphics g
private void gameWindow (int dif)
{
this.removeAll();
areaImage = new JPanel ();
//distance between points = 75
//point grid = 7*6
areaImage.setBounds(50,50,675,600);
areaImage.setBackground(Color.WHITE);
areaImage.setBorder(BorderFactory.createLineBorder(Color.black));
add(areaImage);
answer = new JTextField();
answer.setBounds(835,200,150,50);
answer.setBorder(BorderFactory.createLineBorder(Color.black));
answer.setHorizontalAlignment(JTextField.CENTER);
answer.setFont(new Font("Verdana", Font.BOLD, 20));
add(answer);
info= new JLabel ("Write your answer here:");
info.setBounds(830,155,250,50);
info.setFont(new Font("Verdana", Font.BOLD, 12));
add(info);
checkAnswer = new JButton ("Check Answer");
checkAnswer.setBounds(835,310,150,50);
checkAnswer.addActionListener(this);
add(checkAnswer);
next = new JButton ("Next");
next.setBounds(835,410,150,50);
next.addActionListener(this);
add(next);
end = new JButton ("End Game");
end.setBounds(835,510,150,50);
end.addActionListener(this);
add(end);
revalidate();
repaint();
int x = 75,y=75;
for(int num=0;num<6;num++)
{
for(int xx=0; x<7;xx++)
{
paintDot (areaImage,x,y); // here is the problem
x=x*2;
}
y=y*2;
}
}
答案 0 :(得分:2)
我有一个名为paintDot的通用函数(下面检查代码),我想用不同的函数调用它
你做不到。
绘画只能在paintComponent()方法中完成。
您应该从不直接调用paintComponent()
。
所有绘画代码必须属于paintComponent()
方法。
如果你想画7个点。然后,绘图代码必须在paintComponent()
方法中,这意味着循环代码将在paintComponent()方法中,然后您通过循环调用paintDot(...)
方法。必须完成点的绘制每次时间Swing确定需要重新绘制组件。
您已经就此主题提出了几个问题,答案总是一样的。阅读您给出的教程链接并按照示例进行操作。该教程绘制了一个正方形,但绘制7个点的概念类似。
再次阅读教程,下载代码并使用工作示例。首先更改教程代码以绘制7个点。一旦了解了它的工作原理,就可以将逻辑添加到实际代码中。
教程链接是给你的原因。如果在教程中有一些你不理解的东西,那么问一个问题,但是不要发布看起来与教程中的示例完全不同的代码,并想知道为什么它不起作用!
答案 1 :(得分:1)
你有这个:
for(int xx=0; x<7;xx++)
你有一个名为xx
的索引,你试着做一个循环。问题是您要测试x < 7
而不是xx < 7
,并且由于x
大于7,您将永远不会进入for
。
答案 2 :(得分:0)
您可以扩展JPanel并覆盖绘图功能,例如paintComponent(Graphics g)
(感谢camickr)或paintAll(Graphics g)
(我相信)方法。
您可能还想添加带有BufferedImage using createGraphics()
请注意,如果你想制作一个成熟的游戏,你需要一个游戏循环和其他东西,没有图书馆这不好玩。 这不是无耻自我推销的尝试,而是一个建议。
IF 你需要一个游戏循环,画布,多个屏幕和东西, 图书馆可能是最佳选择。 我让图书馆j2D制作2D游戏。