我正在尝试逐个字符地绘制字符串,以将光照效果添加到由文本组成的形状中.
while (i != line.length()) {
c = line.substring(i, i + 1);
cWidth = g.getFontMetrics().stringWidth(c);
g.drawString(c, xx += cWidth, yy);
i++;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当这两个字符作为字符串打印时,字符的宽度不是从另一个字符绘制的实际距离.有没有办法在graphics2d中获得正确的距离?
我刚开始学习有关Graphics2D类的基础知识,到目前为止,我能够绘制不同的对象和实现,ActionListener以实际在屏幕上移动它们onKeyPress.到目前为止一切都那么好,虽然我想做一些更复杂的事情.我想给出一个我的对象的路径,并仅在该特定路径上制作动画.
有点像,我会在天空画一条线,一架飞机应该坚持画线并保持自己在那条特定线上飞行.现在有可能吗?
我不需要任何代码,但很少有不同的方法或想法让我开始研究这个问题.我想法的可视化阐述如下.
起点 :

终点:

现在如上图所示,我的黄色框(在未来的平面中)应该在动画时坚持给定的路径(路径灰线)
我到目前为止的研究,
我搜索过我的流行语,比如java中的路径,发现Path2D和GeneralPath类,有没有人知道我是否可以用它来解决这个问题.
谢谢
我想将一个Java Swing组件,例如一个JButton,我也放在JFrame上,渲染到BufferedImage.这通常有效,但有一个主要缺点:文本抗锯齿,尤其是"LCD"抗锯齿模式,在渲染到BufferedImage时不起作用.
我已经将一些示例代码放在一起来演示问题,但首先是我的系统信息:
下面的示例代码将创建一个简单的JFrame,在其上放置一个JButton,然后将JButton呈现为文件"test.png":
public class TextAntiAliasingTest
{
public TextAntiAliasingTest() throws IOException
{
// Create Test-Button which will be rendered to an image
JButton button = new JButton( "The Test-Button" );
button.setSize( 200, 70 );
button.setLocation( 200, 150 );
// Create JFrame
final JFrame frame = new JFrame();
frame.setSize( 800, 600 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLayout( null );
frame.setLocationRelativeTo( null );
frame.add( button );
// Show JFrame
SwingUtilities.invokeLater( new Runnable() {
@Override public void …Run Code Online (Sandbox Code Playgroud) 我只是想将JPG文件旋转90度.但是我的代码输出的图像(BufferedImage)完全是黑色的.
这是重现的方式:( 在这里下载3.jpg )
private static BufferedImage transform(BufferedImage originalImage) {
BufferedImage newImage = null;
AffineTransform tx = new AffineTransform();
tx.rotate(Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BICUBIC);
newImage = op.filter(originalImage, newImage);
return newImage;
}
public static void main(String[] args) throws Exception {
BufferedImage bi = transform(ImageIO.read(new File(
"3.jpg")));
ImageIO.write(bi, "jpg", new File("out.jpg"));
}
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
(如果我将此黑色输出BufferedImage提供给图像缩放器库,它会很好地调整大小,原始图像仍然存在.)
我有以下类,它在第0层刷新jpeg文件,第1层用于绘制/绘制/草绘与粉碎事物相关的任何内容.但是在我的绘画中,当我想做一条细线时,它就会断裂.因为鼠标光标移动需要较慢.
如何解决快速鼠标移动,线路仍然连接?

package test;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Annotation {
// Image
private static Image backgroundImage;
private static BufferedImage _bufImage = null;
// Enum
public static enum Shape { RECTANGLE, OVAL, LINE }
private static enum State { IDLE, DRAGGING }
private static final Shape INIIIAL_SHAPE = Shape.RECTANGLE;
private static final Color INITIAL_COLOR = Color.RED;
private static Shape _shape = INIIIAL_SHAPE;
private static …Run Code Online (Sandbox Code Playgroud) 按下按钮时如何使用repaint()方法,Graphics p必须从头开始重新绘制所有内容?
谢谢.
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class fares extends JPanel{
private static final long serialVersionUID = 1L;
public static int xaxis1,xaxis2,yaxis3,yaxis4;
public ControlsB(square) {
final JButton btn1 = new JButton("Resize");
final Box b = Box.createHorizontalBox();
b.add(new JLabel("Please enter range: "));
Box b0 = Box.createVerticalBox();//create a vertical box to stack the controls
Box b1 = Box.createHorizontalBox(); // create a horizontal box for the x-axis
//x-axis
b1.add(new JLabel("mark "));
b1.add(new JLabel("for"));
f1.setMaximumSize(new Dimension(100,30)); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在OS X中创建一个简单的JFrame窗口,并使用Graphics2d在其上呈现一个简单的黑色方块:
public Start() {
running = true;
window = new JFrame("Finest Hour");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setPreferredSize(new Dimension(500, 500));
window.setSize(window.getPreferredSize());
FullScreenUtilities.setWindowCanFullScreen(window, true);
window.setIgnoreRepaint(true);
window.setVisible(true);
window.createBufferStrategy(2);
strategy = window.getBufferStrategy();
}
public static void main(String[] args) {
Start s = new Start();
s.loop();
}
public void loop() {
Random random = new Random();
while(running) {
Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(20, 20, 40, 40);
strategy.show();
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我使用strategy.show()时,窗口似乎在底部没有圆角.:

在没有缓冲策略的情况下渲染它,即:Graphics2D =(Graphics2D)window.getGraphics(); 生产一个圆角窗口:

我知道这是一个非常小的问题,但它仍然很烦人.有任何解决这个问题的方法吗?
我一直试图使用Java制作类似2D空间的游戏,只是为了它的乐趣.我决定只使用Java的Graphics2D渲染我的游戏,因为我没有心情去学习LWJGL.但是,我刚才意识到它是多么有限.例如,我意识到一个漂亮的绽放/发光效果看起来非常好.但是,我在Google上找不到有关使用Graphics2D并且不使用其他库的任何内容.
我正在寻找什么样的绽放效果:https:
//gamedev.stackexchange.com/questions/18594/how-can-i-make-this-style-of-2d-glowing-graphics
绽放信息:http:
//en.wikipedia.org/wiki/Bloom_%28shader_effect%29
我得到以下代码:
import java.awt.*;
import javax.swing.*;
public class GraphicPanel extends JPanel {
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setFont(new Font("Arial",Font.BOLD,24));
g2d.drawString("A",300,250);
g2d.rotate(45 * Math.PI/180);
g2d.drawString("B",300,250);
}
}
Run Code Online (Sandbox Code Playgroud)
它应该旋转B并将其放在A所在的相同位置,但是由于某种原因,B会在完全不同的位置出现。
我很确定我理解为什么。这是因为缩放,旋转等操作时会操纵整个协调系统(我正确吗?)
无论如何,我想知道如何旋转或缩放对象,并且仍然使它出现在以前的位置。例如,在一个游戏中,每10毫秒不断更新和显示一次自身,其中一个精灵正在旋转,但是仍然停留在10毫秒之前的位置。
编辑:试图事先搜索Google,猜想这个问题的措辞有点棘手,因为我发现没有帮助。
非常感谢 :)
因此,我一直试图在相当长的一段时间内制作一个非常精确的古老口袋妖怪黄色的克隆,一个令人费解的但仍然微妙的机制令我困惑.正如您在上传的图像中看到的那样,在进入另一个游戏位置(例如楼梯或进入建筑物)后,在两个阶段中进行了某种颜色操作.
实现这一目标的一种简单(和邋)的方式和我迄今为止使用的方法是为每个图像(精灵图块图,城镇图像)制作三个png,并且相应地调整它们的颜色以匹配过渡的每个阶段.当然,一段时间后,这将变得非常耗时.
所以我的问题是有没有人知道使用java和Graphics2D实现这种颜色处理效果的更好方法?
提前致谢,
亚历克斯
