Warsztat » Forum

[SDL] Funkcja "wymazująca" obrazek z ekranu

Jun 20, 2004 | Dynax |
10 wypowiedzi na 1 stronach:
1
Dynax
Jun 20, 2004

Funkcja "wymazująca" obrazek z ekranu

Witam, od razu mówię, że szukałem godzinę w dokumentacji SDL ale nic nie znalazłem. Chodzi mi o funkcje która "wymarze" z ekranu obrazek który wcześniej był tam narysowany bez konieczności zwalniania zasobów. Chodzi o to, że rysuję obrazek (SDL_Surface) funkcją SDL_BlitSurface() a potem chcę żeby zniknął z ekranu. Da się takie coś zrobić?

Z góry dzięki za odpowiedź...
Fiołek
Jun 20, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

Wszystko się da zrobić. ;) Ten problem trudny nie jest, wystarczy tylko zapamiętać gdzie była dana bitmapa narysowana i co pod nią było, a potem odrysować jeszcze raz to co zapamiętaliśmy. Ten sposób wydajny raczej nie będzie, ale innego nie widzę.
Solmis
Jun 20, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

To zależy, czy to duży projekt i ile będziesz miał takich obrazków do "wymazania". xD
Bo jak jeden to teoretycznie możesz zrobić nawet przy pomocy IFów. ^^
Dynax
Jun 20, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

A jak to można zrobić przy pomocy ifów? Bo mam strukture obiektu (pozycja na ekranie,prędkość poruszania się itp.), powierzchnie z obrazkiem który chaciałbym wyświetlić a z tyłu jest tło. I w pętli głównej programu chciałbym kopiować wiele razy ten sam obrazek tylko z inną strukturą. Pewnie nikt nie zrozumiał  :D. To dam kawałem kodu.

Kod: cpp]
SDL_Surface *obiekt_img = NULL;

struct obiekt {
//Zmienne
int x,y;
int predkoscX,predkoscY;
//Funkcje składowe
void pokaz();
};

void obiekt::pokaz() {
rysuj(x,y,obiekt_img,screen);
}


potem

Kod: cpp]
obiekt jeden,dwa,trzy,cztery;

a potem w pętli czasu rzeczywistego chciałbym dać

Kod: cpp]
jeden.pokaz();
dwa.pokaz();
trzy.pokaz();
cztery.pokaz();

if((jeden.x > 100) && (jeden.y > 100)) {
wymarz_z_ekranu(jeden);
}
medivo
Jun 21, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

nie wiem o co chodzi dokładnie ale można po prostu:
Kod:  if((jeden.x < 100) && (jeden.y < 100))  jeden.pokaz();  

revo
Jun 21, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

Coś mi z samym problemem nie pasuje - po co chcesz coś wymazywać? W grach rysuje się praktycznie wszystko od nowa w każdej klatce.
Dynax
Jun 21, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

Właśnie przed chwilą wpadłem na rozwiązanie

Kod: cpp]
rysuj(0,0,background,screen);
      
if(jeden->x != 100) {
                    jeden->pokaz();
                    }


edit: O... medivo wymyślił dokładnie to samo  :)
medivo
Jun 21, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

czasami można wymazywać ale to raczej w prostrzych gierkach np. jak mam mało obiektów to po co mam rysować całe tło jak mogę przerysować tylko kilka fragmentów tła pod obiektami ale im więcej obiektów to robi się coraz bardziej nieopłacalne i lepiej narysować wszystko od nowa.

edit

to !=100 lepiej zmień na <100 bo może ci przeskoczyć ale to zależy jak zmieniasz te współrzędne.
Dynax
Jun 21, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

Wielkie dzięki. Temat do zamknięcia.
Solmis
Jun 19, 2004

Odp: Funkcja "wymazująca" obrazek z ekranu

Miałem na myśli to co napisał medivo... :]
Strony:
1