Autor Wątek: Java ME - migająca animacja?  (Przeczytany 986 razy)

Offline LinK

  • Użytkownik

# Styczeń 27, 2011, 23:00:50
Witam,
Zastanawiałem się nad zrobieniem migającej animacji bohatera przez kilka sekund po wykryciu kolizji z wrogiem, tak aby wyglądał ona jak by się skuł i stracił jedno życie. Teraz mam pytanie czy jest jakiś sposób aby zrobić efekt migającej animacji postaci, a może trzeba do tego użyć nowego pliku .PNG z co drugą pustą klatką animacji??
POZDRAWIAM

Offline Mr. Spam

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

Offline Lerhes

  • Użytkownik

# Styczeń 28, 2011, 01:21:15
Możesz po prostu mieć zmienną bool rysujBochatera i zmieniać ją co parę sekund z true na false. Jak true to odpalasz funkcję rysującą bohatera na ekranie, jak false to nie uruchamiasz jej.
Lerhes

Offline LinK

  • Użytkownik

# Styczeń 28, 2011, 17:00:26
Próbowałem, to zrobić ale jakoś nie wiem jak ustawić zmianę tej wartości co kilka sekund, bo za bardzo nie potrafię zrozumieć w jaki sposób odmierzać czas czyli te kilka sekund. Myślałem też, że może za miast korzystać z metody rysującej bohatera na ekranie wykorzystać metodę remove() i append() na LayerManager'a.

Offline LinK

  • Użytkownik

# Styczeń 31, 2011, 23:11:26
Witam wszystkich,
Poradziłem sobie z tym problemem. Zacznę od tego, że postanowiłem wykorzystać obiekt klasy Timer do odliczania czasu(teraz już wiem jak to zrobić). Aby móc go wykorzystać należało również stworzyć klasę dziedziczącą po "TimerTask" i nadpisać metodę "run()", kolejno utworzony obiekt tej kasy wstawić jako argument metody klasy Time o nazwie "schedule(TimerTask task, long delay, long period)".
Dodatkowo obiektowi reprezentującemu bohatera dodałem atrybut "boolean niesmiertelnosc = false" i po każdej wykrytej kolizji zmieniałem go na "true" oczywiście musiałem dorzucić warunek w metodzie wykrywania kolizji.

//------------Klasa reprezentujaca niesmiertelnosc bohatera-------------------
static boolean czyMiga = false;
static boolean migania = true;
static int licznikMigania = 0;
class Niesmiertelny extends TimerTask {

public void run() {
licznikMigania++;
if((licznikMigania < 21) && (niebieskiPotwor.niesmiertelnosc == true)) {
if(migania == true) {
remove(niebieskiPotwor);
migania = false;
}else if(migania == false) {
append(niebieskiPotwor);
migania = true;
}

} else {
licznikMigania = 0;
niebieskiPotwor.niesmiertelnosc = false;
this.cancel();
}
}

}
//------------Koniec wewnętrzenej klasy------------------------------------------

Wywołanie obiektu tej klasy wygląda następująco:
if(czyMiga == true) {

Timer timer = new Timer();
Niesmiertelny niesmiertelny = new Niesmiertelny();
timer.schedule(niesmiertelny, 0, 100);
czyMiga = false;
}

To chyba było by na tyle tak z grubsza. Mam nadzieje, że komuś się to przyda w przyszłości.
POZDRAWIAM