Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-09-2006, 12:56   #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];
    }
  }
}
Angehängte Dateien
Dateityp: zip kreis_sinus_form.zip (20,9 KB, 17x aufgerufen)
mezza ist offline   Mit Zitat antworten
Alt 27-09-2006, 16:18   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
http://www.seibsprogrammladen.de/fra...ispiele/flash6
-> Zeichnen

da sind auch Sinuswellen dabei.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 28-09-2006, 09:22   #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;
    }
  }
}
mezza ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele