Hi! i'm new here and this is my first message
This is my first steps in Java3d (and in 3d at all) and i have a problem... I want the mouse to be used to look around, like in a shooter. My code is being executed, but nothing happens on th screen. There's something i must have misunderstood.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public class MouseBeh extends Behavior{ private TransformGroup TG; private Transform3D rot=new Transform3D(); private Transform3D rotation=new Transform3D(); private Vector3f translation=new Vector3f(); private WakeupOnAWTEvent mouseEvent=new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED); private MouseEvent evt; private Robot rr; MouseBeh(TransformGroup TG) { this.TG=TG; try{ rr = new Robot(); }catch(Exception e){ javax.swing.JOptionPane.showMessageDialog(null, "Erreur: " + e.getMessage() + " -- " + e.getCause()); } } public void initialize() { this.wakeupOn(mouseEvent); } public void processStimulus(Enumeration criteria) { AWTEvent events[]=mouseEvent.getAWTEvent(); rot.setIdentity(); TG.getTransform(rotation); evt = (MouseEvent)events[0]; rot.rotX(Math.toRadians(evt.getXOnScreen()-500)/200); rot.rotY(Math.toRadians(evt.getYOnScreen()-500)/200); try{ rr.mouseMove(500, 500); }catch(Exception e){ javax.swing.JOptionPane.showMessageDialog(null, "Erreur: " + e.getMessage() + " -- " + e.getCause()); } rotation.mul(rot); TG.setTransform(rotation); this.wakeupOn(mouseEvent); } } |
Otherwise, the keyboard works:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| public class KeyBeh extends Behavior{ private TransformGroup TG; private Transform3D rot=new Transform3D(); private Transform3D rotation=new Transform3D(); private Vector3f translation=new Vector3f(); private WakeupOnAWTEvent keyEvent=new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); KeyBeh(TransformGroup TG) { this.TG=TG; } public void initialize() { this.wakeupOn(keyEvent); } public void processStimulus(Enumeration criteria) { AWTEvent events[]=keyEvent.getAWTEvent(); rot.setIdentity(); TG.getTransform(rotation); if (((KeyEvent)events[0]).getKeyCode()==KeyEvent.VK_NUMPAD1) { translation.set(0.075f,0f,0f); rot.setTranslation(translation); } else if (((KeyEvent)events[0]).getKeyCode()==KeyEvent.VK_NUMPAD3) { translation.set(-0.075f,0f,0f); rot.setTranslation(translation); } else if (((KeyEvent)events[0]).getKeyCode()==KeyEvent.VK_NUMPAD2) { translation.set(0f,0f,0.075f); rot.setTranslation(translation); } else if (((KeyEvent)events[0]).getKeyCode()==KeyEvent.VK_NUMPAD8) { translation.set(0f,0f,-0.075f); rot.setTranslation(translation); } else if (((KeyEvent)events[0]).getKeyCode()==KeyEvent.VK_NUMPAD4) rot.rotY(0.0125d); else if (((KeyEvent)events[0]).getKeyCode()==KeyEvent.VK_NUMPAD6) rot.rotY(-0.0125d); rotation.mul(rot); TG.setTransform(rotation); this.wakeupOn(keyEvent); } } |
and here's the call:
1 2 3 4 5 6 7 8 9 10
| ... TransformGroup tUniv = univ.getViewingPlatform().getViewPlatformTransform(); KeyBeh keyb = new KeyBeh(tUniv); keyb.setSchedulingBounds(new BoundingSphere(new Point3d(),1000.0)); retour.addChild(keyb); MouseBeh mouse = new MouseBeh(tUniv); mouse.setSchedulingBounds(new BoundingSphere(new Point3d(),1000.0)); retour.addChild(mouse); ... |