Zdecydowanie najłatwiejszym sposobem na zrobienie tego (prawdopodobnie prawdopodobnie najlepszym, chyba że jesteś naprawdę przywiązany do wydajności) jest posiadanie dwóch kopii twoich duszków.
- Zwykła wersja
- „Gruba”, bezbarwna wersja - w zasadzie biała wersja twojego duszka X-wiele pikseli „grubsza” niż oryginał.
Narysuj cały obiekt za pomocą „grubej” wersji, a następnie narysuj zwykłą wersję na górze.
Zmieniając białą wersję „grubą”, można użyć wbudowanego przyciemniania kolorów SpriteBatch, aby dynamicznie zmieniać wybrany kolor.
Aby wygenerować „grubą” wersję, zalecam napisanie rozszerzenia potoku treści, który może automatycznie pobierać oryginalne duszki, czytać ich kanał alfa, tworzyć nowy kanał alfa, próbkując maksymalny kanał alfa z oryginalnego obrazu X-wiele pikseli wokół każdego piksela, i ustawienie RGB = (1,1,1).
Musisz upewnić się, że wszystkie duszki mają wystarczającą przezroczystą ramkę, aby dodać kontur (możesz to sprawdzić w procesorze treści - a nawet zrobić miejsce, jeśli to konieczne).
Jeśli masz tylko kilka duszków, możesz po prostu użyć dobrego edytora obrazów (GIMP, Photoshop) i zrobić to ręcznie: kanał alfa do wyboru, rozwinąć wybór, wybór do alfa, wypełnić kanały koloru białego.
W zależności od wymagań, skuteczne może być również utworzenie konturu na żądanie dla duszka. Zakładam, że twoje duszki mają przezroczystość i mają nieregularny kształt, a nie tylko prostokąty (choć to by działało dobrze, prostokąty konturu powinny być Trywialne).
Zauważ, że nie musisz tego robić przy każdym losowaniu (chociaż przypuszczam, że mógłbyś), ale po prostu utwórz nowy kontur duszka podczas przełączania duszków.
źródło
Najprostszym podejściem z użyciem brutalnej siły jest zbudowanie dwóch kopii każdego duszka, normalnego i wyróżnionego. Następnie po prostu zamień je, gdy zostanie podświetlone.
Jeśli masz wolną pamięć, nie musisz się komplikować. Dodatkowo artyści mają całkowitą kontrolę nad wyglądem, gdy są podświetleni, dzięki czemu możesz wykonać kontur lub cokolwiek innego, co chcesz.
źródło
Co powiesz na każdą duszkę, masz też inną duszkę, która jest konturem duszka podstawowego. Podczas rysowania obrysowanego obiektu narysuj duszki bazowe, a następnie utwórz maskę połączonego renderowania, a następnie narysuj duszki konturowe z wyłączeniem maski.
źródło
Kilka różnych rozwiązań z różnymi kompromisami.
Najłatwiej: Renderuj obiekt kilkakrotnie za pomocą płaskiego koloru i zniekształć pozycję (przesunięcie w lewo, w górę, w dół, w prawo itp.), Utworzy to konturową wersję tego, co na nim renderujesz, ale ma koszty wydajności i nie będzie pozwalają na tłuste obramowania bez wielu dodatkowych renderów. Obramowanie z jednym lub dwoma pikselami może być poprawne z 4x.
Najszybszy: Przetwarzaj teksturę i przygotuj kopię, która jest już obramowana lub jest tylko obramowaniem lub jest płaską 8-bitową maską w skali szarości, którą można pokolorować w module cieniującym. Będzie to prawdopodobnie szybkie kosztem pamięci.
Najlepsze: Moim zdaniem, ale najlepszym rozwiązaniem byłoby wygenerowanie reprezentacji pola podpisanego odległości (SDF) dla Twojego obiektu. Te tekstury mogą być znacznie mniejsze niż tekstura źródłowa i nadal przechwytywać przydatne dane. Zasadniczo każdy piksel koduje odległość od obiektu użytego do jego wygenerowania. Mając te dane w ręku, możesz pisać wszelkiego rodzaju efekty, od świecących do konturów. Obramowanie może zmienić rozmiar i kolor itp., I wciąż jest stosunkowo tanim shaderem i tylko jednym dodatkowym rysowaniem. Minusem jest oprzyrządowanie i przetwarzanie wstępne.
źródło
Nie jestem pewien skuteczności, ale najłatwiej widzę narysować większą wersję duszka w kolorze, który chcesz wybrać jako pierwszy. Narysuj na tym duszka. Zobaczysz tylko krawędź pierwszego duszka, dając efekt selekcji.
EDYCJA: Jednak, jak widać z komentarzy, nie jest to dobry pomysł.
źródło
Zgadzam się z powiększaniem duszka. Zdecydowanie najłatwiejsza droga, którą można zastosować do wyboru DOWOLNEGO duszka bez konieczności tworzenia dodatkowych duszek specjalnie do tego celu.
źródło
Zamień kolor oryginalnego duszka na kolor konturu (lub nawet przyciemnij go, jeśli chcesz). Renderuj tę płasko sprasowaną lub przyciemnioną ikonkę cztery razy z przesunięciem 1 piksela: w x, y = (- 1, -1), następnie (+ 1, -1), następnie (-1, + 1), a następnie (+1 , +1). Powtórz dla wszystkich duszków, które tworzą obiekt.
Następnie renderuj oryginalne duszki w odpowiedniej kolejności na górze w (0,0).
źródło