Autor Wątek: [Allegro] Okrągła bitmapa  (Przeczytany 3500 razy)

Offline Rares

  • Użytkownik
    • Moja strona

# Lipiec 17, 2009, 10:09:24
Mam zamiar dodać do gry okrągły radar, taki jak w GTA. Dotychczas w mojej grze - Bad World radar był kwadratowy. Próbowałem zrobić okrągły, ale mi nie wychodziło. Stworzyłem bitmapę o wymiarach 140x140, zamalowałem ją kolorem czarnym (0,0,0) i narysowałem koło o kolorze różowym (255,0,255). Potem skopiowałem grafikę małej mapy i skopiowałem bitmapę z tym kołem na bufor i wyszło tak:



Jak usunąć te pozostałości czarnego po bokach koła? Zamalowanie kolorem RGB(255,0,255) jako przezroczytość nic nie da, bo nadal będzie widać czarne.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline mwojt

  • Użytkownik

# Lipiec 17, 2009, 10:25:11
a jak rysujesz ludzika i samochód ?

Offline Rares

  • Użytkownik
    • Moja strona

# Lipiec 17, 2009, 10:32:06
Ludzik i samochód mają swoje bitmapy, na których są obrócone o 4 stopnie w prawo. Gra zależnie od kąta wyświetla określoną klatkę na buforze za pomocą masked_blit.

wine

  • Gość
# Lipiec 17, 2009, 10:34:24
czyli tło mają różowe? Ty, to może radar też powinien mieć takie tło <przerażające_zdziwienie>? :)

Offline Rares

  • Użytkownik
    • Moja strona

# Lipiec 17, 2009, 10:39:46
Nie może, bo to co rysuje na radarze to kwadrat składający się z kafelków 5 razy mniejszych od tych z bitmapy. Po prostu muszę zakryć albo obciąć to co jest poza kołem. Ale jak to zrobić nie mam pomysłu. Tzn. mam, ale nie wiem jak to zrealizować. Kiedy rysuje otoczenie na buforze, to musiałbym wyciąć w buforze koło. Jeszcze przed rysowaniem otoczenia musiałbym rysować mapę i to by działało, ale nie wiem jak coś wyciąć w kształcie koła.

Offline dynax

  • Użytkownik

# Lipiec 17, 2009, 10:42:41
Chyba czegoś tu nie rozumiem. Zamalowałeś środek koła na różowo żeby był przeźroczysty, zostawiłeś dookoła czarną obwódkę, teraz chcesz się jej pozbyć i nie działa zamalowywanie jej kolorem różowym?

Offline Rares

  • Użytkownik
    • Moja strona

# Lipiec 17, 2009, 10:46:15
Nie.

wine

  • Gość
# Lipiec 17, 2009, 10:53:52
to ty nałożyłeś ten czarny kwadrat z różowym kołem na kafle (co z nich kwadrat powstał) i teraz się pytasz co masz zrobić, by było przezroczyste? Ja bym to rozwiązał w inny sposób - zostawił radar kwadratowy i podrasował do tego interface. W końcu przyciski do menu itd. muszą gdzieś być ;)

PS. W allegro się tego (chyba) nie da zrobić bo to wymaga obcinania bitmap po zakosie czego allegro nie obsługuje...

Offline Rares

  • Użytkownik
    • Moja strona

# Lipiec 17, 2009, 11:12:37
Myślałem też nad innym rozwiązaniem. Zamiast rysować kwadrat minimapy rysowałbym w ten sposób:
1. wiersz - jeden kafel na środku,
2. wiersz - 3 kafle na środku
...
4. wiersz - 7 kafli (wszystkie)
5. wiersz - 5 kafli na środku
...

Powstałby taki pikselowaty kwadrat obrócony o 45 stopni. Potem rysowałbym koło, tak aby zakryć tą mapę. Mapa wyglądałaby tak:



I na to rysowałbym koło, które zakryłoby te rogi.

wine

  • Gość
# Lipiec 17, 2009, 11:14:18
to będziesz miał niemiłosiernie wielkie obramowanie... bo by zakryć te ząbki trochę koloru potrzeba...

Offline Rares

  • Użytkownik
    • Moja strona

# Lipiec 17, 2009, 11:29:44
Jak myślicie, czy działałby taki pomysł. Rysuję normalnie minimapę, potem koło, następnie przechodzę przez minimapę pętlą, na początku której wypełniam środek minimapy czarnym kolorem i czyszczę każdy punkt różny od czarnego. Po wyczyszczeniu punkty znikają, a wypełnienie znika, bo był rysowany tylko w pętli. Jakbym obmyślił jak czyścić te punkty to już bym to zaimplementował.

wine

  • Gość
# Lipiec 17, 2009, 11:52:59
pewnie ustawiać na 255,0,255 i rysować masced_blitem. A i to będzie wolne... przynajmniej mnie się tak wydaje. Chodź działać powinno.

Offline Oti

  • Użytkownik

# Lipiec 17, 2009, 12:27:15
Ja  bym zrobił to tak:
1. Tworzysz sobie bitmapę o rozmiarach 140x140.
2. Wyświetlasz tam sobie swoją pomniejszoną mapkę.
3. Tworzysz sobie taką bitmapę-"maskę", czyli bitmapę o rozmiarach takich jak ta w pkt. 1, potem czyścisz ją na czarno, rysujesz na srodku zamalowane różowe kółko i powstaje Ci coś jak http://img11.imageshack.us/img11/9207/minimapkamaska.png
4. Nakładasz to na swoją bitmapkę minimapy.
5. Usuwasz 'maskę'.
6. Wykonujesz floodfill na różowo w 4 rogach minimapy.
7. Rysujesz sobie kółko o np. czarnym kolorze jako kontur, żeby ładniej wyglądało.

Offline C'mons

  • Użytkownik

# Lipiec 17, 2009, 13:47:51
Mój przepis na ciasto jest taki:

1. Tworzysz pustą bitmapę ( nazwijmy ją RADAR ) za pomocą create_bitmap(x,y) o wielkości 140x140.
2. Rysujesz tam swoją mini mapę.
3. Następnie rysujesz na bitmapie RADAR, obrazek który wygląda w ten sposób że jest czarny z różowym(255,0,255) kołem.
4. Pętelką zmieniasz każdy czarny piksel na różowy(255,0,255). - to może trochę spowolnić działanie kodu.
5. Rysujesz gotowy RADAR gdzie chcesz.

Przydała by się możność rysowania takowej figury co jest inwersją koła. - Ale niestety nie ma.
« Ostatnia zmiana: Lipiec 17, 2009, 13:53:27 wysłana przez C'mons »

Offline Oti

  • Użytkownik

# Lipiec 17, 2009, 13:49:01
Mój przepis na ciasto jest taki:

1. Tworzysz pustą bitmapę ( nazwijmy ją RADAR ) za pomocą create_bitmap(x,y) o wielkości 140x140.
2. Rysujesz tam swoją mini mapę.
3. Następnie rysujesz na bitmapie RADAR, obrazek który wygląda w ten sposób że jest czarny z różowym(255,0,255) kołem.
4. Pętelką zmieniasz każdy czarny piksel na różowy(255,0,255). - to może trochę spowolnić działanie kodu.
5. Rysujesz gotowy RADAR gdzie chcesz.
Napisałem DOKŁADNIE TO SAMO bystrzaku.