标签: java-2d

Java swing小型2D游戏:如何对视图进行建模?

在一个小型的Java swing 2D游戏中,创建棋盘视图的最佳解决方案是什么?

  1. 使用一个组件用于电路板并立即定制它和检查器的每个方块?
  2. 使用一个组件用于电路板并创建另一个组件,使用自己的paint组件对该方块进行建模,仅为方形工作.使用布局将每个Square实例放置在电路板中?

我知道这是主观的,我不想打架.我只需要一些线索来弄清楚自己应该走哪条路.我已经开始了一个侧面项目,我已经使用了1),感觉有些不对劲.

java swing java-2d

4
推荐指数
1
解决办法
1380
查看次数

Java:获得FontMetrics实例的更方便的方法

是否有更友好的方式来获取FontMetrics的实例

FontMetrics fm = Graphics.getFontMetrics(Font);
Run Code Online (Sandbox Code Playgroud)

我讨厌这种方式,因为下面的例子:

如果您想在游戏中创建一个菜单,并且您希望屏幕中心的所有菜单项都需要fontmetrics.但是,大多数情况下,菜单项是可点击的.所以我创建了一个数组,Rectangles并且所有矩形都适合于项目,因此当按下鼠标时,我可以简单地使用

for (int i = 0; i < rects.length; i++)
if (rects[i].contains(mouseX, mouseY)) { ... }
Run Code Online (Sandbox Code Playgroud)

但是为了创建rects,我还需要FontMetrics作为它们的坐标.所以这意味着我必须在菜单的paint-method中构造所有的矩形.

所以我想要一种获取FontMetrics的方法,这样我就可以在构造函数调用的方法中构造Rectangles.

java java-2d fontmetrics

4
推荐指数
2
解决办法
7140
查看次数

如何剪辑 Path2D?

有没有办法将 Path2D 剪辑到区域/其他 path2D 实例?

简单的例子(我正在寻找一些可以在一般情况下工作的东西,其中路径可能包括四边形或立方体,并且可能是也可能不是单数):

我有一条线段 (0,10) -> (30,10),我想将其剪辑在三角形 (10,0)、(20,20)、(20,0) 内,理想情况下会产生线段 (15 ,10) -> (20,10)

我可以使用“new Area(Shape);”将 Path2D 转换为区域 然后使用“Area.intersect(area)”进行剪辑,但是如果路径未闭合,这将返回一个空白区域。

我可以使用“Graphics2D.clip(Shape)”剪辑绘图区域,但我希望获得返回的形状(在某些情况下,我希望在实际渲染之前进行进一步的操作)

在浏览了 API 文档后,我找不到直接执行此操作的方法。我错过了什么吗?

java java-2d

4
推荐指数
1
解决办法
2876
查看次数

在 Java 中调整索引图像的大小而不丢失透明度

这是我调整图像大小的功能。质量虽然不是photoshop的,但也可以接受。

不可接受的是索引 png 上的行为。
我们预计,如果我们缩小具有透明索引的 256 色调色板的图像,我们将得到具有相同透明度的调整大小的图像,但事实并非如此。

因此,我们对新的 ARGB 图像进行了调整大小,然后将其减少到 256 种颜色。问题是如何“重新引入”透明像素索引。

private static BufferedImage internalResize(BufferedImage source, int destWidth, int destHeight) {
    int sourceWidth = source.getWidth();
    int sourceHeight = source.getHeight();
    double xScale = ((double) destWidth) / (double) sourceWidth;
    double yScale = ((double) destHeight) / (double) sourceHeight;
    Graphics2D g2d = null;

    BufferedImage resizedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TRANSLUCENT);

    log.debug("resizing image to  w:" + destWidth + " h:" + destHeight);
    try {

        g2d = resizedImage.createGraphics();

        g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_DITHERING, …
Run Code Online (Sandbox Code Playgroud)

java png image java-2d

4
推荐指数
1
解决办法
4589
查看次数

如何在矩形上创建和分布对角线条纹?

我希望能够使用JFreeChart创建类似于以下图片的条形图。

理想的结果

它是一种非常基本的单色条形图,但有一个“奇特”的细节:对角线条纹。我以为可以通过在普通条顶部叠加另一张图片来实现这一点。该图片将具有与条相同的尺寸,并具有对角白色条纹和透明背景。我不太确定如何执行此操作,因为我几乎没有GUI经验,但是我发现了一篇非常有用的文章,涉及将图像叠加在JFreeChart的图形上,因此,我很确定自己应该能够做到这一点。的。

但是我应该如何创建斜条纹?我知道如何分配从左下角到右上角的线,而不是在左上角和右下角的上限线。我可以以某种方式在矩形的外部绘制(并且不包含在图片中)吗?

编辑:经过一些搜索后,我看不到我建议用透明背景覆盖图像,因为我找不到有关如何执行此操作的示例。另一方面,仅在矩形上绘制线条可能会更容易。

swing transparency overlay jfreechart java-2d

4
推荐指数
1
解决办法
3416
查看次数

Java:如何从ascender行drawString()

我通过使用Java2D Library的drawString(...)函数在屏幕上显示一些图形文本.

指的这个图中的文章,我想从上升段线,而不是基准拉我的字符串.简单来说,有没有办法计算高度b/w上升线和基线?

java java-2d

4
推荐指数
2
解决办法
947
查看次数

将图像拆分为可点击区域

有没有办法将图像分割成区域(现在它是JLabel但我可以在必要时更改它)?
我在我的程序中使用swing并且我有一个图像(这个例子是正方形),里面有一些三角形,星形和梯形(它可以是JPG,PNG等).
想法是用户将在其中一个形状中单击,然后我将在用户单击的区域顶部放置另一个小图标.用户可以点击多个区域,但在一天结束时,我需要知道点击了哪些形状.

似乎有可能有人吗?

java swing image jlabel java-2d

4
推荐指数
1
解决办法
6277
查看次数

如何在java中使用普通矩形轮廓绘制圆角矩形

对于我的java应用程序,我需要一个圆形矩形,其轮廓看起来像一个普通的矩形,就像这样

在此输入图像描述

我知道你可以通过在其中绘制一个普通的矩形和一个RoundRect来做到这一点,但我不想在其中绘制一个RoundRect,因为我想在其中绘制其他东西.

所以圆形的矩形有正常的角落.我如何用Java绘制它?

问题是如果我使用图层,矩形看起来像这样: 在此输入图像描述角落充满了错误的颜色.我该如何预防呢?

java swing awt paint java-2d

4
推荐指数
2
解决办法
2万
查看次数

在游戏中使用图形的最佳方式

我是 Java 和编程的新手,我正在尝试用宇宙飞船和外星人编写一个小射击游戏,但在图形方面有很多问题。似乎我混合了很多不同类型的组件。

我该怎么做才正确?
- 我应该使用 SwingJFrame然后将其添加为Graphics对象吗?
- 我应该先制作一个面板,然后在上面添加图形吗?
- 或者我应该使用画布而不是 JPanel?

有很多选择,在网上搜索答案让我很困惑。一些人建议使用该paint()方法,而另一些人则在使用paintComponent()...

以正确顺序放置图形的首选方式是什么,我应该使用哪些类?

java animation swing awt java-2d

4
推荐指数
2
解决办法
5194
查看次数

获得线和形状的交叉点

我有一个自定义形状,如图所示.假设覆盖图像中形状的蓝色矩形描绘了该形状的边界框.

如果我在边界矩形的一个对角线上画线,我怎样才能得到交点(在图像中它们是用绿色绘制的)?

我使用的是Java2D,我有一个GeneralPath,其中包含我在屏幕上绘制形状的所有坐标.

自定义形状

java math geometry java-2d computational-geometry

4
推荐指数
1
解决办法
3831
查看次数