Antworten auf deine Fragen:
Neues Thema erstellen

[R10.5] - Animation einer analogen Uhr funktioniert nicht

G

Gelöschtes Mitglied 467863

Guest

Hallo zusammen.

Nachdem (dank eurer Hilfe) meine Digitaluhr super funktioniert, habe ich mir ein analoges Uhrwerk modelliert (). Diese will ich so animieren, dass die Zeit über Frames gesteuert wird. Ich habe folgenden Code in Coffee erstellt:

// Uhrzeit zum Start festlegen
var stunden = 9.0; // Wert zwischen 0 und 11 eingeben
var minuten = 23.0; // Wert zwischen 0 und 59 eingeben
var sekunden = 16.0; // Wert zwischen 0 und 59 eingeben
var last_sekunde = 16.0; // selben Wert wie bei Sekunden einsetzen

// Subroutine Zeiger drehen
drehen(doc,obj_name,drehung)
{ var obj = doc->FindObject(obj_name);
if (obj == NULL)
{return; }
var rotation = obj->GetRotation();
rotation.z = drehung;
obj->SetRotation(rotation); }

// Subroutine Zeit um eine Sekunde hochzählen
SetUhrzeit(doc,stunden,minuten,sekunden,last_sekunde)
{ if (sekunden == last_sekunde)
{ return; }
var doc = GetActiveDocument();
var sekunden = sekunden + 1;
if (sekunden > 59)
{ sekunden = 0;
minuten = minuten + 1; }
if (minuten > 59)
{ minuten = 0;
stunden = stunden + 1; }
if (stunden > 11)
{ stunden = 0; }
var last_sekunde = sekunden;
var drehung_h = -2 * 3.1415926 / 12 * stunden + (-3.1415926 / 360 * minuten);
var drehung_m = -2 * 3.1415926 / 60 * minuten;
var drehung_s = -2 * 3.1415926 / 60 * sekunden;

drehen(doc,"Sekundenzeiger",drehung_s);
drehen(doc,"Minutenzeiger",drehung_m);
drehen(doc,"Stundenzeiger",drehung_h);
drehen(doc,"Stellrad",drehung_m);
}

main(doc,op)
{ var doc = GetActiveDocument();
var akt_frame = doc ->GetTime()->GetFrame(doc->GetFps());
var flag_set = int(Modulo(akt_frame,25));
if(flag_set == 0)
{ SetUhrzeit(doc,stunden,minuten,sekunden,last_sekunde);
}
}

Beim Kompilieren kommt keine Fehlermeldung. Die Sekunden verändern sich aber nicht. Kann mir jemand sagen, wo mein Fehler liegt?

Danke im voraus.
 

NT2005

Von dannen.

AW: Animation einer analogen Uhr funktioniert nicht

Hallo Smart,

Prüf doch einmal ob du überhaupt bis dahin kommst:
var obj = doc->FindObject(obj_name);
if (obj == NULL)
{return; }

Und welcher Wert gesetzt wird. Meist hilft auch ein EventAdd(). ;)
 
G

Gelöschtes Mitglied 467863

Guest

AW: Animation einer analogen Uhr funktioniert nicht

Hallo NT2005.

Am Anfang habe ich
var sekunden = 16.0; // Wert zwischen 0 und 59 eingeben
var last_sekunde = 16.0; // selben Wert wie bei Sekunden einsetzen

geändert in

var sekunden = 16.0; // Wert zwischen 0 und 59 eingeben
var last_sekunde = 15.0; // eine Sekunde weniger als sekunden

Dann habe ich den EvendAdd(); eingefügt. Jetzt springt er in die Subroutine SetUhrzeit. Dort erhalte ich einen Fehler.

var sekunden = sekunden + 1.00; <<<--- In dieser Zeile entsteht der Fehler
if (sekunden > 59.00)
{ sekunden = 0.00;

Incompatible values... NIL / Float file expression

Der Wert sekunden steht auf 16.00000 (mit println in der Konsole abgefragt).

Sekunden ist doch ein float-Objekt. Warum dann die Fehlermeldung?

DAnke für deine Hilfe.
 

Septaros

Noch nicht viel geschrieben

AW: Animation einer analogen Uhr funktioniert nicht

Hmm... ist zwar etwas geknaube aber mit "globalen Variablen" gehts:

// Uhrzeit zum Start festlegen
var stunden = 9.0; // Wert zwischen 0 und 11 eingeben
var minuten = 23.0; // Wert zwischen 0 und 59 eingeben
var sekunden = 56.0; // Wert zwischen 0 und 59 eingeben
var last_sekunde = 16.0; // selben Wert wie bei Sekunden einsetzen

// Subroutine Zeiger drehen
drehen(doc,obj_name,drehung)
{ var obj = doc->FindObject(obj_name);
if (obj == NULL)
{return; }
var rotation = obj->GetRotation();
rotation.z = drehung;
obj->SetRotation(rotation); }

// Subroutine Zeit um eine Sekunde hochzählen
SetUhrzeit()
// { if (sekunden == last_sekunde)
// { return; }
{ var doc = GetActiveDocument();
sekunden = sekunden + 1;
if (sekunden > 59)
{ sekunden = 0;
minuten = minuten + 1; }
if (minuten > 59)
{ minuten = 0;
stunden = stunden + 1; }
if (stunden > 11)
{ stunden = 0; }
//var last_sekunde = sekunden;
var drehung_h = -2 * 3.1415926 / 12 * stunden + (-3.1415926 / 360 * minuten);
var drehung_m = -2 * 3.1415926 / 60 * minuten;
var drehung_s = -2 * 3.1415926 / 60 * sekunden;

drehen(doc,"Sekundenzeiger",drehung_s);
drehen(doc,"Minutenzeiger",drehung_m);
drehen(doc,"Stundenzeiger",drehung_h);
drehen(doc,"Stellrad",drehung_m);
}

main(doc,op)
{ var doc = GetActiveDocument();
var akt_frame = doc ->GetTime()->GetFrame(doc->GetFps());
var flag_set = int(Modulo(akt_frame,25));
if(flag_set == 0)
{ SetUhrzeit();
}
}


die Zeitwerte wurden von der SetUhrzeit Funktion nicht zurückgegeben. Ich bin leider auch n Anfänger was programmieren angeht, aber ich bin mir sicher, dass es da auch bessere Lösungen für gibt.

die Sache mit dem last_sekunde hab ich mal raus gelassen da die abfrage außer beim ersten mal immer die Funktion abbrach.

Viele Grüße
 
Zuletzt bearbeitet:
G

Gelöschtes Mitglied 467863

Guest

AW: Animation einer analogen Uhr funktioniert nicht

Hallo Septaros.

Danke für deine Hilfe. Die Uhr tickt!!!! Ich habe nur die Formel für die Drehung etwas modifiziert, damit Cinema weniger rechnen muss:
var drehung_h = -3.1415926 / 6 * stunden + (-3.1415926 / 360 * minuten);
var drehung_m = -3.1415926 / 30 * minuten;
var drehung_s = -3.1415926 / 30 * sekunden;


Der heutige Tag ist gerettet...........

Viele Grüße smart88
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben