|
Anlässlich meines 41. Geburtstages:
Tortendiagramme mit Director
Auch wenn einige Programme das schnell und schön können: Ein Tortendiagramm in Director zu zeichnen kann sehr viel Sinn machen: Man kann sich Werte aus dem Web holen und die
Torten sofort wieder dorthin zurückstellen, auf einer interaktiven CD-ROM Zahlenkolonnen illustrieren oder sogar Tortendiagramme (in 3D) animieren.
Wenn es darum geht, ein Tortendiagramm auf die Director-Stage zu zeichnen, werden es viele zunächst mit den Image-Objekten versuchen. Das wird wohl auch gehen, aber es wird weit nicht
so einfach und optisch ansprechend wie mit Vectorforms sein.
Die Tortenstücke werden als einzelne Members gezeichnet, auf der Bühne positioniert und von einer Maske abgedeckt. Diese Maske wurde mit Photoshop gemacht und schafft Spielraum für
viele mögliche Designs.
Das Problem mit Vectorforms ist ja, dass sie sich "etwas" seltsam verhalten. Zwar ist es relativ einfach, die VertexList zu bearbeiten und zu übertragen, mühsam ist aber
der RegPoint: nämlich irgendwo - und damit ist auch die Grafik irgendwo. Der Trick ist, stets für geordnete Verhältnisse zu sorgen. Geordnete Verhältnisse heißt bei
Vectorforms: nicht skalieren und in bereits bestehende Darsteller in deren vorherige Begrenzungen zu schreiben. Es gibt hier deswegen ein Muster, von dem jedes Mal wieder die Standard-VertexList
übertragen, dann der RegPoint gesetzt und dann erst die neuberechnete Vertexlist geschrieben wird. Wie immer gibt es viele Wege zum Ziel, dieser hier funktioniert hier gut.
Ich verwende hier fast ausschließlich Filmscripte. Behaviours machen wenig Sinn, wenn von einem zentralen Punkt (eben dem Script) auf mehrere Darsteller und Sprites zugegriffen wird.
Ein Verhalten würde nur vermehrten Aufwand bedeuten. Ferner gebe ich hier mehrmals feste SpriteNummern bzw Parameter an. Das ist zwar pfui und verwerflich, in einem Tutorial hilft das
aber dem Verständnis etwas auf die Sprünge; ein Sprite(10) ist einfacher zu finden als ein Sprite(pWux)
Wer will darf das aber nach Laune ändern.
Im Detail:
On StartMovie / on StopMovie:
Wie üblich: Setzen der wesentlichen Parameter und Aufräumen.
Eingaben:
Überprüfen und Standardisieren der Eingaben, im Handler "Zufallseingabe" werden auch gleich ein paar Zufallszahlen generiert. Derartige "Testhilfen" sollte man
gleich zu Beginn machen, das spart sehr viel Zeit.
Zeichnen:
Hier sind die wesentlichen Handler und Funktionen versammelt. In "TorteZeichnen" werden die benötigten Prozentwerte berechnet und daraus wiederum die absoluten Winkel der Tortenstücke:
wVon und wBis, also zb von 0°-12°, von 12° - 32° usw. Bis hier nur einfache Rechnerei und ein paar Listen.
Etwas ernster wird es im Handler " StueckBasteln Nr, wVon, wBis", in dem die Winkel zu den einzelnen Punkten zu einem Tortenstück geformt und auf den jeweiligen Member übertragen
werden. Sehr hilfreich dabei ist die Funktion "PunktWinkelZuKoords (w)", die zum Winkel die Koordinaten der Stützpunkte liefert. Hier kommt auch das erste Mal der Sinus und
Cosinus vor, ein grausiges Ding, von dem wir froh sind, dass wir seine Innereien nie wieder anrühren müssen. Die kleinen Funktionen sinDeg(Winkel in Grad) und cosDeg(Winkel in Grad)
befreien uns davon, in für Europäer ungewohnten Rad denken zu müssen.
Im Prinzip könnte alles in einem Frame ablaufen, die Blende (sprite(22)) verhindert nur ein mögliches Flackern in der Darstellung und macht alles ein bissel gediegener.
Was weiter geht:
Die Benutzereingaben habe ich hier natürlich spartanisch gehalten. Der Handler " TorteZeichnen" braucht letztlich nur eine Liste von Zahlen. Woher die kommen? - zb aus dem Web:
Eine Seite laden, parsen und in die Liste schreiben. Oder natürlich aus internen Listen.
Die Zahlen in die Grafik einzufügen ist an sich kein Problem, aus den Differenzwerten der Liste "ProzentWinkelliste" lassen sich leicht die entsprechenden Positionen berechnen.
Ein Screenshot der Torte lässt sich als Textur auf einen 3D-Körper übertragen und macht somit auch die 3D-Darstellung einfach.
Mit etwas mehr Rechenaufwand lassen sich auch Pseudo-3D-Darstellungen oder besondere Effekte bewerkstelligen. Dabei können wiederum die image-Methoden sehr hilfreich sein.
Was man besser machen könnte:
Ich habe es mir leicht gemacht: durch die weißen Linien zwischen den Torten fallen "Blitzer" nicht weiter auf. Wer vollflächige Tortenstücke haben will, sollte die
Tortenstücke etwas überlappen lassen. Dabei müssen die Schichten bedacht werden.
Ich habe auch nicht wirklich überprüft, wie sich das Ganze verhält, wenn Winkel <0° oder > 360° auftauchen, was sich zB durch Drehung ergeben würde. Eventuell
korrigieren.
|