Java 延迟后如何获取新图像?
我试图在每10秒的延迟间隔后,在屏幕上绘制一个相同图像的新图像。我自己也一直在想办法,我也查了一些东西,但找不到任何有帮助的 我的具体问题是,我不知道如何使用原始图像绘制新图像。我想让它每隔10秒出现一个新图像,并开始跟随它的ID数组,然后跟随它自己的XY坐标(IDx[0]=x;IDx[0]=y;) 对于每个新图像,图形中的普通g.drawImage被排除在外,因为我需要它来绘制新图像/机器人,直到满足停止它们的条件。但目标是一样的,只是以一种自动的方式 我的窗口:Java 延迟后如何获取新图像?,java,image,swing,Java,Image,Swing,我试图在每10秒的延迟间隔后,在屏幕上绘制一个相同图像的新图像。我自己也一直在想办法,我也查了一些东西,但找不到任何有帮助的 我的具体问题是,我不知道如何使用原始图像绘制新图像。我想让它每隔10秒出现一个新图像,并开始跟随它的ID数组,然后跟随它自己的XY坐标(IDx[0]=x;IDx[0]=y;) 对于每个新图像,图形中的普通g.drawImage被排除在外,因为我需要它来绘制新图像/机器人,直到满足停止它们的条件。但目标是一样的,只是以一种自动的方式 我的窗口: package pack;
package pack;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Window extends JPanel implements Runnable {
public static final int GAME_WIDTH = 512;
public static final int GAME_HEIGHT = GAME_WIDTH * 3 / 4;
public static final int SCALE = 2;
public static Image Player = Controls.Player;
public static Image BB = ImageLoader.BB;
public static Image Grass = ImageLoader.Grass;
public static boolean painting = true;
public static boolean Start = true;
public static boolean Menu;
public static boolean ONhs;
public static boolean OFFhs;
public void paint(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.drawString("UPS: " + Integer.toString(UPS.ups), 100, 120);
g.drawString("FPS: " + Integer.toString(UPS.fps), 100, 130);
// // MENU ////
if (Menu) {
Image Grass = ImageLoader.Grass;
Image onHoverStart = ImageLoader.onHoverStart;
Image offHoverStart = ImageLoader.offHoverStart;
g.drawImage(Grass, GAME_WIDTH * SCALE / 4, GAME_HEIGHT * SCALE / 6, null);
if (ONhs) {
g.drawImage(onHoverStart, 400, 250, null);
} else {
g.drawImage(offHoverStart, 400, 250, null);
}
}
// // STARTED // //
if (Start) {
Image Player = Controls.Player;
Image BB = ImageLoader.BB;
g.drawImage(BB, PlayerData.BBDirectionx, PlayerData.BBDirectiony, null);
g.drawImage(ImageLoader.Bot[0], Mob.BotxSELF - 32, Mob.BotySELF - 25, null);
g.drawImage(ImageLoader.Bot[1], Mob.BotxSELF - 32, Mob.BotySELF - 25, null);
g.drawImage(Player, Controls.Playerx - 45, Controls.Playery + 5, null);
}
}
@Override
public void run() {
while (painting) {
UPS.fpstick = UPS.fpstick + 1;
repaint();
try {
Thread.sleep(12);
} catch (InterruptedException e) {
}
}
}
public static void draw(Graphics g) {
g.drawImage(ImageLoader.Bot[0], 32, 25, null);
}
public Window() {
JFrame jf = new JFrame();
JPanel panel = new JPanel(new BorderLayout());
Controls c = new Controls("Window using Controls for Listener");
panel.add(this);
this.setPreferredSize(new Dimension(GAME_WIDTH * SCALE, GAME_HEIGHT * SCALE));
this.setMinimumSize(new Dimension(GAME_WIDTH * SCALE, GAME_HEIGHT * SCALE));
this.setMaximumSize(new Dimension(GAME_WIDTH * SCALE, GAME_HEIGHT * SCALE));
this.setBackground(Color.DARK_GRAY);
jf.setContentPane(panel);
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(GAME_WIDTH * SCALE, GAME_HEIGHT * SCALE);
jf.setVisible(true);
jf.setResizable(false);
jf.addKeyListener(c);
jf.addMouseListener(c);
jf.addMouseMotionListener(c);
}
}
非常感谢您的帮助 您已经有了在单独的thred中绘制所需的结构,为什么不使用它们呢?这看起来太像家庭作业了…总是调用您重写的方法的super.XXX()。您应该覆盖
paintComponent()
:
不要将Thread.sleep()用于动画。相反,您应该使用
对于每个新图像,图形中的普通g.drawImage被排除在外,因为我需要它来绘制新图像/机器人
您可以使用相同的BuffereImage。当计时器启动时,您将更新图像。然后paintComponent()方法只绘制更新后的图像。Oops在交换一些内容后,我没有将paint()更改为paintComponent()。那里的大多数错误都来自于测试。我将尝试更多的东西并发布我的解决方案。。如果我找到它^^
//public void paint(Graphics g) {
public void paintComponent(Graphics g) {
super.paintComponent(g);