Java-具有多个线程且具有thread.sleep的不同绘制
我是一个新手,我正在尝试制作一个游戏,但我不知道如何使用不同线程的不同画图重新绘制()。一个线程有thread.sleep,另一个没有 以下是我的代码: 游戏面板:Java-具有多个线程且具有thread.sleep的不同绘制,java,multithreading,paintcomponent,repaint,thread-sleep,Java,Multithreading,Paintcomponent,Repaint,Thread Sleep,我是一个新手,我正在尝试制作一个游戏,但我不知道如何使用不同线程的不同画图重新绘制()。一个线程有thread.sleep,另一个没有 以下是我的代码: 游戏面板: public class GamePanel extends JPanel implements MouseListener, MouseMotionListener{ EnemyEngine enemyE = new EnemyEngine(); public GamePanel() { new Thread(new
public class GamePanel extends JPanel implements MouseListener, MouseMotionListener{
EnemyEngine enemyE = new EnemyEngine();
public GamePanel() {
new Thread(new Runnable() {
@Override
public void run() {
while(true){
repaint();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
enemyE.update();
enemyE.repaint();
try {
Thread.sleep(1000/10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
public void paintComponent(Graphics g) {
// board painting
}
}
灌肠机:
public class EnemyEngine extends JPanel{
Vector<Enemy> enemyVect = new Vector<>();
Random rand = new Random();
public void paintComponent(Graphics g){
for (Enemy enemy : enemyVect) {
enemy.render(g);
}
}
public void update() {
for (Enemy enemy : enemyVect) {
enemy.move();
}
}
}
公共类EnemyEngine扩展了JPanel{
Vector enemyVect=新向量();
Random rand=新的Random();
公共组件(图形g){
for(敌人:enemyVect){
敌人。渲染(g);
}
}
public void update(){
for(敌人:enemyVect){
敌人。移动();
}
}
}
我已经在互联网上搜索过了,但仍然没有成功……或者我就是那个愚蠢的人:/
请帮我senpai我不太明白你关于重新喷漆的问题?
如果您想立即刷新ui,为什么不立即使用paintInstance(0,0,getWidth(),getHeight()) 首先,阅读。其次,
while(true)repaint()代码>将阻塞Swing事件线程;你不需要每秒绘制数百次。仅当确定绘制内容的数据已更改时,才调用repaint()。第三,必须使用javax.swing.Timer或java.awt.EventQueue.invokeLater(…),以确保只从awt事件调度线程调用swing方法;请参阅。一般来说,还建议将“绘制”和其他此类用户界面任务委托给一个线程。。。也许,这是一条不做其他事情的线。这个线程可能会在等待一个异步信号时休眠,该信号告诉它,“请现在去更新用户界面”,然后它就会唤醒并执行此操作。(这种设计也避免了请求淹没GUI。)我曾尝试使用计时器,但我不知道如何将其与图形一起使用您不将图形与计时器一起使用。计时器的ActionListener应该调用repaint()
,这会导致Swing自动调用paintComponent(和其他一些绘制方法)。