Musrörelser |
En MouseMotionListener är en klass som har implementerat metoderna:
mouseMoved() och mouseDragged().
För att göra vår fall-applet till en MouseMotionListener måste vi alltså:
prog_b\elab\FallLab_mus.java |
import java.applet.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class FallLab_mus extends Applet implements ActionListener, Runnable, MouseMotionListener { Button button = new Button("Start"); ArrayList<Point> list = new ArrayList(); Point musPosition = new Point(); public void init() { add(button); button.addActionListener(this); addMouseMotionListener(this); } public void actionPerformed(ActionEvent e) { button.setVisible(false); Thread t = new Thread(this); t.start(); } public void paint(Graphics g) { for (Point p : list) { g.drawOval(p.x - 10, p.y - 10, 20, 20); } } public void run() { boolean gameOver = false; int tic = 50; while (!gameOver) { tic--; if (tic == 0) { list.add(new Point(50, 10)); tic = 50; } ArrayList<Point> deadPoints = new ArrayList(); for (Point point : list) { if (point.distance(musPosition) < 10) { deadPoints.add(point); } point.y++; if (point.y > getHeight()) { gameOver = true; } } list.removeAll(deadPoints); repaint(); try { Thread.sleep(5); } catch (Exception e) { } } button.setVisible(true); list.clear(); } public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { musPosition = e.getPoint(); } }
I koden deklareras en variabel musPosition som förändras var gång musen rör sigg i applet-fönstret. I run()-metoden frågas om avståndet mellan varje punkt som flyttas och musen är mindre än radien på cirkeln kring punkten: i så fall plockas punkten bort ur listan.