2013-03-10 28 views
7

Pracuję nad 2D strzelanka w LibGdx. Muszę wspomnieć, że jestem nowy w LibGdx i staram się naprawdę zrozumieć, jak to działa. Mam doświadczenie w programowaniu Java i Android od kilku lat, więc rozumiem koncepcje gier.duszek libgdx znikną

Jestem zainteresowany, czy istnieje sposób na zanikanie obiektu obiektu.

Mam wrogów na ekranie, a kiedy wróg jest martwy, chcę usunąć obiekt Wroga z mojej listy i zignorować go w logice obliczeń i przecięć.

Ale chcę, aby sprite wroga pozostało na ekranie nieco dłużej i powoli znika.

Czy istnieje dobry sposób na libgdx sobie z tym poradzić ... czy muszę wyciągnąć jakieś dodatkowe „Fade out” klatki ... i obsługiwać go wewnątrz animacji ...

Czy jest wbudowany funkcja, która obsługuje tego rodzaju rzeczy?

Tnx dużo! Potrzebuję kogoś, kto by mi to wyjaśnił, zanim zacznę burzę mózgów i stracę życie w rysowaniu sprite'ów.

+0

Używasz wewnętrzną Stage2D dla swoich duchy? –

+0

Nie, używam partii do rysowania moich tekstur i spritów ... Używam Stage2D dla rzeczy na ekranie, takich jak przycisk pauzy itp.Ale wszystkie spity i cząstki są rysowane za pomocą SpriteBatch. – Veljko

+0

Najprawdopodobniej będziesz musiał napisać własną. Jeśli używasz Stage2D, możesz użyć frameworku Akcji, aby ukończyć zanikanie. Nadal możesz to zrobić, sam zajmij się kodem akcji. Spójrz na AlphaAction. –

Odpowiedz

11

Powinieneś być w stanie zanikać martwe wrogie duchy, zmniejszając ich "alfa" w miarę upływu czasu. Myślę, że najprostszym sposobem na to jest użycie partię setColor():

batch.setColor(1.0f, 1.0f, 1.0f, fadeTimeAlpha); 
batch.draw(deadEnemySprite, ...); 

Będziesz musiał obliczyć fadeTimeAlpha (biorąc go od 1.0f do 0.0f w czasie).
Pomocne może być Color.lerp() methods.

Nie jestem pewien, czy ustawienie koloru dla każdego duszka spowoduje, że partia wypłynie (podejrzewam, że tak będzie), więc może to mieć stosunkowo wysoki koszt wydajności (zakładając, że twój rysunek sprite batch zachowywał się dobrze wcześniej).

+0

Tnx za odpowiedź! Ja też to wypróbuję. Kiedy zmieniam kolor wsadowy, czy oznacza to, że wszystko, co rysuję tym obiektem wsadowym, zanika? Czy mogę mieć wiele instancji batchowych na ekranie gry? – Veljko

+0

@Veljko to pewnie za późno, ale tak, to znaczy, że wszystko zniknie. Musisz zresetować go za pomocą 'setColor (1, 1, 1, 1)' pomiędzy losowaniami. – ashes999

+0

Nie ma problemu. Rozwiązałem to dawno temu. Tnx i tak. – Veljko

1

Korzystanie Sprite można użyć .setAlpha:

alpha += (1f/60f)/2; 
icon.setAlpha(alpha); 

Po pierwsze, system alpha: możliwość dostarczenia liczbę między 0,0 a 1,0 (a nie od 0 do 255)

we fragmencie kodu powyżej, alpha to wartość zmiennoprzecinkowa, a icon to Sprite. Alpha to (początkowo) 0 w tym przypadku.

do obliczenia:

(1f/60f)/2; 

1f jest Max alpha

60f JEST FPS

i 2, ponieważ chcę to, aby przejść ponad 2 sekundy.

(Nowy w LibGDX, więc nie mam pojęcia, jak mogę uzyskać FPS, ponieważ nie jest to konieczne 60).

Zmiana czego podzielić przez (i zmieniając fps, jeśli istotne) zmiany ile dodaje (lub usunięte) z alfa i jak długo animacja trafi ponad

+1

Działa świetnie! głosowali. – ROSA