问题标签 [java-2d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
13819 浏览

java - Drawing multiple circles with Java2D

I am trying to use Java2D to do some simple graphics programming. I've started easy, just trying to display a couple of circles in a JFrame. I was successful displaying a single circle, but when adding a second circle, only the last circle added to the JFrame is displayed. I use class Circle to define my circle and to override the paintComponent method used to display it. Any suggestions on what I might be doing wrong would be greatly appreciated. Code for my classes Circle and DancingCircles is provided below for reference.

Thanks!

Paul

0 投票
2 回答
10912 浏览

java - 在Java中生成矩形边框的问题?

我正在使用java.awt.geom.Rectangle2D.Double类来生成一个矩形。我想生成一个填充有颜色(比如绿色)并有边框(轮廓)的矩形。

现在的问题是如果我打电话

然后它不会填充矩形,当我打电话时

那么 id 不会生成边框。

0 投票
5 回答
68525 浏览

java - 如何在 Java 中绘制有向箭头线?

我想通过 Java 绘制一条有向箭头线。

目前我在用java.awt.Line2D.Doubleclass画线

但只有线条出现,没有方向箭头出现。 BasicStroke.Join_BEVEL用于绘制有向箭头。它在两条线段相交时应用。

我正在绘制的线与矩形的边界相交,但未绘制有向箭头。只画了一条简单的线。

有什么我想念的吗?

0 投票
4 回答
1267 浏览

java - Java 2D 图形:无法覆盖图像

我试图掌握 java 2d 图形

我基本上得到了一个带有背景图像的JPanel,如下所示:

在绘画组件中,我想在一个循环中覆盖从某些 xml 获得的各种 xy 点的小图像 12x12 像素。

似乎无法将图像覆盖在我的第一个图像上

我在这里有点迷路并且生锈了

任何帮助都会 b gr8

0 投票
2 回答
2514 浏览

java - 在 Java 2D 中创建复合形状

我使用 Java 2D 将几条贝塞尔曲线 ( CubicCurve2D) 修补在一起以创建一个“斑点”。我现在面临的问题是如何:

  1. 用给定的颜色有效地填充斑点。
  2. 有效地确定给定点是否位于 blob 内。

我注意到 thstCubicCurve2D实现Shape了它提供了许多contains用于确定“内部”的方法,并且Graphics2D能够Shape通过fill(Shape)(我相信使用ShapegetPathIterator方法来做到这一点)填充 a。

鉴于此,我希望我可以创建一个组合Shape,从而我的getPathIterator(AffineTransform)方法将简单地将底层PathIterators 链接在一起。但是,NoSuchElementException一旦我的形状包含多个CubicCurve2D. 即使我确实设法实现了这一点,我也不相信它会按预期工作,因为 aCubicCurve2D总是在凸面填充,而我的“blob”由凹凸曲线组成。“包含”问题更加困难,因为一个点可以合法地位于 blob 内,但不能位于任何单独的曲线内。

  • 我是以正确的方式解决这个问题(试图实现Shape?)还是有一种我不知道的惯用方式来做到这一点?我原以为合成几何形状的问题会相当普遍。
  • 有人对如何解决这个问题有任何建议吗?

提前致谢。

0 投票
1 回答
5672 浏览

image - Java - 使用 Graphics.drawImage() 和 2 屏幕缓冲区策略绘制许多图像会扭曲和剪切图像

我正在使用循环来调用双缓冲绘画。这与覆盖我唯一的 Panel 的重绘方法一起,旨在将重绘的完全控制权传递给我的循环,并且仅在必要时渲染(即在 GUI 中进行了一些更改)。

这是我的渲染例程:

如您所见,这是非常标准的。我从缓冲区策略(初始化为 2)中获取 grpahics 对象,将其设为全黑并将其传递给我的“窗口”对象的绘制方法。

使用图形对象完成窗口后,我将其处理并在缓冲区策略上调用 show 以显示虚拟缓冲区的内容。

重要的是要注意,窗口将图形对象传递给填充窗口的许多其他子组件,而每个子组件又使用图形对象的相同实例在屏幕上绘制一些东西:文本、形状或图像。

当系统运行并呈现大图像时,我的问题开始出现。图像似乎被切成几块并一次又一次地绘制(3-4 次),在图像应该渲染的位置内部使用不同的偏移量。请参阅我的附件图片:

这是原始图像: 替代文字 http://img109.imageshack.us/img109/8308/controller.png

这就是我得到的: 替代文字 http://img258.imageshack.us/img258/3248/probv.png

请注意,在第二张图片中,我在图片上渲染形状 - 这些形状始终位于正确的位置。

知道为什么会这样吗?如果我将图像保存到文件中,因为它在内存中,就在调用 g.drawImage(...) 之前它与原始图像相同。

0 投票
2 回答
1857 浏览

java - Java 2D 着色/填充

我已经从贝塞尔曲线(下面的屏幕截图)创建了一个“斑点”,现在想以一种看起来像伪 3D 的方式对其进行着色,所有“左”边缘的阴影较暗,所有“右”边缘的阴影较浅,或许还有表面本身的纯白色“光点”。例如:我对如何实现此视频中使用的阴影感兴趣。

  • 谁能推荐一个实现这一目标的好方法?我猜标准 Graphics2D.fill 和 setPaint 方法可能不够复杂。
  • 另外,任何人都可以推荐一些好的资源(最好是免费/在线)来了解更多信息吗?

编辑

一些附加信息:为了实现下面的平面填充效果,我正在创建一个Area对象,并使用将单个Ellipse2D Shapes 添加到它add(new Area(ellipse)),然后最后添加中心多边形区域以避免在中间留下空白区域。

替代文字 http://www.freeimagehosting.net/uploads/bc8081cbf2.png

0 投票
5 回答
2800 浏览

java - 检测闭合贝塞尔曲线中的自交叉

我通过将三次贝塞尔曲线拼接在一起创建了一个“斑点”形状(下面的屏幕截图)。我希望能够检测到曲线越过自身或另一条曲线的情况,并且想知道是否有推荐的方法或已知的算法来执行此操作?

我的一个想法是使用 aFlatteningPathIterator将形状分解为直线段,然后检测给定段是否与另一个段相交,但我对是否有更好的方法感兴趣(因为这将具有二次性能)。如果我确实采用这种方法,Java中是否有库函数来检测两条线段是否重叠?

谢谢。

没有交叉

没有交叉 http://www.freeimagehosting.net/uploads/7ad585414d.png

交叉

跨界 http://www.freeimagehosting.net/uploads/823748f8bb.png

0 投票
6 回答
4408 浏览

java - OO方式的游戏设计

我正在设计一个简单的游戏,它使用 Java 2D 和牛顿物理学。目前我的主要“游戏循环”看起来像:

当一个实体被指示更新自身时,它将根据施加在它身上的当前力调整其速度和位置。但是,我需要实体表现出其他行为;例如,如果玩家射杀了“坏人”,则该实体应该被摧毁并从游戏世界中移除。

我的问题:以面向对象的方式实现这一目标的最佳方法是什么?到目前为止,我看到的所有示例都将游戏循环合并到一个名为 like 的 God 类Game中,该类执行以下步骤:检测碰撞、检查如果坏人杀死、检查如果玩家杀死、重绘等封装所有游戏状态(剩余生命等)。换句话说,它是非常程序化的,所有的逻辑都在 Game 类中。谁能推荐一个更好的方法?

以下是我到目前为止想到的选项:

  • 将 a 传递GameContext给每个实体,如果需要,该实体可以从中移除自己或更新游戏状态(例如,如果玩家被杀死,则“未运行”)。
  • 将每个注册GameEntity为中心Game类的侦听器并采用面向事件的方法;例如,碰撞将导致CollisionEvent向碰撞中的两个参与者开枪。
0 投票
2 回答
1401 浏览

java - Java swing 2D小游戏:如何建模视图?

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

  1. 为电路板使用一个组件并一次自定义绘制它和检查器的每个正方形?
  2. 为电路板使用一个组件并创建另一个组件来模拟正方形,并使用它自己的油漆组件只为正方形完成这项工作。使用布局将每个 Square 实例放置在板上?

我知道这是主观的,我不想为此吵架。我只需要一些线索来弄清楚我应该走哪条路。我已经开始了一个辅助项目,并且我使用了 1),感觉有问题。