2011-09-01 28 views
6

Jak wygładzić animacje w Scratchu? Przede wszystkim chcę, aby po naciśnięciu i przytrzymaniu prawej strzałki poruszała się ona w prawo bez zauważalnego drgania. Plus, scratch sprawia, że ​​musisz poczekać sekundę, aby powtórzyć, gdy trzymasz strzałę. Jak mogę to wygładzić?Wygładź ruch spraju w zarysie

Odpowiedz

2

Dzięki Scratch można uzyskać bardzo płynny ruch za pomocą Glide z dużymi odległościami lub interwałami. Wadą tego sposobu jest jednak to, że operacja Glide musi się zakończyć, zanim sprite może wykonać jakiekolwiek wykrywanie, takie jak wykrywanie krawędzi lub kolizji. Często jest to niepożądane.

Małe opóźnienie, o którym mówisz po naciśnięciu klawisza, jest bezpośrednio związane z częstością powtarzania klawiatury. Kiedy naciśniesz klawisz na klawiaturze, to kluczowe wydarzenie zostanie wysłane, ale wtedy pojawi się małe opóźnienie, zanim powtórka się pojawi. Jeśli znajdziesz sposób na zmianę częstości powtarzania klawiatury systemowej, przejdzie to na Scratch.

Istnieje granica optymalizacji, którą można wykonać w programie Scratch. Jest to przecież bardzo podstawowe (ale bardzo zabawne), podstawowe środowisko programistyczne. :)

2

Można zrobić dopóki „nie strzałka wciśnięty”

po naciśnięciu strzałki powtórki ruch (lub schodzenia) dopóki nie strzałka wciśnięty

to nie będzie naciskając klawisz w określonych odstępach czasu sprawdzać, czyniąc ruch bardziej płynnym.

3

Wiem, że to stare pytanie. Ale na wypadek, gdyby ktoś szukał rozwiązania, sprawdź ten projekt zdrapy: http://scratch.mit.edu/projects/276298/

Po prostu dodaj na zawsze pętlę i wewnątrz tej pętli sprawdź czy klawisz strzałki jest wciśnięty. Jeśli tak - przenieś. W ten sposób nie będziesz zależny od częstotliwości powtarzania klawiatury.

1

Można to zrobić:

When flag pressed 
forever 
    if (right arrow pressed?) then 
    change xs by 1 
    xs = xs * 0.8 
    change x by (xs) 

która sprawdza za każdym razem, gdy zostanie naciśnięty klawisz strzałki w prawo, a jeśli tak, to zmienia zmienną xs po drugim. Później mnoży xs przez 0,8, więc wartość celowo zanika.

Następnie zmienia sprajnię x przez var xs.

+0

** OSTRZEŻENIE: Błąd w kodzie! ** Gdzie resetowanie 'xs'? Wartość 'xs' bardzo szybko przejdzie z' 1' do '0.8' do' 0.64' do '0.512' do' 0.4096' ... i zakłada, że ​​zaczyna się od 1! Ponieważ nie ma "set [xs v] to (number)", wartość ** nigdy się nie resetuje **! – wizzwizz4

+0

Kod działa. Każda wartość 'xs' staje się wykładniczo mniejsza, gdy klawisz strzałki w prawo nie zostanie naciśnięty. Więc 'xs' zbliża się do zera, gdy żaden klawisz nie został naciśnięty, a wartość 4 (obliczona jako 0,8/(1-0.8)), gdy wciśnięty jest klawisz prawej strzałki. –

0

Jednym ze sposobów, w jaki można to zrobić, jest użycie zmiennych i niestandardowych bloków, aby argumenty wygładzały ruch. Dodaj zmienną o nazwie speed x i używaj na zawsze zmiany X według prędkości X. Nie mam żadnych migawek ani przykładów, ale możesz użyć skryptów w bloku niestandardowym, aby płynnie je przesuwać.