Ich bin gerade dabei, einen kleinen Mario-Klon zu machen.
Das Level wird schon per XML eingelesen und ausgegeben.
Das Männchen kann sich bewegen, aber noch nicht springen.
Jetzt bin ich bei der Kollisionsabfrage, denn das Männchen soll natürlich nicht durch alle Tiles durchlaufen können.
Jetzt hab ich das volgender Maßen gelöst:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
if(g_pLevel->getTileAt(m_fXPos, m_fYPos+33)->canStepOn() == false || g_pLevel->getTileAt(m_fXPos+32, m_fYPos+33)->canStepOn() == false)
{
m_canGoDown = false;
int up = (m_fYPos+32) - g_pLevel->getTileAt(m_fXPos, m_fYPos+33)->getSprite()->getRect().y;
moveUp(up);
}
else
m_canGoDown = true;
//Oben
if(g_pLevel->getTileAt(m_fXPos, m_fYPos-1)->canStepOn() == false || g_pLevel->getTileAt(m_fXPos+32, m_fYPos-1)->canStepOn() == false)
{
m_canGoUp = false;
int down = (m_fYPos-1) - ((g_pLevel->getTileAt(m_fXPos, m_fYPos-1)->getSprite()->getRect().y) + (g_pLevel->getTileAt(m_fXPos, m_fYPos-1)->getSprite()->getRect().h));
moveDown(down);
}
else
m_canGoUp = true;
|
Ich prüfe hier, ob das untere oder obere Tile des Players ein unbegehbares ist und wenn ja, dann lasse ich ihn einfach nichtmehr weiterlaufen. Da man pro Durchlauf leider mehr als einen Pixel zurück legt, muss ich natürlich auch darauf reagieren, weenn der Spieler tatsächlich _in_ einem nichtbegehbaren Tile steht. Mache ich ja auch.
Jetzt ist aber das Problem, dass, wenn ich mit dem Männchen seitlich an ein unbegehbares Tile ran gehe, ich einfach (je nach Ecke) nach oben oder unten versetzt werde.
Und genau das ist mein Problem. Ich weiß wirklich nicht, wie ich das lösen soll, da ich die hoch- und runter-Setz Anweisungen ja eigentlich auch brauche.
Ich hoffe einfach mal, dass irgendjemand was parat weiß.
MfG