Hab' mal geguckt - das mit dem "firstTime" ist noch ziemlich hakelig, aber kannst ja mal sehen, wie man das noch verbessern kann
[code=Java]
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.event.*;
import java.util.Enumeration;
import java.awt.Robot;
import javax.swing.*;
public class MouseMovedBehavior extends Behavior {
private TransformGroup targetTG;
private Transform3D rotation = new Transform3D();
WindowOutput windowOutput;
Robot zen;
int posX=0,posY=0;
boolean firstTime = true;
boolean stop = false;
MouseMovedBehavior(TransformGroup targetTG, WindowOutput windowOutputx) {
this.targetTG = targetTG;
windowOutput = windowOutputx;
}
public void initialize() {
this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
try{
zen = new Robot();
}catch(Exception e){}
}
public void processStimulus(Enumeration criteria)
{
Object object = criteria.nextElement();
WakeupOnAWTEvent w = (WakeupOnAWTEvent)object;
AWTEvent ev = w.getAWTEvent()[0];
MouseEvent event = (MouseEvent)ev;
if(firstTime)
{
repositionMouse(event);
firstTime = false;
}
else
{
windowOutput.schauX(-(event.getY()-posY)/10.0f);
windowOutput.schauY(-(event.getX()-posX)/10.0f);
repositionMouse(event);
}
this.wakeupOn(new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED));
}
private void repositionMouse(MouseEvent event)
{
int cx = event.getComponent().getWidth()/2;
int cy = event.getComponent().getHeight()/2;
Point p = new Point(cx,cy);
SwingUtilities.convertPointToScreen(p, event.getComponent());
zen.mousePress(InputEvent.BUTTON1_MASK);
zen.mouseMove(p.x, p.y);
zen.mouseRelease(InputEvent.BUTTON1_MASK);
posX = cx;
posY = cy;
}
}
[/code]