Aus Das deutschsprachige Scratch-Wiki

(Weitergeleitet von Bewegung von Objekten animieren)

In vielen Scratch-Projekten geht es darum eine Figur auf der Bühne zu bewegen. Dabei gibt es verschiedene Bewegungsarten, welche im folgenden Artikel vorgestellt werden.

Wenn man zum ersten Mal in Scratch programmiert, schreibt man als Anfänger*in oft folgenden Code:

gehe zu x: (100) y: (0)

um eine Figur an die Position x=100 und y=0 zu bewegen. Dabei wird die Figur aber sofort an die betreffende Stelle geschickt, d.h. sie "geht" nicht wirklich dahin sonder teleportiert sich eher.

Bewegung mit dem gleite-Befehl in konstanter Zeit

Der Gleite-Block erlaubt es den Weg zum Ziel in die Bewegung miteinzubeziehen, z.B.:

gleite in (1) Sek. zu x: (100) y: ()

Die Bewegung zum Ziel dauert hier allerdings unabhängig vom Ausgangspunkt immer genau eine Sekunde.

Bewegung mit dem gleite-Befehl mit konstanter Geschwindigkeit

Um eine Bewegung mit vorgegebener Geschwindigkeit zu erreichen, ist es notwendig die Zeit abhängig vom zurückzulegenden Weg auszurechnen:

Definiere glide with speed (speed) to x: (x) y: (y)
gleite in (([sqrt v] von ((((x) - (x-Position)) * ((x) - (x-Position))) + (((y) - (y-Position)) * ((y) - (y-Position))))) / (speed)) Sek. zu x: (x) y: (y)

Die Formel mit der Wurzel dient zum Berechnen der Distanz nach Pythagoras.

Bewegung mit dem gleite-Befehl mit konstanter Beschleunigung

Noch eleganter sieht es aus wenn man eine Beschleunigung einbaut:

Definiere glide with acceleration (a) to x: (x) y: (y)
setze [speed v] auf [0]
setze [totaldist v] auf ([sqrt v] von ((((x) - (x-Position)) * ((x) - (x-Position))) + (((y) - (y-Position)) * ((y) - (y-Position)))))
wiederhole fortlaufend 
  setze [dist v] auf ([sqrt v] von ((((x) - (x-Position)) * ((x) - (x-Position))) + (((y) - (y-Position)) * ((y) - (y-Position)))))
  falls <(dist) > ((0.75) * (totaldist))> dann 
    ändere [speed v] um (a)
  sonst 
    falls <(dist) < ((0.25) * (totaldist))> dann 
      ändere [speed v] um (() - (a))
      falls <(speed) < [0.01]> dann 
        setze [speed v] auf [0.01]
      end
    end
  end
  falls <(speed) > (dist)> dann 
    gehe zu x: (x) y: (y)
    stoppe [dieses Skript v]
  end
  ändere x um (((speed) / (dist)) * ((x) - (x-Position)))
  ändere y um (((speed) / (dist)) * ((y) - (y-Position)))
end

Rollen

Runde Figuren wie Bälle oder Kugeln rollen, dies kann mit folgendem Skript erreicht werden:

Definiere roll to x: (x) y: (y) with radius (r) and speed (speed)
setze [dist v] auf ([sqrt v] von ((((x) - (x-Position)) * ((x) - (x-Position))) + (((y) - (y-Position)) * ((y) - (y-Position)))))
wiederhole bis <(dist) < ((speed) + (1))> 
  ändere x um (((speed) / (dist)) * ((x) - (x-Position)))
  ändere y um (((speed) / (dist)) * ((y) - (y-Position)))
  falls <((x) - (x-Position)) > [0]> dann 
    drehe dich nach rechts um (((speed) * (180)) / ((r) * (3.14159))) Grad
  sonst 
    drehe dich nach links um (((speed) * (180)) / ((r) * (3.14159))) Grad
  end
  setze [dist v] auf ([sqrt v] von ((((x) - (x-Position)) * ((x) - (x-Position))) + (((y) - (y-Position)) * ((y) - (y-Position)))))
end
gehe zu x: (x) y: (y)
falls <((x) - (x-Position)) > [0]> dann 
  drehe dich nach rechts um (((dist) * (180)) / ((r) * (3.14159))) Grad
sonst 
  drehe dich nach links um (((dist) * (180)) / ((r) * (3.14159))) Grad
end


Beispielprojekt zu den verschiedenen Bewegungsarten

Zum Starten Leertaste drücken.



Schau' dir dieses Projekt auf der Scratch-Webseite an...


Die benutzerdefinierten Skripte oben kannst du in obigen Projekt finden um in deinem Projekt die das beschleunigte Gleiten und das Rollen zu verwenden.

Siehe auch



Code zum Einbinden ins Forum:
[wiki=de:Bewegung von Figuren animieren]Bewegung von Figuren animieren[/wiki]