Problemem nie polega na tym, że pętla zużywa komputerowi dużo mocy. Problemem jest to, że używając pętli, próbujesz wykonać cały obrót za jednym zamachem, nie dając programowi szansy na wykonanie operacji odpowiadających za obsługę interfejsu.
Twój program powinien działać mniej więcej wg. takiego schematu:
Kod: Zaznacz cały
while(i <2*pi){
obsłuż_eventy();
wykonaj_częściowy_obrót();
odśwież_widok();
}
Wtedy pomiędzy każdym z częściowych obrotów program sprawdzi, czy na przykład został wciśnięty jakiś przycisk, i obsłuży go, a dopiero potem kontynuuje obracanie.
Alternatywnie, tak jak napisał Afish, możesz też rozwiązać ten problem używając wątków. Działa to w uproszczeniu na takiej zasadzie, że instrukcje w różnych wątkach wykonują się równocześnie, niezależnie od siebie. W swoim programie możesz stworzyć sobie drugi wątek, który będzie wykonywał animację grafiki, podczas gdy pierwszy będzie w tym samym czasie obsługiwał interfejs. Nie jest to jakoś specjalnie zaawansowane i trudne, obecnie w prawie każdym programie używa się wątków. Poczytaj sobie o wątkach(ang. threads) w Javie.