Du bist nicht angemeldet.

Marcus Gräfe

Administrator

  • »Marcus Gräfe« ist männlich
  • »Marcus Gräfe« ist der Autor dieses Themas

Beiträge: 5 941

Dabei seit: 14. August 2002

Wohnort: Düsseldorf

Hilfreich-Bewertungen: 564

  • Private Nachricht senden

1

Sonntag, 4. Mai 2014, 18:50

After Effects: Expression für Zufallstext — Wie nur x Mal pro Sekunde ändern?

Mit dem folgenden Quellcode erzeuge ich in einer After-Effects-Textebene 5 Zeilen à 8 Zeichen, die entweder 0 oder 1 sind:

Javascript-Quelltext

1
2
3
4
5
6
7
line = "";
  for (i=0; i<9*5; i++) {
    rand = Math.round(random());
    if (i % 9 == 0) line = line + "\r";
    line = line + rand;
  }
  line;

Das Problem hierbei ist, dass die Zufallszahlen sich in jedem Frame ändern, bei mir 25 Mal pro Sekunde. Das ist zu viel. Mir würde 3 Mal pro Sekunde reichen. Nur wie mache ich das? Es geht mit dem Effekt "Zeitlich abstufen", aber der verbrät CPU-Leistung ohne Ende (warum auch immer).

Eine mögliche Lösung via Expression wäre sowas wie:

Javascript-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
if (timeToFrames(time) % 2 == 0) {
line = "";
  for (i=0; i<9*5; i++) {
    rand = Math.round(random());
    if (i % 9 == 0) line = line + "\r";
    line = line + rand;
  }
  line;
}
else {
...
}

Nur was muss bei "..." hin? Irgendeinen Wert muss ich setzen, sonst steht da einfach "Object Layer". Ich benötige quasi den Wert, der im zuletzt berechneten Frame stand. Wie komme ich da dran? "valueAtTime" klappt nicht.

pascal

Registrierter Benutzer

Beiträge: 591

Dabei seit: 21. Juli 2013

Wohnort: Frankfurt am Main

Hilfreich-Bewertungen: 45

  • Private Nachricht senden

2

Sonntag, 4. Mai 2014, 19:43

Vielleicht kannst du "line" in einem Texteffect zwischenspeichern, und dann später einfach sagen line = layer.textEffect.text (wie auch immer die syntax dafür ist). Keine Ahnung ob das geht.

Marcus Gräfe

Administrator

  • »Marcus Gräfe« ist männlich
  • »Marcus Gräfe« ist der Autor dieses Themas

Beiträge: 5 941

Dabei seit: 14. August 2002

Wohnort: Düsseldorf

Hilfreich-Bewertungen: 564

  • Private Nachricht senden

3

Montag, 5. Mai 2014, 20:13

Danke für die Antwort. Klingt sehr unelegant, könnte aber funktionieren. ;)

Ich habe heute allerdings die "richtige" Lösung gefunden:

Javascript-Quelltext

1
posterizeTime(10);

Diesen Code schreibt man zu Anfang der Expression und in dem Fall entspricht die Animation dann einer Framerate von 10 fps. Und es ist dann nicht zu langsam wie "Zeitlich abstufen", was streng genommen das gleiche sein müsste.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Marcus Gräfe« (5. Mai 2014, 20:31)


Es hat bereits 1 Gast diesen Beitrag als hilfreich eingestuft.

Verwendete Tags

After Effects, Expression

Social Bookmarks