I've been trying to create a rubiks cube in Java3d. So I created Color Cubes, placed them, and centered them. Added orbit behavior, so now I'm trying to add Key Listener to make it responsive. It throws an error code when the cube is not manipulated by a mouse ( which means it works, I don't have any animations yet), but the second I move the cube it does not respond at all. I tried to google something but Java3d is not used at all it seems ( I must use it for my project). I have to paste all my code since I have no idea where the problem is.
package rubikscubegeneral;
import java.awt.GraphicsConfiguration;
import javax.swing.JFrame;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.swing.*;
import java.awt.*;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.Transform3D;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.ViewingPlatform;
import java.awt.event.*;
public class RubiksCubeGeneral extends JFrame {
private boolean buttons[];
private int a=1;
private int p=2;
private int b=1;
private int c=2;
RubiksCubeGeneral(){
super("Kostka Rubika");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
canvas3D.setPreferredSize(new Dimension(800,600));
add(canvas3D);
pack();
setVisible(true);
BranchGroup scene = createScene();
scene.compile();
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
Transform3D move_obverver = new Transform3D();
move_obverver.set(new Vector3f(0,0,20.0f));
simpleU.getViewingPlatform().getViewPlatformTransform().setTransform(move_obverver);
ViewingPlatform viewingPlatform = simpleU.getViewingPlatform();
//camera
OrbitBehavior orbit = new OrbitBehavior(canvas3D,OrbitBehavior.REVERSE_ALL);
BoundingSphere sceneBounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
orbit.setSchedulingBounds(sceneBounds);
viewingPlatform.setViewPlatformBehavior(orbit);
simpleU.addBranchGraph(scene);
}
BranchGroup createScene(){
BranchGroup node_scene = new BranchGroup();
BoundingSphere bounds = new BoundingSphere(new Point3d(0,0,0), 10); //
//light
AmbientLight lightA = new AmbientLight();
lightA.setInfluencingBounds(bounds);
node_scene.addChild(lightA);
// declarations
ColorCube [] cube= new ColorCube[8];
TransformGroup [] tg = new TransformGroup[8];
Transform3D [] transform = new Transform3D[8];
Vector3f [] vector = new Vector3f[8];
// vectors to move cubes
vector[0]= new Vector3f(-1.025f,1.025f,1.025f);
vector[1]= new Vector3f(1.025f,1.025f,1.025f);
vector[2]= new Vector3f(-1.025f,-1.025f,1.025f);
vector[3]= new Vector3f(1.025f,-1.025f,1.025f);
vector[4]= new Vector3f(-1.025f,1.025f,-1.025f);
vector[5]= new Vector3f(1.025f,1.025f,-1.0025f);
vector[6]= new Vector3f(-1.025f,-1.025f,-1.025f);
vector[7]= new Vector3f(1.025f,-1.025f,-1.025f);
// placing the cubes
for (int i=0; i<8;i++)
{
cube[i]= new ColorCube();
tg[i]= new TransformGroup();
transform[i]=new Transform3D();
transform[i].setTranslation(vector[i]);
tg[i].setTransform(transform[i]);
tg[i].addChild(cube[i]);
node_scene.addChild(tg[i]);
}
// Key listener
this.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_UP: buttons[0] = true; break;
case KeyEvent.VK_DOWN: buttons[1] = true; break;
}
}
public void keyReleased(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_UP: buttons[0] = false; break;
case KeyEvent.VK_DOWN: buttons[1] = false; break;
}
}
public void keyTyped(KeyEvent e){
}
}
);
return node_scene;
}
public static void main(String args[]){
new RubiksCubeGeneral();
}
}