| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Sep 2004
Beiträge: 7
| Objekte(Text) in Sinusform anordnen
Hallo Flash-Cracks, ich suche ein Mathe/Geometrie-Genie um ein AS zu coden das Objekte in Wellenform (Sinus-Form) anordnet! Mein Ziel ist es dynamischen Text in Wellenform darzustellen. Geschafft habe ich, dank einem Script das ich auch hier im Formum gefunden habe, bereits eine Kreisform. Was ich aber brauche ist eben eine Wellenform. Ich muss keine fertige Funktion haben die mir den Text und alles generiert, das kann ich selber, was ich benötige sind "nur" die Mathematischen berechnungen!! Im ist Anhang ein Beispiel als FLA und SWF in ZIP-Form wie ich mir das vorstelle und was ich mit dem Kreis bereits geschafft habe. Der Code ist grösstenteils in AS2 ![]() Ich hoffe da draussen gibt es irgend jemanden der einem Berechnungs-Banausen wie mir helfen kann!!! Greez Code: // Kreis (weiter unten ist die Sinusform)
test = "Dies ist ein Text der in Kreisform angeordnet werden sollte.";
text2curve(_root, test, 250,250,250,330,0,false,false);
function text2curve (mc:MovieClip, tempText:String, x,y,r,b,o,hm,vm) { // ordnet Text in Krisform an
// x = Gleizahl = X-Mittelpunkt des Kreises
// y = Gletzahl = Y-Mittelpunkt des Kreises
// r = Gleitzahl 0 Radius des Kreises
// b = Gletzahl 0-360 = Bogenmaß welches benutzt werden soll in Grad
// o = Gleitzahl 0-360, TRUE = Bogenoffset in Grad, den Startpunkt des Bogensfestlegen (0 = Oben) TRUE=Zentriert
// hm = TRUE, FALSE = Horizontal spiegeln
// vm= TRUE, FLASE = vertikal spiegeln
var mc:MovieClip;
var tempText:String;
temp = new Array();
for (i=0; i<tempText.length; i++)
temp[i] = tempText.charAt(i);
var txtFormat:TextFormat = new TextFormat();
txtFormat.font = "Arial";
txtFormat.size = 16;
xs=ys=100;
if (hm) temp.reverse(), mirrored=180,xs=-100;
(vm) ? ys=-100 : {} ;
for (i=0 ; i < temp.length ; i++){
level = mc.getNextHighestDepth();
mc.createEmptyMovieClip("container"+level, level);
with(mc["container"+level]) {
( o == true ) ? offset= Math.PI-(mirrored+360-b/2)/180*Math.PI : offset=Math.PI-o/180*Math.PI;
_yscale=ys;
_xscale=xs;
_x=x+Math.sin(offset-((b/(temp.length))*i)/180*Math.PI)*r;
_y=y+Math.cos(offset-((b/(temp.length))*i)/180*Math.PI)*r;
_rotation = -(Math.atan2(x-_x,y-_y)*(180/Math.PI));
createTextField("txt", mc.getNextHighestDepth(), 0, 0, 20, 20);
var txt:TextField;
txt.autoSize = true;
txt.setNewTextFormat(txtFormat);
txt.embedFonts = true;
txt.text = temp[i];
}
}
}
// Sinus (funktioniert noch nicht!)
test = "Dies ist ein Text der in Sinusform angeordnet werden sollte.";
text2sinus(_root, test, 0, 100, 500, 200);
function text2sinus (mc:MovieClip, tempText:String, x,y,b,h) { // ordnet Text in Sinusform an (innerhalb eines Rechtecks soll der Sinus "gezeichnet" werden, darum Breite und Höhe)
// Parameter für das Rechteck in dem der Sinus "gezeichnet" werden soll:
// x = Gleitzahl = X-Position der linken oberen Ecke des Rechtecks
// y = Gletzahl = Y-Position der linken oberen Ecke des Rechtecks
// b = Gleitzahl = Breite des Rechtecks
// h = Gletzahl = Breite des Rechtecks
var mc:MovieClip; // Ziel - Movieclip in den der Sinus soll
var tempText:String;
temp = new Array(); // Array mit den Zeichen des Textes
for (i=0; i<tempText.length; i++)
temp[i] = tempText.charAt(i);
var txtFormat:TextFormat = new TextFormat(); // Textformat für den Text in der Form
txtFormat.font = "Arial"; // irgendwo im SWF muss ein (leeres) Textfeld mit eingebetteten Zeichen in dieser Schriftart sein, damit die gedrehten Textfelder auch angezeigt werden!
txtFormat.size = 16;
for (i=0; i<temp.length; i++){
level = mc.getNextHighestDepth();
mc.createEmptyMovieClip("container"+level, level);
with(mc["container"+level]) {
/* START der gesuchten Berechnungen */
_x = 0;
_y = 0;
_rotation = 0;
/* ENDE der gesuchten Berechnungen */
// Textfeld generieren und mit Buchstaben füllen
createTextField("txt", mc.getNextHighestDepth(), 0, 0, 20, 20);
var txt:TextField;
txt.autoSize = true;
txt.setNewTextFormat(txtFormat);
txt.embedFonts = true;
txt.text = temp[i];
}
}
} |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Sep 2004
Beiträge: 7
|
Vielen Dank hgseib, ich hab mir unter der Dusche nochmal Gedanken zu dem Thema gemacht und da ging mir ein Kronleuchter auf ![]() Die X-Position soll Pos + Breite des letzten Buchstabens sein und die Drehung muss ich nicht verändern, da nur die Buchstaben in Sinusform stehen sollten aber in sich Vertikal. Die Y-Position kann ich ja mit der Math.sin(Bogenmass(0...360)) Funktion bestimmen ohne allzu viel zu rechnen... muss dann nur noch die -1 ... 1 die da rauskommen auf meine Höhe hochrechnen und voila ![]() Hab's also geschafft! Für alle die mal ein ähnliches Problem haben sollten oder meinen Code verwenden wollen: Code: // Sinus
test = "... und dieser in Sinusform. hahaha!";
text2sinus(_root, test, 0, 400, 400, 150, 16);
function text2sinus (mc:MovieClip, tempText:String, x,y,b,h, textHeight) { // ordnet Text in Sinusform an (innerhalb eines Rechtecks soll der Sinus "gezeichnet" werden, darum Breite und Höhe)
// Parameter für das Rechteck in dem der Sinus "gezeichnet" werden soll:
// x = Gleitzahl = X-Position der linken oberen Ecke des Rechtecks
// y = Gletzahl = Y-Position der linken oberen Ecke des Rechtecks
// b = Gleitzahl = Breite des Rechtecks
// h = Gletzahl = Breite des Rechtecks
var mc:MovieClip; // Ziel - Movieclip in den der Sinus soll
var tempText:String;
temp = new Array(); // Array mit den Zeichen des Textes
for (i=0; i<tempText.length; i++)
temp[i] = tempText.charAt(i);
var txtFormat:TextFormat = new TextFormat(); // Textformat für den Text in der Form
txtFormat.font = "Arial"; // irgendwo im SWF muss ein (leeres) Textfeld mit eingebetteten Zeichen in dieser Schriftart sein, damit die gedrehten Textfelder auch angezeigt werden!
txtFormat.size = 16;
var xPos = x;
if (textHeight != undefined)
h -= textHeight;
for (i=0; i<temp.length; i++){
level = mc.getNextHighestDepth();
mc.createEmptyMovieClip("container"+level, level);
with(mc["container"+level]) {
_x = Math.round(xPos);
_y = Math.round(y + (h/2) - (Math.sin((360 / b * _x) * Math.PI / 180) * (h / 2)));
_rotation = 0;
// Textfeld generieren und mit Buchstaben füllen
createTextField("txt", mc.getNextHighestDepth(), 0, 0, 20, 20);
var txt:TextField;
txt.autoSize = true;
txt.setNewTextFormat(txtFormat);
txt.embedFonts = true;
txt.text = temp[i];
xPos += _width;
}
}
} |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |