gpt4 book ai didi

java - 关于制作基本游戏的对象声明和一些图像导入语句的问题

转载 作者:行者123 更新时间:2023-12-01 04:41:29 26 4
gpt4 key购买 nike

所以我和我的 friend 正在制作一个非常非常基本的游戏来娱乐,它将是一个自上而下(大约 45 度角)的游戏,其中有一个伐木 worker 砍伐树木。我知道这是非常基础的,而且有点蹩脚,但我们才刚刚进入半高级 java。

首先,我们决定需要树木 Sprite ,但我们意识到无论如何它都是一个在树周围有白色像素的矩形,但这会剪切掉部分背景图像。因此,我们想要获取每个白色像素(空白/负空间),然后使这些像素透明。为此,我们查看了大量代码,我们看到最多的是下面的代码,它有效,但我不太理解。

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public class simpleFrame extends JFrame {
JPanel mainPanel = new JPanel() {
ImageIcon originalIcon = new ImageIcon("image.png");
ImageFilter filter = new RGBImageFilter() {
int transparentColor = Color.white.getRGB() | 0xFF000000;
public final int filterRGB(int x, int y, int rgb) {
if ((rgb | 0xFF000000) == transparentColor) {
return 0x00FFFFFF & rgb;
} else {
return rgb;
}
}
};
ImageProducer filteredImgProd = new FilteredImageSource(originalIcon.getImage().getSource(), filter);
Image transparentImg = Toolkit.getDefaultToolkit().createImage(filteredImgProd);
public void paintComponent(Graphics g) {
g.setColor(getBackground());
g.fillRect(0, 0, getSize().width, getSize().height);
g.drawImage(transparentImg, 140, 10, this);
}
};
public simpleFrame() {
super("Transparency Example");

JPanel content = (JPanel)getContentPane();
mainPanel.setBackground(Color.black);
content.add("Center", mainPanel);
}
public static void main(String[] argv) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
simpleFrame c = new simpleFrame();
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c.setSize(700,700);
c.setVisible(true);
}
});
}
}

所以我们不完全理解的是为什么第6行的JPanel声明后面有括号,那么我不知道第6-16行是如何的。就像括号之间一样,右括号后面有一个分号。我不知道它是如何工作的,每个命令行都放在一边,但声明 JPanel 的结构,JPanel mainPanel = new JPanel() { };

我正在尝试实现这个,以便我可以将图像导入到我的 JPanel 类中,然后使所有负空间透明,然后绘制它。我似乎无法理解程序的结构以及如何将其实现到类中。

我的代码如下:

public class Frame extends JPanel   {
/*
* This is the JPanel in which I want to add the transparent image to a JPanel
* then add the JPanel object,"Frame", above in a JFrame declared in my
* class above
*/
public Frame() {
JPanel jp = new JPanel();
jp.setSize(300,300);
jp.setVisible(true);
circle = new BufferedImage();
try {circle = ImageIO.read(new File("circle.PNG"));}
catch (IOException ex) {}
}
public void paintComponents(Graphics g) {
super.paintComponents(g);
g.drawImage(circle,0,0,300,300, null);
g.drawRect(50, 50, 50, 50);
}

}

这只是一个测试代码,用于导入图像,使其透明,然后将其绘制在 JPanel 上。我们只是想了解执行此操作的最佳方法,我发现的代码(第一个代码块)似乎很好地完成了这项工作,但我们无法找出将其实现到我们的代码中的最佳方法。

提前致谢,

罗比和尼克

最佳答案

示例 block 中带有 JPanel 的代码所做的就是在实例化 JPanel 类时立即声明该类。这是一种编码简写。这样做时,他们不必在新的 .java 文件中为 JPanel 编写正式的新命名类:该类的整个定义就在那里。如果您将其视为 Java 类定义,我相信它会更有意义。

如果您取出所有内容并将其放入从 JPanel 继承的正式 Java 类中,它应该可以工作。他们所做的事情的正式名称称为实现匿名类( http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html )。我通常不会这样做,因为这会使代码更难阅读,但这是允许的。

HTH

关于java - 关于制作基本游戏的对象声明和一些图像导入语句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com