import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game extends JFrame{
int x1=(int)( Math.random()*10),x2=(int)(Math.random()*45),x3=(int)(Math.random()*35);
int y1=(int)( Math.random()*10),y2=(int)(Math.random()*45),y3=(int)(Math.random()*35);
int temp=0;
Game(){
this.setBounds(100,100,200,300);
this.setTitle("LEVEL 1:");
Container c=this.getContentPane();
c.setVisible(true);
this.setVisible(true);
add(new g());
for(int loop=0;loop<=10;loop++){
System.out.print("abc");
ballfall();}
}
protected void ballfall(){
if(temp==0){
for( ;y1<=250;y1++){
this.y1+=5;
repaint();
}
}
}
class g extends JPanel{
protected void paintComponent(Graphics g){
g.setColor(Color.WHITE);
g.fillRect(0, 0, 200, 300);
g.setColor(Color.PINK);
g.fillOval(x1,y1,15,15);
g.setColor(Color.YELLOW);
g.fillOval(x2,y2,15,15);
g.setColor(Color.RED);
g.fillOval(x3,y3,15,15);
g.setColor(Color.RED);
g.fillArc(80, 230, 50, 30, 180, 180);
}
class ml extends MouseAdapter{
}
}}
上面提到的是我的代码。球的 x 和 y 坐标用随机数初始化。现在,当执行代码时,球应该会掉落(即,y 坐标应该增加)。但问题是球落下了却看不到落下。在循环运行 fallball() 之后,球似乎位于终点。那么我怎样才能让这个球移动呢?
最佳答案
你从不等待。这一切发生的速度与计算机的速度一样快(而且速度非常快)。
最简单的做法是将 Thread.sleep(100);每次通过循环。然后从那里变得更高级。
这可能看起来像这样
for( ;y1<=250;){
this.y1+=5;
repaint();
Thread.sleep(100);
}
这将在每次更新之间放置 100 毫秒的 sleep 时间。也就是每秒更新 10 次。
无论怎么想,这段代码都不是好,但它会让您朝着正确的方向前进,自己动手完成是学习过程的一半。但是,这里还有一些需要考虑的事项:
- 球的速度取决于帧速率,考虑将速度乘以帧的实际时间以获得 y 的变化
Thread.sleep(100);
请求 hibernate 100 毫秒,但它可能无法获得。考虑测量您的实际 sleep 时间您正在使用 for 循环模拟 while 循环。改为使用 while 循环
while(y1<=250){ this.y1+=5; repaint(); Thread.sleep(100); }
Thread.sleep()
在 Swing 中并不理想,请考虑使用 Swing Timer .- 这在物理上绝对不现实,但我想你知道这一点。
关于java - 如何在 Java 中移动球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663854/