SDL operowanie kamerą

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Mateusz_93
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 19 lut 2009, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Architektura: x86_64

SDL operowanie kamerą

Post autor: Mateusz_93 »

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!
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości