Musrörelser

Lägg till en musrörelselyssnare

En musrörelselyssnare är en klass som har skrivit kod som tar hand om händelserna musrörelse och musrörelse-med-musknapp-nedtryckt. Lite mer formellt kan vi säga att:

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å:



Källkoden

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.



Nästa version - färdigt spel