# Mein Spiel will sich nicht zeichnen lassen !!!



## Androbin (9. Mai 2014)

Hallo alle zusammen, :gaen:

ich habe mir der Einfachheit halber eine Library geschrieben, die ich ( und andere ) für z. B. die Spiele-Programmierung nutzen können :toll:
Diese wollte ich eigentlich auch gleich austesten und habe mir vorgenommen, damit DoodleJump nachzuprogrammieren :idea:
Nur leider will mein Spiel sich nicht zeichnen, d. h. es werden die jeweiligen paint-Methoden aufgerufen, aber sehen kann man absolut REIN GAR NICHTS ;(
Die Frage dürfte sich dann wohl erübrigt haben, den Code verschieb' ich lieber in den Anhang, iss' recht viel


----------



## strußi (10. Mai 2014)

eine vermutung die ich habe, du zeichnest auf einem untenliegenden layer, der von einem anderen verdeckt wird


----------



## Androbin (10. Mai 2014)

: strußi: Gute Idee :idea:
Aber wo das Problem liegt, weiß ich leider immer noch nicht ;(


----------



## Bananabert (21. Mai 2014)

Moin,

viel zu anstrengend sich da durch zu wursten. Kannst du das Ganze nicht auf das Wesentliche reduzieren ?


----------



## Androbin (18. Jul 2014)

Bananabert hat gesagt.:
			
		

> Moin,
> viel zu anstrengend sich da durch zu wursten. Kannst du das Ganze nicht auf das Wesentliche reduzieren ?


Das Problem ist ja, dass ich eben nicht weiß, wo/was der Fehler ist!


----------



## kaoZ (19. Jul 2014)

> Das Problem ist ja, dass ich eben nicht weiß, wo/was der Fehler ist!



Werden denn irgendwelche exeptions geworfen ?

naja, ich hab mir jetzt den Code nicht angeschaut , aber soweit wie ich das mittlerweile beurteilen kann ist das Prinzip immer das gleiche , zumindest wenn es um 2D games geht,

 - initialisieren()
_______________________
 - updaten()
 - rendern()
 - zeichnen()
_______________________

 - Thread schlafen legen
_______________________

 - wiederholen

wobei rendern letztendlich der schritt ist der wirklich entscheidend ist , hier wird die map/Hintergrund und alle Objekte mit einer bestimmten Framerate gezeichnet, dies passiert für gewöhnlich mit dem Bild / Image auf welchem sich dann alles befinden soll, erst im letzten Schritt dem zeichnen() wird dann das komplette bild unter verwendung des Grafik-kontexts des Containers auf welchem sich das Image befindet gezeichnet.

Wenn du diese Schritte einhältst, und prüfst ob der Grafik Kontext mit welchem du zeichnen möchtest auch vollständig initialisiert ist sollte das eigentlich immer funktionieren.

die oben genannten Schritte finden für gewöhnlich in einem Gameloop / eigenem Thread statt.


----------



## Androbin (19. Jul 2014)

: kaoZ *8*
Ja, soweit war ich auch schon :gaen:
PS. Nein, es werden keine Exception's geworfen!


----------



## TiGreen (19. Jul 2014)

Wenn ich nur so kurz über den Source-Code gucke, finde ich es schon komisch dass du versuchst das Rad wieder neu zu erfinden, anstatt die Objekte aus der Klasse *World *zu benutzen erstellst du neue...

*Game* Hier erstellst du einfach alles neu was in der *World *schon vorhanden ist

```
private ArrayList<Sprite> platforms = new ArrayList<Sprite>(); 
private           Player  doodle    =  ...
```

Stattdessen solltest du die Objekte die du erzeugst der Klasse *World *hinzufügen..

Also musst du hier anstatt platforms => objects von dem WorldPanel nehmen
*Game::run()*

```
platforms.add( new Sprite( platform, x, y, platformWidth, platformHeight ) );
```


Diesen Attributen musst du alles hinzufügen anstatt eigene ArrayLists zu initialisieren

```
protected ArrayList<Sprite> objects = new ArrayList<Sprite>();
protected ArrayList<Mob   > mobs    = new ArrayList<Mob   >();
protected Player            player  = new Player( "", "", Direction.Down, 0, 0, 0, 0 );
```

oder interessiert dich schon allein die Logik nicht die in der Klasse *World *deklariert wurde?

Die Methoden benutzen ja die ArrayListen objects und mobs und denen fügst du nichts hinzu.
Also wird die Methode moveTo nicht funktionieren oder du müsstest diese überschreiben was jedoch keinen Sinn macht da die Klasse *World *alles schon regelt wenn du alles richtig hinzufügst

```
public boolean moveTo( Sprite s, Direction dir ) {
		
		for ( int i = 0; i < objects.size(); i++ ) if ( !s.checkCollision( objects.get( i ) ) ) return false;
		for ( int i = 0; i < mobs   .size(); i++ ) if ( !s.checkCollision( mobs   .get( i ) ) ) return false;
		
		s.moveTo( dir ); return true;}
```

Außerdem denke ich das die paint Methode der Klasse *World *deine Objekte deiner Klasse *Game *einfach übermalt.

*World*

```
@Override
	public void paint( Graphics g ) {
		super.paint( g );
		g.drawImage( background, 0, 0, getWidth(), getHeight(), null );
}
```


----------

