同一个Thread不能start两次
这样改纤数旦下
import java.awt.BorderLayoutimport java.awt.Color
import 毕返java.awt.Graphics
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JPanel
@SuppressWarnings("serial")
public class MoveBall02 extends JFrame {
private JButton jbtu = null
private Ball02 ball = null
Thread t = null
public static void main(String[] args) {
new Test()
}
public Test() {
this.setTitle("移动的小球")
this.setSize(600, 500)
this.setLocation(100, 100)
this.setDefaultCloseOperation(EXIT_ON_CLOSE)
ball = new Ball02(40, 40)
this.add(ball)
t = new Thread(ball)
jbtu = new JButton("点击移动小球")
this.add(jbtu, BorderLayout.SOUTH)
jbtu.addActionListener(new MyActionListener())
this.setVisible(true)
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbtu) {
// 响应鼠标点击事件
if (!t.isAlive()) {
t = new Thread(ball)
t.start()
}
}
}
}
}
@SuppressWarnings("serial")
class Ball02 毁扰extends JPanel implements Runnable {
private int x, y
public Ball02(int x, int y) {
this.x = x
this.y = y
}
@Override
public void paint(Graphics g) {
super.paint(g)
g.setColor(Color.RED)
g.fillOval(x, y, 40, 40)
}
public void run() {
try {
for (int i = 0 i < 20 i++) {
x = y += 3
this.repaint()
Thread.sleep(100)
}
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
this.posX=(random.nextInt()>帆槐>>1)%(this.getWidth()-20)+10this.posY=(random.nextInt()>>>1)%(this.getHeight()-20)+10
可让腔以改成坦轿衫
this.posY=(posY+10)%(this.getHeight()-20)+10
你说的是模拟直线运动还是轨迹是凯姿察抛物线的那种?如何去模拟说白了就是要根据册链某种算法计算出物体运动的下一个坐标,做自由落体运动满足能量守盯茄恒定理,要把它实现出来关键是确定一个能量衰减(转化为其他能量)系数,就是物体以多少速度撞击然后以多少速度反d,以多少角度撞击和以多少角度反d,这个类似于镜面反射。
确定了以上这些,实现起来就不难了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)