Hi, im folgenden Code, habe ich mal ein grundspiel erstellt.
So, die Klasse extends JFrame, das Problem, sie implementiert KeyListener kann aber schlecht sich selbst adden, mit der methode "addKeyListener(KeyListener arg0)" deshalb brauch ich ma eure hilfe, wie ich das anstellen könnte, das ich mich links und rechts bewegen kann, es wird außerdem ausgegeben, wo sich der Vector momentan befindet.
Wenn ihr mir helfen könntet, das wär super, und dies ist ein KSKB ohne Zusatztklassen und perfektes Coding Style, in Eclipse mit "STRG+SHIFT+F" so wie ihr es immer mögt
So, die Klasse extends JFrame, das Problem, sie implementiert KeyListener kann aber schlecht sich selbst adden, mit der methode "addKeyListener(KeyListener arg0)" deshalb brauch ich ma eure hilfe, wie ich das anstellen könnte, das ich mich links und rechts bewegen kann, es wird außerdem ausgegeben, wo sich der Vector momentan befindet.
Wenn ihr mir helfen könntet, das wär super, und dies ist ein KSKB ohne Zusatztklassen und perfektes Coding Style, in Eclipse mit "STRG+SHIFT+F" so wie ihr es immer mögt
Java:
package Enterprise_Astroids;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.j3d.AmbientLight;
import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.PointArray;
import javax.media.j3d.PointAttributes;
import javax.media.j3d.Shape3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JProgressBar;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
import TransoForm.TransoFormGroup;
import com.sun.j3d.utils.universe.SimpleUniverse;
@SuppressWarnings("serial")
public class Game extends JFrame implements KeyListener {
JProgressBar bar;
SimpleUniverse u;
boolean left = false;
boolean right = false;
TransformGroup View;
Vector3f vector;
float x = 0;
float z = 0;
class WindowListener extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
@SuppressWarnings("static-access")
public Game() {
super("Start Trek - Astroids");
this.setUndecorated(true);
Toolkit tk = null;
Dimension d = tk.getDefaultToolkit().getScreenSize();
this.setSize(d);
this.addWindowListener(new WindowListener());
JMenuBar b = new JMenuBar();
bar = new JProgressBar();
bar.setValue(50);
b.add(bar);
this.setJMenuBar(b);
GraphicsConfiguration config = SimpleUniverse
.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
canvas.setBounds(0, 0, d.width, d.height);
this.add(canvas);
u = new SimpleUniverse(canvas);
BranchGroup scene = createSceneGraph();
u.addBranchGraph(scene);
this.setLayout(null);
this.setVisible(true);
}
void createStarBackground(BranchGroup bg) {
java.util.Random rand = new java.util.Random();
float mag;
BranchGroup BGBranch = new BranchGroup();
Background BG = new Background();
PointArray starfield = new PointArray(15000, PointArray.COORDINATES
| PointArray.COLOR_3);
float[] point = new float[3];
float[] brightness = new float[3];
for (int i = 0; i < 15000; i++) {
point[0] = (rand.nextInt(2) == 0) ? rand.nextFloat() * -1.0f : rand
.nextFloat();
point[1] = (rand.nextInt(2) == 0) ? rand.nextFloat() * -1.0f : rand
.nextFloat();
point[2] = (rand.nextInt(2) == 0) ? rand.nextFloat() * -1.0f : rand
.nextFloat();
starfield.setCoordinate(i, point);
mag = (rand.nextFloat() + 1.5f) / 1.5f;
brightness[0] = mag;
brightness[1] = mag;
brightness[2] = mag;
starfield.setColor(i, brightness);
}
Shape3D StarShape = new Shape3D(starfield);
StarShape.setAppearance(new Appearance());
StarShape.getAppearance().setPointAttributes(
new PointAttributes(1f, true));
BGBranch.addChild(StarShape);
BG.setGeometry(BGBranch);
BG.setApplicationBounds(new BoundingSphere(new Point3d(), 10.0));
bg.addChild(BG);
}
public BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
createStarBackground(objRoot);
// //////////////////// //////////////////////////
vector = new Vector3f();
vector.setX(x);
vector.setY(0);
vector.setZ(z);
View = new TransoFormGroup(vector, 0, 0, 0);
View.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
View = u.getViewingPlatform().getViewPlatformTransform();
(new Thread() {
@Override
public void run() {
while (!isInterrupted()) {
// //////////////////////////////////////////////
// das Bewegen
// grundsätlich geradeaus
z = z + 1;
// checken ob links oder rechts bewegt werden soll
if (left == true) {
x = x - 1;
} else if (right == true) {
x = x + 1;
}
vector.setX(x);
vector.setZ(z);
View = new TransoFormGroup(vector, 0, 0, 0);
System.out.println(vector);
// //////////////////////////////////////////////
try {
sleep(10);
} catch (InterruptedException e) {
interrupt();
}
}
}
}).start();
Color3f lightColor = new Color3f(.5f, .6f, .6f);
AmbientLight ambientLight = new AmbientLight(lightColor);
ambientLight.setInfluencingBounds(new BoundingSphere(new Point3d(0, 0,
0), 1000));
objRoot.addChild(ambientLight);
DirectionalLight directionalLight = new DirectionalLight();
directionalLight.setColor(lightColor);
directionalLight.setInfluencingBounds(new BoundingSphere(new Point3d(0,
0, 0), 1000));
objRoot.addChild(directionalLight);
objRoot.compile();
return objRoot;
}
public void keyPressed(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_LEFT) {
left = true;
} else if (arg0.getKeyCode() == KeyEvent.VK_RIGHT) {
right = true;
}
}
public void keyReleased(KeyEvent arg0) {
left = false;
right = false;
}
public void keyTyped(KeyEvent arg0) {
;
}
public static void warte(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
}
}
}