Witam, mam kod, który wykrywa kolizje. Korzystam z SFML.
Chodzi o to, by obiekt nie wyszedł poza prostokąt. (Ograniczam mu pole gry)
wszystko pięknie, wykrywa mi kiedy wychodzi, lecz co dalej?
oto kod:
s void aktualizuj()
{
doGory = false; doDolu = false;
wLewo = false; wPrawo = false;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
doGory = true;
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
doDolu = true;
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
wLewo = true;
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
wPrawo = true;
}
sf::Vector2f ruch()
{
v.x = 0;
v.y = 0;
if (doGory)
{
v.y -= predkosc;
animacje();
}
if(doDolu)
{
v.y += predkosc;
animacje();
}
if(wLewo)
{
v.x -= predkosc;
animacje();
}
if (wPrawo)
{
v.x += predkosc;
animacje();
}
return v;
}
void porusz(sf::Vector2f v)
{
sprajt.move(v);
}
FloatRect doKolizji()
{
return sprajt.getGlobalBounds();
}
float dajpozycjex()
{
return sprajt.getPosition().x;
}
float dajpozycjey()
{
return sprajt.getPosition().y;
}
~Gracz(void){};
};
class Kolizje {
public:
static void czywychodzi(Gracz &g1, sf::RectangleShape prostokat, Vector2f ruch)
{
sf::FloatRect X = g1.doKolizji();
sf::FloatRect Y = g1.doKolizji();
X.left += ruch.x ;
Y.top += ruch.y ;
g1.porusz(Vector2f(ruch.x, ruch.y));
if (prostokat.getGlobalBounds().width<g1.dajpozycjex() || g1.dajpozycjex()<0 )
{
cout << "wyszedl za prawo lub lewo" << endl;
}
if (prostokat.getGlobalBounds().height < g1.dajpozycjey() || g1.dajpozycjey() < 0 )
{
cout << "wyszedl za gore lub dol" << endl;
}
}
};
Próbuje ograniczyć mu ruch w zależnosci od wykrytego przejscia przez prostokąt (os x lub y)
wpadłem na coś takiego :
static void czywychodzi(Gracz &g1, sf::RectangleShape prostokat, Vector2f ruch)
{
sf::FloatRect X = g1.doKolizji();
sf::FloatRect Y = g1.doKolizji();
X.left += ruch.x ;
Y.top += ruch.y ;
bool kolX = false; bool kolY = false;
if (prostokat.getGlobalBounds().width < g1.dajpozycjex() || g1.dajpozycjex() < 0)
kolX = true;
if (prostokat.getGlobalBounds().height < g1.dajpozycjey() || g1.dajpozycjey() < 0 )
kolY = true;
if (!kolX)
g1.porusz(Vector2f(ruch.x, 0));
if (!kolY)
g1.porusz(Vector2f(0, ruch.y));
}
lecz gdy wyjde za prostokąt, nie moge wrócic sprajtem na niego ( moge tylko poruszać się po osi oy - jeśli wyszedłem na ox), a gdy wyjde na róg, nie moge się ruszyć z miejsca. Jakieś pomysły?