java - 如何在 Java 中移动球

标签 java

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/

相关文章:

java - 准备好的语句和串行数据类型

java - 如何在android TextView 中通过文本连续运行阴影效果?

java - JAVA中通过ref、double、Double传递参数

java - Hbase客户端扫描程序挂起

java - 在 Play Framework 中的@Entity Model 类上实现 equals() 和 hashCode() 可以吗?

java - 记录器 slf4j 未使用配置的 logback 级别

java - 在 OnFocusChanged Listener 中保持对 Edittext 的关注

java - 方法是否可以知道调用它的对象的类型(即调用它的子类型)

java - 创建一个模式正则表达式以从 JAVA 中的字符串中提取小时和分钟

java - 从两个线程写入一个文件会产生意外结果