Question of Bedingungssätze

Status
Nicht offen für weitere Antworten.

Developer_X

Top Contributor
Hi, also ich arbeite bei meinem Spiel, bei dem man durchs universum fliegt, mit bedinungssätzen, also wenn die Coordinaten (der Vector3f) der Coordinaten eines Objektes (ebenfalls ein Vector3f) dann soll das SPiel abgebrochen werden, nun zu meiner frage:
also ich habe in einem Thread folgendes geschrieben:
Java:
//Collisions Detection
		    	if(cz <=-50)
				{			
		    		if(cy<=-0.8f)
		    		{
		    			if(cx<=0.1f)
		    			{
		    				System.exit(0);
		    			}
		    		}
				}
Mein Raumschiff fliegt ganz von allein gerade aus (cz);
man kann cy und cx selbst manipulieren,

Mit dem oben gezeigten Code wäre es so, dass wenn das raumschiff -50 erreicht hat, egal wie weit es nach -50 ist, cy auch größer als -0.8f wäre und und cx größer als 0.1f wäre, erst dann

ich will aber nicht mit diesen methoden arbeiten (<=) oder (>=) sondern mit methoden wie (==)
aber das Problem floats werden gerundet, also funktioniert dies nie, kann mir einer vielleicht weiterhelfen, und mir eine art (==) für floats nennen?
 

Developer_X

Top Contributor
also was ich eigentlich damit sagen will, ich will genau wissen:
ob cz und cy und cx bestimmte werte haben, ob sie wirklich diese Werte haben, nichts anderes, versteht ihr?
 

Schandro

Top Contributor
einfach ne Methode bauen die eine gewisse Toleranz erlaubt. Also gucken ob x größer als (y-Toleranz) und kleiner als (y+Toleranz) ist.
Aber wozu brauch man solche genauen Verlgieche bei einem sich bewegenden Objekt? Sehr fehleranfällig...
 

diggaa1984

Top Contributor
was wäre daran so schlimm bei den >= oder <= zu bleiben, rein logisch gesehen, ist es nich verkehrt, und erwarte bei Threads nicht, dass sie eben genau dann prüfen wenn das ding tatsache exakt diese position erreicht.

Weiterhin wirst du massive Probleme haben, wenn du versuchst auf diese Weise 100e Objekte zu prüfen, bzw ob das Schiff mit einem dieser Objekte kollidiert. Irgendwann is die Performance im Eimer.

Für Kollisionen gibts ganz andere Mechanismen, und ich würde behaupten, ohne das ich Java3D jemals genutzt hab, dass es da sowas schon gibt, weil das ist eigentlich essenziell. Sollte es das nicht geben, dann viel Spaß beim Implementiern
 

Developer_X

Top Contributor
das gibts nicht, kein Programmierer hat bisher sowas gemacht, anscheinend muss das jeder Programmierer für sich machen, also ich versuch für mein MiniGame schon mein bestes, aber noch mal zur ersten antwort
von euch: wie kann ich denn per "Bedingungssatz" bitte eine Tollearanz machen, kannst du mir da mal ein paar beispiele zeigen?
 

diggaa1984

Top Contributor
einfach ne Methode bauen die eine gewisse Toleranz erlaubt. Also gucken ob x größer als (y-Toleranz) und kleiner als (y+Toleranz) ist.

da steht alles drin, man merkt wieder das dir total die Grundlagen fehlen, das müsstest mitlerweile selbst können.

Java:
private static final double EPSILON = 0.0001;

private static boolean isCollidating(double posCollision, double toCheck) {
    if ((toCheck > (posCollision-EPSILON)) && (toCheck < (posCollision+EPSILON)))
        return true;

    return false;
}
 
Zuletzt bearbeitet:

Landei

Top Contributor
Davon abgesehen: Hast du zufällig schon mal vom &&-Operator gehört? Dann kannst du statt:
Java:
if (obj.istGelb()) {
   if(obj.istGekruemmt()) {
      if(obj.istNormiert()) {
         if(obj.istVollstaendig()) {
           System.out.println("Ein Banananch-Raum!!!");
         }
      }  
   }
}
schreiben:
Java:
if (obj.istGelb() && obj.istGekruemmt() && obj.istNormiert() && obj.istVollstaendig()) {
   System.out.println("Ein Banananch-Raum!!!");
}
 
Zuletzt bearbeitet:

Developer_X

Top Contributor
also mit euren Antworten konnte ich einiges anfangen, schaut mal hier:
Java:
//Collisions Detection
		    	boolean brok1 = false;
		    	boolean brok2 = false;

//Boolean convertings
		    	//broken1
		    	if(cz<=-49)
		    	{
		    		brok1 = true;
		    	}
		    	else if(cz>=-51)
		    	{
		    		brok1 = false;
		    	}
		    	//broken2
		    	else if(cz<=-69)
		    	{
		    		brok2 = true;
		    	}
		    	else if(cz>=-71)
		    	{
		    		brok2 = false;
		    	}
		    	
//Asking for vectors
		    	if (cy<=-0.8f&&cx>=1f&&brok1==true)
		    	{
		    		System.exit(0);
		    	}
		    	else if (cy<=-0.8f&&cx>=-0.1f&&brok2==true) 
		    	{    	
		    		System.exit(0);
		    	}
wie ihr sehen könnt ist das ganze einigermaßen entstanden, das ganze funktioniert auch mit brok1, aber mit brok2 geht das ganze gar nicht, könnt ihr mir sagen wieso?

wenn cy==-0.8f ist +
wenn cx==-0.1f ist +
wenn brok2 ==true ist(und brok2 ist gleich "true" wenn cz == -69)
dann:
System.exit(0);
warum passiert dies nicht? Kann mir bitte einer weiterhelfen? please
 
Zuletzt bearbeitet:

Geeeee

Bekanntes Mitglied
1. Denke mal bitte drüber nach, ob es in deinem Code oben sinnvoll ist brok1/2 auf false zu setzen.
2. Wenn die erste Bedingung oder zweite Bedingung greift, was ja durch die Überschneidung vorbestimmt ist, dann wird niemals dein brok2 auf true (JA auch nicht auf false) gesetzt werden können.
 

Developer_X

Top Contributor
ich glaub du verstehst mich miss, hier mal der gesamte Thread:
Java:
 (new Thread(){@SuppressWarnings("deprecation")
			@Override public void run(){while(!isInterrupted()){      	              
////////////////////////////////////////////////
//Abfragen des Ziels
		    	if(cz<=-800)
		    	{
		    		setVisible(false);
		    		console.setVisible(true);

		    		this.stop();

		    	}
//	das Bewegen	    
		    	//grundsätlich geradeaus
		    	z = z -0.1f;
		    	cz = cz -0.1f;
		    
		    	vector.setX(x);
		    	vector.setY(y);
		    	vector.setZ(z);
		    	view.setTranslation(vector);
		    	View.setTransform(view);
		    	
		    	cvector.setX(cx);
		    	cvector.setY(cy);
		    	cvector.setZ(cz);
		    	charakter.rotY(Math.toRadians(ry));
		    	charakter.setTranslation(cvector);
		    	Charakter.setTransform(charakter);
		    	
		    	if(ry<=170)
		    	{
		    		right = false;
		    	}
		    	else if(ry>=190)
		    	{
		    		left = false;
		    	}
		    	else
		    	{
		    		right = true;
		    		left  = true;
		    	}
		    	System.out.println(cvector);
		    	area.select(area.getText().length()-1,area.getText().length());
		    	area.append("\n"+vector);
//Collisions Detection
		    	boolean brok1 = false;
		    	boolean brok2 = false;

//Boolean convertings
		    	//broken1
		    	if(cz<=-49)
		    	{
		    		brok1 = true;
		    	}
		    	else if(cz>=-51)
		    	{
		    		brok1 = false;
		    	}
		    	//broken2
		    	else if(cz<=-69)
		    	{
		    		brok2 = true;
		    	}
		    	else if(cz>=-71)
		    	{
		    		brok2 = false;
		    	}
		    	
//Asking for vectors
		    	if (cy<=-0.8f&&cx>=1f&&brok1==true)
		    	{
		    		System.exit(0);
		    	}
		    	else if (cy<=-0.8f&&cx>=-0.1f&&brok2==true) 
		    	{    	
		    		System.exit(0);
		    	}
////////////////////////////////////////////////
try{sleep(10);}catch(InterruptedException e){interrupt();}}}}).start();
 

Geeeee

Bekanntes Mitglied
ich glaub du verstehst mich miss
Nein, ich hab dir nur das Problem aufgezeigt, weshalb brok2 nie nie Nie NIE NIE true wird.

Deine ersten beiden Bedingungen bei dem brokZeug: (cz<=-49) (cz>=-51)
HighEndGrafikZahlenStrahl:
Code:
        -51        -49
          |          |
------------------------------------
und nun sag mir eine Zahl, für die keine von beiden Bedingungen greift. Bedenke du hast da else if überall stehen.
 

Developer_X

Top Contributor
ok, aber wie soll ich das denn sonst machen?
hier mal mein kompletter Code
Java:
package Enterprise_Astroids;

import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

import javax.media.Manager;
import javax.media.Player;
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.Material;
import javax.media.j3d.PointArray;
import javax.media.j3d.PointAttributes;
import javax.media.j3d.PolygonAttributes;
import javax.media.j3d.Shape3D;
import javax.media.j3d.TextureAttributes;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.vecmath.Color3f;
import javax.vecmath.Color4f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import TransoForm.TransoFormGroup;

import com.indie.genesis.j3d.Rock;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.geometry.Cylinder;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.SimpleUniverse;

@SuppressWarnings("serial")
public class Game extends JFrame implements KeyListener {
	Toolkit tk;
	@SuppressWarnings("static-access")
	Dimension d = tk.getDefaultToolkit().getScreenSize();
	JProgressBar bar;
	JFrame console = new JFrame();
	JTextArea area = new JTextArea();

	SimpleUniverse u;
	Canvas3D canvas3D;

	Player m_Player;

	boolean right = true;
	boolean left = true;

	boolean StarTrek = false;
	boolean StarWars = true;
	boolean off = false;

	TransformGroup Charakter;
	Transform3D charakter;
	Vector3f cvector;
	float cx = 0;
	float cy = -0.8f;
	float cz = -4;
	float ry = 180;

	TransformGroup View;
	Transform3D view;
	Vector3f vector;
	float x = 0;
	float y = 0;
	float z = 0;

	class WindowListener extends WindowAdapter {
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}

	@SuppressWarnings( { "static-access", "deprecation" })
	public Game() {
		super("Start Trek - Astroids");

		console.setTitle("RoutenProtokollant");
		console.setSize(300, 400);

		JMenuBar cop = new JMenuBar();
		JMenu copy = new JMenu("Copy");
		cop.add(copy);
		JMenuItem copyy = new JMenuItem("Route kopieren");
		copy.add(copyy);
		copyy.setBackground(Color.black);
		cop.setBackground(Color.black);
		copyy.setForeground(Color.green);
		copy.setForeground(Color.green);
		copyy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				b1ActionPerformed(evt);
			}

			private void b1ActionPerformed(ActionEvent evt) {
				area.selectAll();
				area.copy();
				area.select(0, 0);
			}
		});
		JMenu Exit = new JMenu("Exit");
		cop.add(Exit);
		Exit.setForeground(Color.green);
		JMenuItem exit = new JMenuItem("Exit");
		Exit.add(exit);
		exit.setBackground(Color.black);
		exit.setForeground(Color.green);
		exit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				b1ActionPerformed(evt);
			}

			private void b1ActionPerformed(ActionEvent evt) {
				System.exit(0);
			}
		});
		JMenuItem close = new JMenuItem("close");
		Exit.add(close);
		close.setBackground(Color.black);
		close.setForeground(Color.green);
		close.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				b1ActionPerformed(evt);
			}

			private void b1ActionPerformed(ActionEvent evt) {
				console.setVisible(false);
			}
		});
		console.setJMenuBar(cop);
		area = new JTextArea();
		area.setBackground(Color.black);
		area.setForeground(Color.green);
		area.setText("RoutenProtokollant" + "\n");
		JScrollPane slider = new JScrollPane(area);
		console.setLayout(new GridLayout(1, 1));
		console.add(slider);
		slider.setBackground(Color.green);
		slider.setForeground(Color.black);

		try {
			m_Player = Manager.createPlayer(new File(
					"F:/JExcercises/StarTrek/StarWars.mp3").toURL());
			m_Player.start();
		} catch (Exception e) {
			e.printStackTrace();
		}

		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);

		final Button Sound = new Button("StarWars");
		b.add(Sound);
		Sound.setBackground(Color.black);
		Sound.setForeground(Color.green);
		Sound.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				b1ActionPerformed(evt);
			}

			private void b1ActionPerformed(ActionEvent evt) {
				if (StarTrek == true) {
					StarTrek = false;
					StarWars = false;
					off = true;
					Sound.setLabel("Off");

					m_Player.stop();

				} else if (StarWars == true) {
					StarTrek = true;
					StarWars = false;
					off = false;
					Sound.setLabel("StarTrek");

					m_Player.stop();
					try {
						m_Player = Manager.createPlayer(new File(
								"F:/JExcercises/StarTrek/Enterprise.wav")
								.toURL());
						m_Player.start();
					} catch (Exception e) {
						e.printStackTrace();
					}
				} else if (off == true) {
					StarTrek = false;
					StarWars = true;
					off = false;
					Sound.setLabel("StarWars");

					m_Player.stop();
					try {
						m_Player = Manager
								.createPlayer(new File(
										"F:/JExcercises/StarTrek/StarWars.mp3")
										.toURL());
						m_Player.start();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		});
		this.setJMenuBar(b);

		GraphicsConfiguration config = SimpleUniverse
				.getPreferredConfiguration();
		canvas3D = new Canvas3D(config);
		canvas3D.addKeyListener(this);
		canvas3D.setBounds(0, 0, d.width, d.height);
		this.add(canvas3D);
		u = new SimpleUniverse(canvas3D);
		BranchGroup scene = createSceneGraph();
		u.addBranchGraph(scene);

		this.setVisible(true);
		this.setLayout(null);
	}

	public BranchGroup createSceneGraph() {
		final BranchGroup objRoot = new BranchGroup();

		createStarBackground(objRoot);

		TransoFormGroup f1 = new TransoFormGroup(new Vector3f(1, -0.8f, -50),
				20, 20, 0, 0.1f);
		f1.addChild(new Rock());
		objRoot.addChild(f1);

		TransoFormGroup f2 = new TransoFormGroup(new Vector3f(0, -0.6f, -70),
				0, 20, 20, 0.1f);
		f2.addChild(new Rock());
		objRoot.addChild(f2);
		// //////////////////// //////////////////////////
		charakter = new Transform3D();
		cvector = new Vector3f();
		cvector.setX(cx);
		cvector.setY(cy);
		cvector.setZ(cz);
		charakter.rotY(Math.toRadians(ry));
		charakter.setTranslation(cvector);

		Charakter = new TransformGroup();
		Charakter.setTransform(charakter);
		Charakter.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		Charakter.addChild(new EnterPrise(0.5f));
		objRoot.addChild(Charakter);

		view = new Transform3D();
		vector = new Vector3f();
		vector.setX(x);
		vector.setY(y);
		vector.setZ(z);
		view.setTranslation(vector);
		View = new TransformGroup();
		View.setTransform(view);
		View.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		View = u.getViewingPlatform().getViewPlatformTransform();

		Appearance app = new Appearance();
		app.setMaterial(new Material(new Color3f(0.1f, 0.1f, 0.1f),
				new Color3f(0f, 0f, 0f), new Color3f(0.8f, 0.8f, 0.8f),
				new Color3f(0.6f, 0.6f, 0.6f), 1f));
		app
				.setPolygonAttributes(new PolygonAttributes(
						PolygonAttributes.POLYGON_LINE,
						PolygonAttributes.CULL_NONE, 0));

		TransoFormGroup b1 = new TransoFormGroup(new Vector3f(0, -0.7f, -0), 0,
				0, 0);
		objRoot.addChild(b1);
		b1.addChild(new Box(5, 5, 70, app));

		TransoFormGroup b2 = new TransoFormGroup(new Vector3f(0, -0.7f, -100),
				0, 0, 0);
		objRoot.addChild(b2);
		b2.addChild(new Box(5, 5, 70, app));

		TransoFormGroup b3 = new TransoFormGroup(new Vector3f(0, -0.7f, -200),
				0, 0, 0);
		objRoot.addChild(b3);
		b3.addChild(new Box(5, 5, 70, app));

		TransoFormGroup b4 = new TransoFormGroup(new Vector3f(0, -0.7f, -300),
				0, 0, 0);
		objRoot.addChild(b4);
		b4.addChild(new Box(5, 5, 70, app));

		TransoFormGroup b5 = new TransoFormGroup(new Vector3f(0, -0.7f, -400),
				0, 0, 0);
		objRoot.addChild(b5);
		b5.addChild(new Box(5, 5, 70, app));

		TransoFormGroup b6 = new TransoFormGroup(new Vector3f(0, -0.7f, -500),
				0, 0, 0);
		objRoot.addChild(b6);
		b6.addChild(new Box(5, 5, 70, app));

		TransoFormGroup b7 = new TransoFormGroup(new Vector3f(0, -0.7f, -600),
				0, 0, 0);
		objRoot.addChild(b7);
		b7.addChild(new Box(5, 5, 70, app));

		TransoFormGroup b8 = new TransoFormGroup(new Vector3f(0, -0.7f, -700),
				0, 0, 0);
		objRoot.addChild(b8);
		b8.addChild(new Box(5, 5, 70, app));
		//
		TransoFormGroup c1 = new TransoFormGroup(new Vector3f(0, -0.7f, -00),
				90, 0, 0);
		objRoot.addChild(c1);
		c1.addChild(new Cylinder(5, 70, app));

		TransoFormGroup c2 = new TransoFormGroup(new Vector3f(0, -0.7f, -100),
				90, 0, 0);
		objRoot.addChild(c2);
		c2.addChild(new Cylinder(5, 70, app));

		TransoFormGroup c3 = new TransoFormGroup(new Vector3f(0, -0.7f, -200),
				90, 0, 0);
		objRoot.addChild(c3);
		c3.addChild(new Cylinder(5, 70, app));

		TransoFormGroup c4 = new TransoFormGroup(new Vector3f(0, -0.7f, -300),
				90, 0, 0);
		objRoot.addChild(c4);
		c4.addChild(new Cylinder(5, 70, app));

		TransoFormGroup c5 = new TransoFormGroup(new Vector3f(0, -0.7f, -400),
				90, 0, 0);
		objRoot.addChild(c5);
		c5.addChild(new Cylinder(5, 70, app));

		TransoFormGroup c6 = new TransoFormGroup(new Vector3f(0, -0.7f, -500),
				90, 0, 0);
		objRoot.addChild(c6);
		c6.addChild(new Cylinder(5, 70, app));

		TransoFormGroup c7 = new TransoFormGroup(new Vector3f(0, -0.7f, -600),
				90, 0, 0);
		objRoot.addChild(c7);
		c7.addChild(new Cylinder(5, 70, app));

		TransoFormGroup c8 = new TransoFormGroup(new Vector3f(0, -0.7f, -700),
				90, 0, 0);
		objRoot.addChild(c8);
		c8.addChild(new Cylinder(5, 70, app));

		Appearance App = new Appearance();
		App.setTexture((new TextureLoader("F:/JExcercises/StarTrek/Ziel.jpg",
				null)).getTexture());
		App.setTextureAttributes(new TextureAttributes(
				TextureAttributes.MODULATE, new Transform3D(), new Color4f(),
				TextureAttributes.FASTEST));

		TransoFormGroup ziel = new TransoFormGroup(new Vector3f(0, -0.7f,
				-800.25f), 0, 0, 0);
		objRoot.addChild(ziel);
		ziel.addChild(new Box(5, 0.5f, 0.5f, Box.GENERATE_NORMALS
				| Box.GENERATE_TEXTURE_COORDS, App));

		(new Thread() {
			@SuppressWarnings("deprecation")
			@Override
			public void run() {
				while (!isInterrupted()) {
					// //////////////////////////////////////////////
					// Abfragen des Ziels
					if (cz <= -800) {
						setVisible(false);
						console.setVisible(true);

						this.stop();

					}
					// das Bewegen
					// grundsätlich geradeaus
					z = z - 0.1f;
					cz = cz - 0.1f;

					vector.setX(x);
					vector.setY(y);
					vector.setZ(z);
					view.setTranslation(vector);
					View.setTransform(view);

					cvector.setX(cx);
					cvector.setY(cy);
					cvector.setZ(cz);
					charakter.rotY(Math.toRadians(ry));
					charakter.setTranslation(cvector);
					Charakter.setTransform(charakter);

					if (ry <= 170) {
						right = false;
					} else if (ry >= 190) {
						left = false;
					} else {
						right = true;
						left = true;
					}
					System.out.println(cvector);
					area.select(area.getText().length() - 1, area.getText()
							.length());
					area.append("\n" + vector);
					// Collisions Detection
					boolean brok1 = false;
					boolean brok2 = false;

					// Boolean convertings
					// broken1
					if (cz <= -49) {
						brok1 = true;
					} else if (cz >= -51) {
						brok1 = false;
					}
					// broken2
					else if (cz <= -69) {
						brok2 = true;
					} else if (cz >= -71) {
						brok2 = false;
					}

					// Asking for vectors
					if (cy <= -0.8f && cx >= 1f && brok1 == true) {
						System.exit(0);
					} else if (cy <= -0.8f && cx >= -0.1f && brok2 == true) {
						System.exit(0);
					}
					// //////////////////////////////////////////////
					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(),
				100000000000000000000000000000000000000000000.0));
		objRoot.addChild(ambientLight);
		DirectionalLight directionalLight = new DirectionalLight();
		directionalLight.setColor(lightColor);
		directionalLight.setInfluencingBounds(new BoundingSphere(new Point3d(),
				100000000000000000000000000000000000000000000.0));
		objRoot.addChild(directionalLight);
		objRoot.compile();
		return objRoot;
	}

	public void createStarBackground(BranchGroup bg) {
		java.util.Random rand = new java.util.Random();
		float mag;
		BranchGroup BGBranch = new BranchGroup();
		Background BG = new Background();
		BG.setColor(new Color3f(0, 0, 0.4f));
		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(),
				100000000000000000000000000000000000000000000.0));

		bg.addChild(BG);
	}

	public void keyPressed(KeyEvent arg0) {
		if (arg0.getKeyCode() == KeyEvent.VK_LEFT) {
			if (cx <= -5) {
				;
			} else {
				x = x - 0.1f;
				cx = cx - 0.1f;
				vector.setX(x);
				vector.setZ(z);
				view.setTranslation(vector);
				View.setTransform(view);

				cvector.setX(cx);
				cvector.setZ(cz);
				if (left == true) {
					ry = ry + 1;
				}
				charakter.rotY(Math.toRadians(ry));
				charakter.setTranslation(cvector);
				Charakter.setTransform(charakter);
			}
		} else if (arg0.getKeyCode() == KeyEvent.VK_UP) {
			if (cy >= 5) {
				;
			} else {
				y = y + 0.1f;
				vector.setX(x);
				vector.setY(y);
				vector.setZ(z);
				view.setTranslation(vector);
				View.setTransform(view);

				cy = cy + 0.1f;
				cvector.setX(cx);
				cvector.setY(cy);
				cvector.setZ(cz);
				charakter.rotY(Math.toRadians(ry));
				charakter.setTranslation(cvector);
				Charakter.setTransform(charakter);
			}
		} else if (arg0.getKeyCode() == KeyEvent.VK_DOWN) {
			if (cy <= -5) {
				;
			} else {
				y = y - 0.1f;
				vector.setX(x);
				vector.setY(y);
				vector.setZ(z);
				view.setTranslation(vector);
				View.setTransform(view);

				cy = cy - 0.1f;
				cvector.setX(cx);
				cvector.setY(cy);
				cvector.setZ(cz);
				charakter.rotY(Math.toRadians(ry));
				charakter.setTranslation(cvector);
				Charakter.setTransform(charakter);
			}
		} else if (arg0.getKeyCode() == KeyEvent.VK_RIGHT) {
			if (cx >= 5) {
				;
			} else {
				x = x + 0.1f;
				cx = cx + 0.1f;
				vector.setX(x);
				vector.setZ(z);
				view.setTranslation(vector);
				View.setTransform(view);

				cvector.setX(cx);
				cvector.setZ(cz);
				if (right == true) {
					ry = ry - 1;
				}
				charakter.rotY(Math.toRadians(ry));
				charakter.setTranslation(cvector);
				Charakter.setTransform(charakter);
			}
		} else if (arg0.getKeyChar() == 'c') {
			if (console.isVisible() == false) {
				console.setUndecorated(true);
				console.setVisible(true);
				console.setLocation(d.width - (d.width / 3), 0);
				console.setSize(d.width / 3, d.height);

				setSize(d.width - (d.width / 3), d.height);
				remove(canvas3D);
				canvas3D.setBounds(0, 0, d.width - (d.width / 3), d.height);
				add(canvas3D);
			} else if (console.isVisible() == true) {
				console.setVisible(false);

				setSize(d.width, d.height);
				remove(canvas3D);
				canvas3D.setBounds(0, 0, d.width, d.height);
				add(canvas3D);
			}
		}
	}

	public void keyReleased(KeyEvent arg0) {
		if (ry >= 180) {
			int faktor = 1;
			while (faktor <= 1000) {
				if (ry >= 180) {
					ry = ry - 0.01f;
					charakter.rotY(Math.toRadians(ry));
					charakter.setTranslation(cvector);
					Charakter.setTransform(charakter);

					faktor++;
					warte(1);
				} else {
					faktor++;
				}
			}
		}

		else if (ry <= 180) {
			int faktor = 1;
			while (faktor <= 1000) {
				if (ry <= 180) {
					ry = ry + 0.01f;
					charakter.rotY(Math.toRadians(ry));
					charakter.setTranslation(cvector);
					Charakter.setTransform(charakter);

					faktor++;
					warte(1);
				} else {
					faktor++;
				}
			}
		}
	}

	public void keyTyped(KeyEvent arg0) {
		;
	}

	public static void warte(long millis) {
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
		}
	}

	public static void main(String[] args) {
		new Game();
	}

}
Coding Style == perfect!
 
T

tuxedo

Gast
Coding Style == perfect!

Das ist so nicht korrekt. Die Code-Formatierung ist "korrekt". Aber dein Coding-Style ist "unter aller Kanone" und "ganze Galaxien von Perfekt entfernt". Da du noch sehr jung und unerfahren bist schau ich mal in ne Glaskugel und geb dir nen Funken Hoffnung mit, dass das mit den Jahren besser wird. Meine ersten Gehversuche sagen vermutlich ähnlich aus.

- Alex
 

Developer_X

Top Contributor
ok, aber seht ihr jetzt meinen Fehler im Code`? Oder besser, ob ihr was missverstanden habt,
und dann bitte mal, was ich verändern sollte, sodass ich eine Möglichkeit haben, den Code zu korrektieren,
 
T

tuxedo

Gast
Also nochmal, aber dann klink ich mich auch aus:

1) Code Kommentare verwenden
2) Keine absoluten Pfade hardcodieren
3) Konstanten (public/private final static ...) für wiederkehrende Werte benutzen, aber nur da wo es auch Sinn macht
4) Keine ewig verschachtelten IF-ELSE-THEN-OTHERWISE-WTF? Bedingungen benutzen
5) Lernen das hier im Forum vorgeschlagene zu
5a) lesen
5b) verstehen
5c) bei nicht verstehen nachzufragen
5d) nach dem verstehen umzusetzen
6) Nicht erwarten dass andere einem die Lösung auf's Brot schmieren, und dafür vorher erst noch hunderte von Zeilen Code analysieren

Also, les dir alle Thread, speziell nicht die deinen, nochmal genau durch und schau was dir gesagt wurde. Dann jeden Satz mit den 6 Regeln abgleichen. Fertig.

In diesem Sinne: Frohes problemlösen ...

- Alex
 
Zuletzt bearbeitet von einem Moderator:

Developer_X

Top Contributor
so ich hab mir das ganze nochmals durchgelsen, und bin dabei auf die idee gekommen, folgendes zu versuchen, trotz meiner Mühe funktioniert das ganze immer noch nicht, TIPP: wenn man beim ersten Asteroiden ist, kann man einfach nicht sterben, wieso ?
Kann mir dazu bitte einer helfen?
Java:
	    (new Thread(){@SuppressWarnings("deprecation")
			@Override public void run(){while(!isInterrupted()){      	              
////////////////////////////////////////////////
//Abfragen des Ziels
		    	if(cz<=-800)
		    	{
		    		setVisible(false);
		    		console.setVisible(true);

		    		this.stop();

		    	}
//	das Bewegen	    
		    	//grundsätlich geradeaus
		    	z = z -0.1f;
		    	cz = cz -0.1f;
		    
		    	vector.setX(x);
		    	vector.setY(y);
		    	vector.setZ(z);
		    	view.setTranslation(vector);
		    	View.setTransform(view);
		    	
		    	cvector.setX(cx);
		    	cvector.setY(cy);
		    	cvector.setZ(cz);
		    	charakter.rotY(Math.toRadians(ry));
		    	charakter.setTranslation(cvector);
		    	Charakter.setTransform(charakter);
		    	
		    	if(ry<=170)
		    	{
		    		right = false;
		    	}
		    	else if(ry>=190)
		    	{
		    		left = false;
		    	}
		    	else
		    	{
		    		right = true;
		    		left  = true;
		    	}
		    	System.out.println(cvector);
		    	area.select(area.getText().length()-1,area.getText().length());
		    	area.append("\n"+vector);
//Collisions Detection
		    	boolean brok11 = false;
		    	boolean brok12 = false;
		    	boolean brok13 = false;
		    	
		    	boolean brok21 = false;

//Boolean convertings
		    	//broken1
		    	if(cz<=-49)
		    	{
		    		brok11 = true;
		    	}
		    	if(cz>=-51)
		    	{
		    		brok11 = false;
		    	}
		    	//
		    	if(cx>=1)
		    	{
		    		brok12 = true;
		    	}
		    	if(cx>=1.1f)
		    	{
		    		brok12 = false;
		    	}
		    	if(cx<=5.9f)
		    	{
		    		brok12 = false;
		    	}
		    	//
		    	if(cy>=-0.8f)
		    	{
		    		brok13 = true;
		    	}
		    	if(cy<=-0.8f)
		    	{
		    		brok13 = true;
		    	}
		    	if(cy>=-0.9f)
		    	{
		    		brok13 = false;
		    	}
		    	if(cy<=-0.7f)
		    	{
		    		brok13 = false;
		    	}
		    
		    	//broken2
		    	if(cz<=-69)
		    	{
		    		brok21 = true;
		    	}
		    	if(cz>=-71)
		    	{
		    		brok21 = false;
		    	}
		    	
//Asking for vectors
		    	if (brok13==true&&brok12==true&&brok11==true)
		    	{
		    		System.exit(0);
		    	}
		    	if (cy<=-0.8f&&cx>=-0.1f&&brok21==true) 
		    	{    	
		    		System.exit(0);
		    	}
////////////////////////////////////////////////
try{sleep(10);}catch(InterruptedException e){interrupt();}}}}).start();
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben