2016-05-26 3 views
1

Ich habe eine Light-Klasse erstellt, die drei Vector3fs, die Position, Farbe und Dämpfung sind. Ich habe in der Lage gewesen, ein Verfahren zu machen, dass das Licht auf die Config speichert als so:Laden Licht von Konfiguration

lightName: (0.0, 1000.0, -7000.0), (1.0, 1.0, 1.0), (1.0, 0.0, 0.0) 

Jetzt brauche ich eine Methode, die und das Rück das Licht mit den gespeicherten Informationen laden kann. Bisher habe ich:

public Light getLight(String name) { 
    String line; 
    try { 
     while((line = bufferedReader.readLine()) != null) { 
      if(line.startsWith(name)) { 
       line = line.replace(name + ": ", ""); 
       return new Light(new Vector3f(x , y, z), new Vector3f(r, g, b), new Vector3f(x1, y1, z1)); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Alle Vorschläge würden sehr geschätzt werden! Vielen Dank!

---- ------ UPDATE

Dank Johnny Antwort konnte ich es herauszufinden. Hier ist der voll funktionsfähigen Code:

public Light getLight(String name) { 
    String line; 
    float x = 0, y = 0, z = 0, r = 0, g = 0, b = 0, x1 = 1, y1 = 0, z1 = 0; 
    try { 
     while((line = bufferedReader.readLine()) != null) { 
      if(line.startsWith(name)) { 
       line = line.replace(name + ": ", "").replace("(", "").replace(")", ""); 
       Scanner parser = new Scanner(line); 
       parser.useDelimiter(", "); 
       x = parser.nextFloat(); 
       y = parser.nextFloat(); 
       z = parser.nextFloat(); 

       r = parser.nextFloat(); 
       g = parser.nextFloat(); 
       b = parser.nextFloat(); 

       x1 = parser.nextFloat(); 
       y1 = parser.nextFloat(); 
       z1 = parser.nextFloat(); 
       parser.close(); 
       break; 
      } 
     } 
     return new Light(new Vector3f(x , y, z), new Vector3f(r, g, b), new Vector3f(x1, y1, z1)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Antwort

1

Sie müssen nicht alles in line ersetzen, da alles, was Sie brauchen, sind die Zahlen. Sie müssen jedoch die Zahlen von line analysieren.

Sie sollten die Zahlen entweder in einer Schleife oder alle auf einmal analysieren, jede Nummer einer Variablen zuweisen und dann die Light erstellen.

Etwas ähnlich der folgenden sollte funktionieren:

public Light getLight(String name) { 
    String line; 
    double x, y, z, r, g, b, x1, y1, z1; 

    try { 
     while((line = bufferedReader.readLine()) != null) { 
      if(line.startsWith(name)) { 
       Scanner parser = new Scanner(line); 
       x = parser.nextDouble(); 
       y = parser.nextDouble(); 
       // continue assigning variables 

       // break out of while loop, only interested in one line 
       break; 
      } 
     } 

     return new Light(new Vector3f(x , y, z), new Vector3f(r, g, b), new Vector3f(x1, y1, z1)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
+0

@TotallyGamerJet Ich brauche Ihre aktualisierten Code, um zu sehen, können Sie Ihre Frage ein und fügen Sie Ihre aktualisierten Code bearbeiten - ** Hinweis: ** nicht ersetzen Ihre alter Code, fügen Sie einfach einen neuen Abschnitt am Ende Ihrer Frage mit einer Überschrift hinzu, die "Update" oder so etwas sagt. Wenn Sie Ihren alten Code ersetzen, geht die ursprüngliche Frage verloren und meine Antwort verliert ihre Bedeutung. –

+0

Ich habe es herausgefunden. Ich musste "(" & ")" entfernen und das Trennzeichen machen "," – TotallyGamerJet