试图理解Java游戏设计代码
我正在尝试用Java学习游戏设计,我正在学习一个教程。本教程给出了这段代码,但没有详细说明。我有一些关于Java和图形的问题试图理解Java游戏设计代码,java,graphics,Java,Graphics,我正在尝试用Java学习游戏设计,我正在学习一个教程。本教程给出了这段代码,但没有详细说明。我有一些关于Java和图形的问题 import java.awt.*; import javax.swing.JFrame; import javax.swing.JPanel; @SuppressWarnings("serial") public class Game2 extends JPanel { @Override public void paint(Gr
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Game2 extends JPanel {
@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fillOval(0, 0, 30, 30);
g2d.drawOval(0, 50, 30, 30);
g2d.fillRect(50, 0, 30, 30);
g2d.drawRect(50, 50, 30, 30);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Mini Tennis");
frame.add(new Game2());
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
为什么我们需要将JPanel扩展到Game2类中?我从未在我的主类上使用过extends,所以我不确定它在本例中的含义以及为什么有必要使用它
什么是frame.add(新游戏2())代码>平均值?为什么允许我们在Game2()类中创建新的Game2()
什么是图形和图形2D对象?我们也不能只使用Graphics2D对象作为paint()的参数,因为我们从未在类型转换之外使用g将其转换为Graphics2D对象
最后,为什么我们不需要调用paint()?您可以(几乎)扩展您喜欢的任何组件。这里最关键的一点是将组件放在一个JFrame
上,这使它成为新窗口的基础。使用JPanel
很好,因为它不包含图形,因此可以用作普通画布
frame.add(newgame2())
将要扩展的JPanel
放入JFrame
只要类实例在给定范围内可见,就可以在任何地方自由创建它们
每当底层操作系统决定是时候重新绘制组件时(例如,在显示窗口或在组件上拖动另一个窗口时),Graphics2D
类的实例将自动传递给paint()
方法
参数的类型始终为Graphics
(这意味着该值可以是相同的类型,也可以是扩展它的任何类)。这是由方法的定义给出的(意味着一些父类或接口这样声明),您不能更改它
在开始任何更复杂的工作之前,请花一些时间熟悉面向对象编程的基础知识:
你不需要“需要”任何东西。它可以在包含主方法的类之外的类中完美地完成。如果您不知道这意味着什么,我建议您在尝试编写游戏或其他GUI应用程序之前先学习Java和OOP的基础知识。不建议调用paint()。我建议您针对使用的每个新类查看在线JavaDoc。这是官方文件。在Swing中,建议您替代paintComponent()。弱标题。重写以总结您的具体技术问题。