试图理解java游戏设计代码

iyzzxitl  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(300)

我正在努力学习java的游戏设计,我正在遵循一个教程。本教程给出了这段代码,但没有详细说明。我有一些关于java和图形的问题。

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中?我从来没有在我的主类上使用过扩展,所以我不知道在这种情况下它意味着什么,为什么有必要。
是什么 frame.add(new Game2()); 什么意思?为什么我们可以在game2()类中创建一个新的game2()?
什么是图形和图形2D对象?我们也不能仅仅使用一个graphics2d对象作为paint()的参数,因为除了将g类型转换为graphics2d对象之外,我们从未使用过g。
最后,为什么我们不需要调用paint()?

vcirk6k6

vcirk6k61#

你可以(几乎)扩展任何你喜欢的组件。这里最关键的是你把组件放到 JFrame 这使它成为新Windows的底座。使用 JPanel 是好的,因为它不包含图形,因此可以作为普通画布。 frame.add(new Game2())JPanel 你正在扩展到一个 JFrame .
只要类示例在给定的范围内可见,就可以在任何地方自由创建它们。
一个例子 Graphics2D 类传递给 paint() 每当底层操作系统决定重新绘制组件时(例如,在显示窗口或在组件上拖动另一个窗口时),都会自动使用。
参数的类型始终为 Graphics (这意味着该值可以是同一类型,也可以是扩展它的任何类)。这是由方法的定义给出的(意味着一些父类或接口这样声明它),您不能更改它。
在开始更复杂的工作之前,请先花点时间熟悉面向对象编程的基础知识:
https://www.w3schools.com/java/java_oop.asp

相关问题