# Sidescroller - klettern



## Maxim6394 (31. Mrz 2012)

ich mache fortschritte mit meinem ersten sidescroller für android, die bewegung nach rechts und links, das springen, die kollisionserkennung und die gravitation funktionieren, aber ich komme nicht wirklich weiter beim klettern-feature. 
ich habe ein block objekt erstellt, mit dem der spieler kollidiert, und als abgeleitete klasse einen anderen block, mit dem der spieler nicht kollidiert, aber dran hochklettern kann. wenn er kollidieren würde dann könnte er nicht hochklettern, aber ich will dass der spieler oben auch auf diesem block stehen kann.
für die kollisionserkennung benutze ich für jede richtung je eine methode, die die bounds immer um 1 pixel verschiebt und im falle einer kollision den abstand zurückgibt.

```
public int abstandRechts() {
		int abstand = 0;

		int limit;
		if (xSpeed < 0) {
			limit = -xSpeed;
		} else {
			limit = xSpeed;
		}

		for (int i = 0; i < limit; i++) {
			Rect bounds = new Rect(x + i, y, x + i + width, y + height);

			if (collision(gameView.sprites, bounds)) {
				break;
			}

			abstand++;
		}
		return abstand - 1;
	}
```

es gibt abstand-1 zurück weil es vorher irgendwelche faxen gemacht hat die ich nicht nachvollziehen konnte.

um zu überprüfen ob der spieler klettern kann hab ich diese methode:

```
public boolean canClimb()
	{
		
		for(Sprite s:gameView.sprites)
		{
			Rect r=s.bounds;
			if(r!=null)
			{
				if(r.intersect(bounds))
				{
					if(s.climbable)
					{
					return true;
					}
					
				}
			}
		}
	
		return false;
	
	}
```
also der spieler sollte durch die climbable blocks durchlaufen können, wenn unter ihm normale blocks sind, und auf befehl hochklettern. er sollte auch oben darauf stehen können und auf befehl runterklettern können. 
hat jemand irgendwelche tipps oder verbesserungsvorschläge oder gedankenanstöße?


----------



## Fu3L (31. Mrz 2012)

Genau nachvollziehen was das Problem ist, kann ich grade nicht. Gibt es ein konkretes Problem?

Etwas das mir aber auffällt ist dieser Satz:


> durch die climbable blocks durchlaufen können



Ich stelle mir das mal so vor:


```
-----

___________________
```

Also eine Platform über normalem Boden, wie bei SuperMario zB. Da kann er drunterherlaufen, aber vllt auch raufspringen und sich hochziehen (das würde mich sehr an Abe's Odyssee erinnern^^)
Dann träte aber ein Problem auf, wenn du eine hochkletterbare "Steilwand" haben willst. Wobei, wenn dieses hochziehen gemeint ist,das vllt gar nicht in deinem Interesse ist, sowas zu ermöglichen.

Ist denn zumindest vom Verständnis her richtig, was ich aus deiner Beschreibung erschlossen habe?


----------



## Maxim6394 (31. Mrz 2012)

```
[][]------[][][]
    -------
    -------
[][][][][][][][][][][][][]
```

so hab ich mir das vorgestellt. das gestrichelte ist die hochkletterbare wand, die klammern sind die blöcke mit denen kollidiert wird. ich wollte dass er auf der wand oben auch laufen kann, aber vieleicht wär das auch überflüssig. bin mir da nicht ganz sicher.


----------



## Fu3L (31. Mrz 2012)

Achso, also du hast quasie die "Leiter" oder was auch immer in der Tiefe?

In den meisten Spielen ist es tatsächlich so gelöst, dass die Leiter so hoch ist, dass du ganz drauf kommst und dich dann zur Seite weg auf den harten Boden bewegen kannst. Sonst ist es mit dem Runterkommen schwerer^^ 
Aber theoretisch sollte es möglich sein wie du sagtest: Im Klettermodus nach oben und sobald die Füße den oberen Rand überschreiten, wird der Klettermodus beendet. Will man nach unten klettern, müsste man das aber auch mit einer Taste kundtun, damit der Character in den Klettermodus wechselt oder fällt.


----------

