我刚刚完成了一个 2D vector/转换库,我想在一个简单的示例中使用它。我有一个有效运行的主循环和更新/渲染方法。我一直试图理解人们在使用 Java2D 或 jPanels 或 jFrames 时所谈论的内容,但这些对我来说都毫无意义。
我之前制作过一些 2D 示例,但它使用的是带有线程 Canvas 的 jFrame,这是我在遵循 YouTube 教程时制作的。它的问题是它基本上是一个整数数组,允许单独的像素设置,并且您只能使用整数作为位置,而不是像我的库使用的 float 。
所以我的问题是:我将如何制作一个简单的打开/关闭窗口,我可以绘制一个 Sprite ( Sprite 应该只是某种 slickUtil 加载的东西,还是我必须加载单个像素,因为我之前做过吗?)到,并且接受以原点为中心的笛卡尔坐标的浮点值。
最佳答案
从 JComponent 派生一个类并重写 PaintComponent 方法。它传递一个可以转换为 Graphics2D 对象的 Graphics 对象。后者支持更改坐标系。
对于绘制 Sprite :在循环中加载单个像素非常慢。 Graphics2D 中有一个drawImage 方法,它支持位图传送 Sprite 所需的一切。
下面是在独立示例中设置具有居中原点的 Graphics2D 对象的示例:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Draw2D extends JFrame {
public Draw2D() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new DrawPane(), BorderLayout.CENTER);
pack();
}
public static void main(String[] args) {
Draw2D drawing = new Draw2D();
drawing.setVisible(true);
}
}
class DrawPane extends JComponent {
public DrawPane() {
setPreferredSize(new Dimension(640, 640));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
// use anti-aliasing for smooth lines
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// move origin to center
g2.translate(getWidth() / 2, getHeight() / 2);
// scale as you need. Using negative y so that y points upward
// note that non-square window sizes will cause a different aspect ratio,
// you probably want to use Math.min(width, height) or something
g2.scale(getWidth() / 2, -getHeight() / 2);
// set color and thickness
g2.setColor(Color.red);
g2.setStroke(new BasicStroke(0.001f));
// draw coordinate lines
g2.draw(new Line2D.Float(-1f, 0f, 1.0f, 0f));
g2.draw(new Line2D.Float(0, -1.0f, 0.0f, 1.0f));
// draw a vector
g2.draw(new Line2D.Float(0f, 0f, 0.25f, 0.25f));
}
}
关于java - 如何制作一个可以渲染的简单窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20251888/