Rozdział 19 · Model gry
Dlaczego ciało porusza się od ogona
Aktualizacja w odwrotnej kolejności zwija wszystkie segmenty w jeden punkt — wyjaśnimy, dlaczego.
Kolejność aktualizacji segmentów nie jest szczegółem, lecz koniecznością
Rozdział 19.6 już pokazała zasadę: ciało jest aktualizowane od ogona, każdy segment zajmuje Lokalizacja poprzednich. Zobaczymy, co się stanie, jeśli zmienimy kolejność na przeciwną — od głowy do ogona:
był: H-S1-S2
→
stało się (poprawnie): każdy odziedziczył pozycję poprzedniego
ot_hvosta.py
def dvigat_telo():
for indeks in range(len(segmenty) - 1, 0, -1):
#segmenty[indeks] dostaje STARE stanowisko segmenty[indeks - 1]
x = segmenty[indeks - 1].xcor()
y = segmenty[indeks - 1].ycor()
segmenty[indeks].goto(x, y)
Od głowy do ogona — segmenty łączą się w jeden punkt
Jeśli pójdziemy w odwrotnej kolejności,
segmenty[0] jako pierwszy otrzyma pozycję głowy. W następnej iteracji segmenty[1] odczyta współrzędne segmenty[0] — ale to jest NOWA, tylko nadpisana pozycja, a nie stara. Po kilku iteracjach wszystkie segmenty będą w tym samym punkcie — wąż wizualnie zsuwa się w kwadrat.Rozdział 19.18 pokaże bardziej elegancką alternatywę dla tego cyklu, „nowa głowa + starego korpusu”
Praktyka: właściwa kolejność odnowy ciała
Automatyczna weryfikacja — funkcje move_from_tail() i move_from_head_BROKEN():, kolejność aktualizacji decyduje o wszystkim