Ogólnie to pojąłem mniej więcej o co chodzi w tym temacie(LazyFoo tutorial 21), lecz mam dosyć obszerny kod mojej platformówki i napotkałem problem przy operowaniu kamerą. Na ekranie mam trzy typy obiektów: 1 bohatera, przeciwników i platformy, po których chodzi bohater. Operowanie kamerą działa bez zarzutu, jeżeli chodzi o bohatera i wrogów, ale z platformami powstał problem. Mianowicie platformy są idealnie dobre zanim nastąpi przesunięcie kamery. Kiedy kamera przesunie się w prawo a następnie w lewo, te obszary platform, które nie były widoczne po przesunięciu w prawo po przejściu z powrotem "nie wracają", tzn. ani się nie wyświetlają, ani nie wykrywają kolizji.
Funkcja ustawienia kamery:
Kod: Zaznacz cały
void Man::SetCamera()
{
//Center the camera over the dot
camera.x=((x+FOO_WIDTH / 2 )-(W/2));
//Keep the camera in bounds.
if( camera.x < 0 )
{
camera.x = 0;
}
if( camera.x > LEVEL_W - camera.w )
{
camera.x = LEVEL_W - camera.w;
}
}
Funkcja rysowania platform:
Kod: Zaznacz cały
void DrawGrounds()
{
for(int i=0;i<2;i++)
{
clipsGround[i].x-=camera.x;
SDL_FillRect(screen,&clipsGround[i],SDL_MapRGB(screen>format,0x00,0xFF,0x00));
clipsGround[i].x+=camera.x;
}
}
Funkcja wykrywająca kolizję:
Kod: Zaznacz cały
for(int i=0;i<2;i++)
{
if(CheckCollision(ManRect,clipsGround[i]))
{
y-=yVel;
yVel=0;
ManRect.y=y;
Jump=false;
}
}
clipsGround[] to tablica współrzędnych platform i mam też drugą funkcję wykrywającą kolizję analogiczną do tej, ale z x-ami:) Naprawdę nie chciałem wklejać tyle kodu, ale nie widzę innego sposobu.Dziękuję za dobre chęci w okazaniu pomocy!