Java多线程移动的小球

Java多线程移动的小球,第1张

同一个Thread不能start两次

这样改纤数旦下

import java.awt.BorderLayout

import 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)+10

this.posY=(random.nextInt()>>>1)%(this.getHeight()-20)+10

可让腔以改成坦轿衫

this.posY=(posY+10)%(this.getHeight()-20)+10

你说的是模拟直线运动还是轨迹是凯姿察抛物线的那种?

如何去模拟说白了就是要根据册链某种算法计算出物体运动的下一个坐标,做自由落体运动满足能量守盯茄恒定理,要把它实现出来关键是确定一个能量衰减(转化为其他能量)系数,就是物体以多少速度撞击然后以多少速度反d,以多少角度撞击和以多少角度反d,这个类似于镜面反射。

确定了以上这些,实现起来就不难了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12491881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存