Tag: 动画

调整动画GIF的大小,同时使用java保持动画

我在java中使用Graphics2D来调整图像大小,它与jpg,png和其他格式完美配合。 我的问题是动画GIF图像,重新调整动画后不见了! 这是我使用的方法: private BufferedImage doResize(int newWidth, int newHeight, double scaleX, double scaleY, BufferedImage source) { GraphicsConfiguration gc = getDefaultConfiguration(); BufferedImage result = gc.createCompatibleImage(newWidth, newHeight, source.getColorModel().getTransparency()); Graphics2D g2d = null; try { g2d = result.createGraphics(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.scale(scaleX, scaleY); g2d.drawImage(source, 0, 0, null); } finally { if (g2d != […]

Java KeyEvent方形运动

我有一段代码,当按下任何箭头键时会触发KeyEvent。 这反过来导致正方形在屏幕上移动。 现在我注意到当我按住键时,方块移动但是如果你理解我的意思,那么在最初移动到后续移动之后的时间很长 我将如何减少这个时间? 谢谢! import java.awt.*; import javax.swing.*; import squarequest.sprites.*; import java.awt.event.*; public class GamePanel extends JPanel{ private final int HEIGHT = 400; private final int WIDTH = 600; private Square square; private Circle circle; public GamePanel(){ addKeyListener(new DirectionListener()); setBackground (Color.white); setPreferredSize(new Dimension(WIDTH, HEIGHT)); setFocusable(true); square = new Square(); } public void paintComponent(Graphics g){ […]

如何从一个x,y坐标动画到另一个? (爪哇/处理)

我在Processing中制作一个简单的动画。 我想将图像从其起点设置为屏幕上定义的x,y值。 我有两个方法, update()和draw() ,它们在每个tick上运行。 update()是代码将处理x / y坐标以在下一个tick上提供draw()方法的地方。 然后draw()方法绘制图像,传入更新的x和y值。 最小的例子: class ScrollingNote { float x; float y; float destX; float destY; PImage noteImg; ScrollingNote(){ noteImg = loadImage(“image-name.png”); this.x = width/2; this.y = 100; this.destX = 100; this.destY = height; } void update(){ // TODO: adjust this.x and this.y // to draw the image slightly closer […]

如何使用Swing制作动画?

我正在制作一个JApplet并且遇到动画问题。 这是我的代码: this.sprite.setBounds(0,0,20,17); this.sprite.setIcon(this.rangerDown); for(int i = 0; i< 16;i++) { this.sprite.repaint(); this.sprite.setLocation(this.sprite.getX(), this.sprite.getY()+10); try{ Thread.currentThread().sleep(100); }catch(InterruptedException e){ } } 有了这个,没有动画:在循环过程中没有任何反应,repaint()方法似乎只在精灵停止移动时才会动作。 我想只使用Swing,任何关于如何进行的想法? 谢谢阅读。

使用LibGDX,你如何使用单独的图像动画?

我正在学习如何使用LibGDX制作游戏,我正在尝试制作一个小型平台游戏(使用Eclipse)。 我在主角上制作了4张图像,以便在移动时制作动画。 但是,我在网上找不到任何东西,告诉我如何在不使用SpriteSheet的情况下制作动画。 你如何使用4种不同的图像制作动画?

二元搜索树插入中节点颜色的动画变化

我已经实现了二叉搜索树的显示。 这是代码,它在jpanel中绘制二叉树。 public void paint(Graphics g) { super.paint(g); System.out.println(” in paint”); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int num = bst.size; int y = 25; int nodes = 1; int level = 1; int length = getWidth(); Queue q = new LinkedList(); Queue q2 = new LinkedList(); q.add(bst.root); while (num > 0) { int […]

不移动鼠标光标时Java动画会断断续续

我有一个非常简单的动画,一个大字体的文本连续(逐个像素)向左移动。 首先将文本转换为图像,然后启动计时器任务,重复(每10-20毫秒)将图像的x坐标递减1,然后执行重绘()。 该程序在某些系统上显示出奇怪的行为。 在我的电脑上使用nVidia卡,它运行顺畅。 在我的Vaio笔记本电脑上,在BeagleBoneBlack和朋友的Mac上,它会严重破坏。 它似乎暂停一段时间,然后跳到左边大约10个像素,再次暂停,依此类推。 让我感到困惑的是,在这些系统中,如果你不触摸鼠标,动画就会断断续续。 只要您在窗口内移动鼠标光标,无论速度有多慢,或者拖动窗口本身,动画都会非常流畅! 任何人都能解释一下吗? 这是程序: import java.awt.*; import java.awt.image.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; class Textimg extends JComponent { String str; Font font; int x = 0; final int ytext = 136; Image img; public Textimg(String s) { str = s; font = new Font(“Noserif”, Font.PLAIN, 96); […]

游戏循环中最佳睡眠时间计算的研究

在编写动画和小游戏时,我开始了解Thread.sleep(n);重要性Thread.sleep(n); 我依靠这种方法告诉操作系统何时我的应用程序不需要任何CPU,并使用它使我的程序以可预测的速度进行。 我的问题是JRE在不同的操作系统上使用不同的实现此function的方法。 在基于UNIX(或受影响)的操作系统上,例如Ubuntu和OS X,底层JRE实现使用function良好且精确的系统将CPU时间分配给不同的应用程序,从而使我的2D游戏平滑无滞后。 但是,在Windows 7和较旧的Microsoft系统上,CPU时间分配似乎有所不同,并且您通常会在给定睡眠量后恢复CPU时间,从目标睡眠开始大约1-2 ms。 但是,偶尔会有额外10-20毫秒的睡眠时间爆发。 这导致我的游戏在发生这种情况时每隔几秒就会滞后一次。 我注意到这个问题存在于我在Windows上尝试过的大多数Java游戏中,Minecraft是一个值得注意的例子。 现在,我一直在互联网上寻找解决这个问题的方法。 我见过很多人只使用Thread.yield(); 而不是Thread.sleep(n); 无论你的游戏实际需要多少CPU,它都会以当前使用的CPU核心满负荷为代价完美运行。 这对于在笔记本电脑或高能耗工作站上玩游戏并不理想,而且在Mac和Linux系统上进行不必要的权衡。 进一步outlook我发现了一种常用的纠正睡眠时间不一致的方法,称为“旋转睡眠”,你只能一次命令睡眠1毫秒,并使用System.nanoTime();检查一致性System.nanoTime(); 方法,即使在Microsoft系统上也非常准确。 这有助于正常1-2毫秒的睡眠不一致,但它无法帮助抵抗偶尔爆发+ 10-20毫秒的睡眠不一致,因为这通常会导致花费更多的时间比我的循环的一个循环应该花费所有一起。 经过大量的观察,我找到了安迪·马拉科夫的这篇神秘文章,这对改善我的循环很有帮助: http : //andy-malakov.blogspot.com/2010/06/alternative-to-threadsleep.html 基于他的文章我写了这个睡眠方法: // Variables for calculating optimal sleep time. In nanoseconds (1s = 10^-9ms). private long timeBefore = 0L; private long timeSleepEnd, timeLeft; // The estimated game update rate. private double timeUpdateRate; […]

如何删除动画中的最后一个图像

我要做的是创建一个动画,创建一个“运行”的动作。 每当我在屏幕上绘制它时,动画中的最后一帧都会被遗留(因此当精灵移动时会留下一些动画帧的痕迹)。 我已经尝试过if语句并在帧更改时更改图像的绘制位置: if(a2.sceneNum() == 0) spectre_Draw1 = (screenWidth() / 2 – 120 / 2 + 120 – 6); else spectre_Draw1 = 0; g.drawImage(pic[2], spectre_Draw1, (screenHeight() / 2 – 180 / 2), null); if(a2.sceneNum() == 1) spectre_Draw2 = (screenWidth() / 2 – 120 / 2 + 120 – 6); else spectre_Draw2 = 0; g.drawImage(pic[3], spectre_Draw2, […]

如何在JTable单元格中显示动画

我正在寻找一种在表格单元格中显示动画进度指示器(动画GIF,通过Java2D等呈现的旋转轮,此处没有首选项)的方法,直到计算或检索到最终显示的值。 到目前为止,我刚刚将一个静态的“待处理…”文本放入每个尚未准备加速显示的单元格中。 当数据从后台线程到达时,我将其放入适当的单元格并在表格上调用重绘。 使用静态标签或图像,这可以正常工作,但因为单元格渲染仅将其用作橡皮图章的一种,并且不会为每个单元格创建单独的实例(这当然是性能上的好主意),例如动画GIF不是在单个细胞中“玩”。 我怎样才能达到这样的效果? 与仅仅是一个简单的文本相比,它将形成一个更“精致”的UI。