# simples Grafik Programm Sonne soll hinter Horizont untergehe



## Timmay (26. Sep 2005)

Moin! Habe einen Informatikkurs in der Schule und die Aufgabe mit BlueJ ein Haus inklusive Sonnenuntergang zu erstellen. Soweit so gut, wir haben dafür eine "Figuren" Datei(wird oft für den Javaeinstieg benutzt) bekommen mit der man Kreise, Dreiecke und Quadrate erzeugen kann. Jetzt habe ich mir allerdings in den Kopf gesetzt die Sonne hinter einem Horizont untergehen zu lassen. Allerdings erscheint diese immer vor dem Horizont wenn ich sie langsam bewege. Ich hoffe ihr könnt mir helfen, da ich überhaupt kein Java Profi bin möchte ich mich schonmal für meine "nichtfachliche" Sprache entschuldigen  

```
void sonneBewegen()
      {
 
       sonne.langsamVertikalBewegen(100);
  
       sonne.farbeAendern("rot");
       sonne.langsamVertikalBewegen(200);
     }
```
Falls dieser Code noch nicht genug ist, sagt einfach bescheid!

Schon'mal vielen Dank im voraus!!! MfG Timmay


----------



## Beni (26. Sep 2005)

Interessant wäre vorallem der Teil, bei dem du Zeichnest :wink:
Was du beachtetn solltest: man muss immer zuerst das ganze Bild löschen, dann in der richtigen Reihenfolge (von hinten nach vorne, also Himmel -> Sonne -> Horizont) zeichnen.


----------



## Timmay (26. Sep 2005)

```
public void hausErscheine()
      {
      horizont.sichtbarMachen();
      sonne.sichtbarMachen();    
      schornstein.sichtbarMachen();
      schornstein2.sichtbarMachen();
      rohbau.sichtbarMachen();
      dach.sichtbarMachen();
      dach2.sichtbarMachen();
      fenster.sichtbarMachen();
      fenster2.sichtbarMachen();
      tuer2.sichtbarMachen();
      tuer.sichtbarMachen();
      }
 Ja das mit der Reihenfolge war mir klar, sonst wird der Horizont ja auch z. B. vor dem Haus dargestellt.      :)
```


----------



## Beni (26. Sep 2005)

Timmay hat gesagt.:
			
		

> Ja das mit der Reihenfolge war mir klar, sonst wird der Horizont ja auch z. B. vor dem Haus dargestellt.



Ja, aber:

```
horizont.sichtbarMachen();
      sonne.sichtbarMachen();
```
Der Horizont (damit wir uns nicht missverstehen) sind ein paar Hügel... also irgendwas Grünes das "Boden" darstellt?

Dann ist es jetzt verkehrt herum. Der horizont sollte _vor_ der Sonne sein, aber nach deinem Code ist es umgekehrt.


----------



## Timmay (26. Sep 2005)

Ja Entschuldigung habe ich grad verkehrt herum eingesetzt. Aber auch dann geht es nicht, da wenn ich ein Objekt sich bewegen lasse wird es (wohl) in den Vordergrund verschoben.


----------



## Beni (26. Sep 2005)

Tja darum:


> man muss immer zuerst das ganze Bild löschen



Ich weiss leider nicht, was "sichtbarMachen" alles macht, aber irgendwo wird "Graphics#drawIrgendwas" aufgerufen, und an dieser Stelle fehlt etwas :wink:


----------



## Timmay (26. Sep 2005)

```
public void sichtbarMachen()
  {
    istSichtbar = true;
    zeichnen();
  }
```
Also das steht in sichtbarMachen.

```
/************************************************************************
   * Interne Klasse Zeichenflaeche - die Klasse für die GUI-Komponente,
   * die tatsächlich im Leinwand-Fenster angezeigt wird. Diese Klasse
   * definiert ein JPanel mit der zusätzlichen Möglichkeit, das auf ihm
   * gezeichnet Image aufzufrischen (erneut zu zeichnen).
   */
  private class Zeichenflaeche extends JPanel
  {
    public void paint(Graphics g)
    {
      g.drawImage(leinwandImage, 0, 0, null);
    }
  }
```
Hier habe ich was mit  





> Graphics#drawIrgendwas


gefunden.
Ansonsten kann ich dir auch die gesamten Dateien mailen.
THX


----------



## Beni (26. Sep 2005)

Ahchso, ihr verwendet ein Image ("leinwandImage"). Dann musst du das Image löschen (z.B. mit Schwarz füllen), und die veränderte Situation in das Image zeichnen (also "hausErscheine" mit der neuen Position der Sonne aufrufen).


----------



## Timmay (26. Sep 2005)

Tut mir leid wenn ich dich nerve, aber könntest du das bitte nochmal etwas genauer formulieren? Sry ist mein erstes Javaprojekt( wenn man mal den Javahamster rauslässt*g*)


----------

