Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-06-2005, 21:11   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 41
function() mehrfach verwenden

Hallo Actionscript-Gemeinde!

Ich wollte die folgende function mehrfach verwenden, allerdings bekomme ich es nicht hin sie mehrfach anzusteuern. Hat jemand eine Ahnung, wie ich nicht jedesmal textKreis1.drawCircle... , textKreis2.drawCircle... , textKreis3.drawCircle... schreiben muß. Mit einer Schleife geht es sicherlich, aber muß ich die ganze Function in die Schleife eintragen? Ich finde es einwenig viel. Ich hoffe jemand kann hier helfen

ActionScript:
  1. // function zum zeichen eines Kreises
  2. textKreis.drawCircleText = function(text,meinKreis){
  3.  
  4.     // apply colour
  5.     var col=new Color(this);
  6.     col.setRGB(meinKreis.col);
  7.  
  8.     // convert angle
  9.     var theta = (meinKreis.angle+180)*Math.PI/180;
  10.  
  11.     // set position of this clip
  12.     this._x = meinKreis.x;
  13.     this._y = meinKreis.y;
  14.  
  15.     // make var names more manageable
  16.     var r=meinKreis.radius;
  17.     var spac=meinKreis.spacing, fID=meinKreis.fontID, size=meinKreis.size;
  18.  
  19.     var L = text.length;
  20.  
  21.     // store the number of characters globally for easy removal
  22.     _root.noChars = L;
  23.  
  24.     // width of previous(0) and current(1) character
  25.     var cWidth0=0, cWidth1=0;
  26.  
  27.     // c takes value of each character
  28.     var c;
  29.    
  30.     // for each letter in the text
  31.     for(var i=0; i<L; i++){
  32.         c = text.substr(i,1);
  33.         if(c==" "){
  34.             // width of a <space>
  35.             cWidth0 = size/2+spac;
  36.         }else{
  37.             // attach "font"
  38.             this.attachMovie(fID,i,i);
  39.             // send to correct character frame
  40.             this[i].gotoAndStop(ord(c));
  41.             // set size
  42.             this[i]._xscale=size;
  43.             this[i]._yscale=size;
  44.             // find width of this character
  45.             cWidth1 = this[i]._width/2;
  46.             // increment angle
  47.             theta += Math.atan((cWidth1+cWidth0+(i?spac:0))/r);
  48.             // keep width for use with next character
  49.             cWidth0 = cWidth1;
  50.             // find new position and rotation
  51.             this[i]._x = Math.cos(theta)*r;
  52.             this[i]._y = Math.sin(theta)*r;
  53.             this[i]._rotation = theta*180/Math.PI+90;
  54.             var theta0 = meinKreis.drehung-(this[0]._rotation+450)%360;
  55.             var theta1 = meinKreis.drehung-(this[_root.noChars-1]._rotation+450)%360;
  56.             thetaMax = Math.max(theta1,theta0);
  57.             thetaMin = Math.min(theta1,theta0);
  58.             this._rotation =(thetaMin-(meinKreis.drehung+thetaMin-thetaMax)/2);
  59.         }
  60.     }
  61. }
  62.  
  63. meinKreis = {x:200, y:200, radius:30, angle:0, drehung:0, size:16, spacing:1, fontID:"font1", col:0x996633}
  64. meinKreis2 = {x:200, y:200, radius:30, angle:0, drehung:90, size:16, spacing:1, fontID:"font1", col:0x996633}
  65. inputText = "Link AB";
  66. inputText2 = "Link CD";
  67.  
  68. //_root.textCircle.duplicateMovieClip("textCircle2", 2);
  69. textKreis.drawCircleText(inputText,meinKreis);
  70. textKreis.drawCircleText(inputText2,meinKreis2);
Newsdesigner ist offline   Mit Zitat antworten
Alt 27-06-2005, 00:04   #2 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Mit sowas vielleicht!
PHP-Code:
var wievieleKreise=10;
for(var 
i=0i<wievieleKreisei++){
    
drawCircle("text"+i"meinKreis"+i);

btw. reservierte wörter wie "text" würde ich nicht verwenden
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 27-06-2005, 08:23   #3 (permalink)
der mit der Axt
 
Benutzerbild von ANTICHRIST
 
Registriert seit: Mar 2003
Ort: Mighty Mighty Ruhrpott
Beiträge: 449
Wie wäre es das Teil per prototype in eine Methode umzuwandeln ???
ANTICHRIST ist offline   Mit Zitat antworten
Alt 28-06-2005, 00:26   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 41
Danke für die Vorschläge, aber so einfach scheint es nicht zu sein.

ActionScript:
  1. function drawCircle(text,meinKreis){
  2.  
  3. (...)
  4.  
  5. }
  6.  
  7. meinKreis0 = {x:200, y:200, radius:30, angle:0, drehung:0, size:16, spacing:1, fontID:"font1", col:0x996633}
  8. meinKreis1 = {x:200, y:200, radius:30, angle:0, drehung:90, size:16, spacing:1, fontID:"font1", col:0x663399}
  9. meinKreis2 = {x:200, y:200, radius:30, angle:0, drehung:180, size:16, spacing:1, fontID:"font1", col:0x669933}
  10. meinKreis = array(meinKreis0,meinKreis1,meinKreis2);
  11. inputText = array("Link AB", "Link CD", "Link EF");
  12.  
  13. var wievieleKreise=3;
  14. for(var i=0; i<wievieleKreise; i++){
  15.     drawCircle(inputText[i], meinKreis[i]);
  16. }

Vielleicht eine andere Idee?
Newsdesigner ist offline   Mit Zitat antworten
Alt 28-06-2005, 03:30   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
für zwei aufrufe brauchts auch zwei objekte, bzw. die funktion entsprechend ändern.

und das fla ist für flash5 eingestellt. dann muss man auch die möglichkieten von flash5 nehmen.
Angehängte Dateien
Dateityp: zip kreisfunktion.zip (30,1 KB, 5x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (28-06-2005 um 03:31 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 28-06-2005, 08:55   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 41
Viele Dank, aber geht das auch mit 3 Texten? Bei mir geht es nicht!

ActionScript:
  1. function drawCircleText(vThis,meinText, meinKreis) {
  2.  
  3. (...)
  4.  
  5. }
  6. meinKreis = {x:200, y:200, radius:30, angle:0, drehung:0, size:12, spacing:1, fontID:"font1", col:0x996633};
  7. meinKreis2 = {x:200, y:200, radius:30, angle:0, drehung:-180, size:12, spacing:1, fontID:"font1", col:0x339966};
  8. meinKreis3 = {x:200, y:200, radius:30, angle:0, drehung:180, size:12, spacing:1, fontID:"font1", col:0x336699};
  9. meinText = "Link AB";
  10. meinText2 = "Link CD";
  11. meinText3 = "Link EF";
  12. drawCircleText(textKreis, meinText, meinKreis);
  13. drawCircleText(textKreis2, meinText2, meinKreis2);
  14. drawCircleText(textKreis3, meinText3, meinKreis3);
Newsdesigner ist offline   Mit Zitat antworten
Alt 28-06-2005, 16:34   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..für zwei aufrufe brauchts auch zwei objekte, bzw. die funktion entsprechend ändern.."
du hast deine funktion so erstellt, das sie unbedingt ein mc als grundlage benötigt. wenn du also 3mal runden willst, dann benötigst du auch drei unterschiedliche ausgangs-mc's. oder

"..bzw. die funktion entsprechend ändern.."
du musst deine funktion entsprechend ändern, das sie auch ohne mc auskommt. also das da z.b.

// set position of this clip
this._x = meinKreis.x;
this._y = meinKreis.y;

warum this._x wenn dir doch meinKreis.x bekannt ist?
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 28-06-2005, 17:18   #8 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
@ Nwesdesigner
So wie der hgseib des gemacht hat funzt des doch, auch mit der for-schleife
PHP-Code:
// function zum zeichen eines Kreises
function drawCircleText(vThistextmeinKreis) {
    
// apply colour
    
var col = new Color(vThis);
    
col.setRGB(meinKreis.col);
    
// convert angle
    
var theta = (meinKreis.angle+180)*Math.PI/180;
    
// set position of vThis clip
    
vThis._x meinKreis.x;
    
vThis._y meinKreis.y;
    
// make var names more manageable
    
var meinKreis.radius;
    var 
spac meinKreis.spacingfID meinKreis.fontIDsize meinKreis.size;
    var 
text.length;
    
// store the number of characters globally for easy removal
    
_root.noChars L;
    
// width of previous(0) and current(1) character
    
var cWidth0 0cWidth1 0;
    
// c takes value of each character
    
var c;
    
// for each letter in the text
    
for (var 0i<Li++) {
        
text.substr(i1);
        if (
== " ") {
            
// width of a <space> 
            
cWidth0 size/2+spac;
        } else {
            
// attach "font"
            
vThis.attachMovie(fIDii);
            
// send to correct character frame
            
vThis[i].gotoAndStop(ord(c));
            
// set size
            
vThis[i]._xscale size;
            
vThis[i]._yscale size;
            
// find width of vThis character
            
cWidth1 vThis[i]._width/2;
            
// increment angle
            
theta += Math.atan((cWidth1+cWidth0+(spac 0))/r);
            
// keep width for use with next character
            
cWidth0 cWidth1;
            
// find new position and rotation
            
vThis[i]._x Math.cos(theta)*r;
            
vThis[i]._y Math.sin(theta)*r;
            
vThis[i]._rotation theta*180/Math.PI+90;
            var 
theta0 meinKreis.drehung-(vThis[0]._rotation+450)%360;
            var 
theta1 meinKreis.drehung-(vThis[_root.noChars-1]._rotation+450)%360;
            
thetaMax Math.max(theta1theta0);
            
thetaMin Math.min(theta1theta0);
            
vThis._rotation = (thetaMin-(meinKreis.drehung+thetaMin-thetaMax)/2);
        }
    }
}
/*
meinKreis1 = {x:200, y:200, radius:30, angle:0, drehung:0, size:16, spacing:1, fontID:"font1", col:0x996633};
meinKreis2 = {x:300, y:200, radius:30, angle:0, drehung:90, size:16, spacing:1, fontID:"font1", col:0x996633};
inputText = "Link AB";
inputText2 = "Link CD";
drawCircleText(textKreis, inputText, meinKreis1);
drawCircleText(textKreis2, inputText2, meinKreis2);

*/
meinKreis0 = {x:200y:200radius:30angle:0drehung:0size:16spacing:1fontID:"font1"col:0x996633};
meinKreis1 = {x:300y:200radius:30angle:0drehung:90size:16spacing:1fontID:"font1"col:0x663399};
meinKreis2 = {x:400y:200radius:30angle:0drehung:180size:16spacing:1fontID:"font1"col:0x669933};
var 
textKreise = [_root.textKreis1_root.textKreis2_root.textKreis3];
var 
meinKreis = [meinKreis0meinKreis1meinKreis2];
var 
inputText = ["Link AB""Link CD""Link EF"];
for (var 
0i<textKreise.lengthi++) {
    
drawCircleText(textKreise[i], inputText[i], meinKreis[i]);

Angehängte Dateien
Dateityp: zip von_hgseib.zip (19,7 KB, 4x aufgerufen)
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 02-07-2005, 14:44   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 41
@RustyCake:

Vielen Dank für die Hilfe, ich habe versucht den Aufruf der Funktion zu vereinfachen. Allerdings scheitert es an dem MovieClip "textKreis". Was steckt da drin. Wenn ich mir ihn anschaue, ist er leer. Also müsste es doch reichen diesen einfach mit

ActionScript:
  1. _root.createEmptyMovieClip("textKreis"+i, 50+i);

zu erzeugen. Funktioniert aber nicht. Hab ich da etwas übersehen?
Newsdesigner ist offline   Mit Zitat antworten
Alt 02-07-2005, 14:57   #10 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
...guck mal in die Einstellungen für die Veröffentlichung. Da steht "Flash5". createEmptyMovieClip() gab's da noch nicht. Also einfach auf 6 umstellen...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 02-07-2005, 17:17   #11 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 41
So einfach sind die kleinen Freude! Und schon funktioniert es. Ich arbeite nie mit Flash 5 und habe daran nicht gedacht. Danke!!!
Newsdesigner ist offline   Mit Zitat antworten
Alt 02-07-2005, 18:17   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
tja lesen, siehe hier #5

"..und das fla ist für flash5 eingestellt..."
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 03-07-2005, 19:08   #13 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 41
Da hätte ich noch mal eine ganz blöde Frage. Warum kann ich über das folgende Script das Menü nicht laden, es ist doch nichts aussergewöhnliches dran. Andere movies lassen sich laden, das hier nicht:

ActionScript:
  1. _root.createEmptyMovieClip("navigation_mc", 3);
  2. navigation_mc._x20;
  3. navigation_mc._y20;
  4. navigation_mc.loadMovie("menue6.swf");

Könnt ihr nocheinmal einen Blick drauf werfen?
Angehängte Dateien
Dateityp: zip menue.zip (24,0 KB, 3x aufgerufen)
Newsdesigner ist offline   Mit Zitat antworten
Alt 03-07-2005, 23:51   #14 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Du arbeitest in der "menue6.fla" mit _root da mußte die timeline des menue6 verwenden, mach mal so!
PHP-Code:
function viewLinkText() {
    
meinKreis0 = {x:75y:75radius:30angle:0drehung:90size:13spacing:1fontID:"font1"col:0x000000};
    
meinKreis1 = {x:75y:75radius:30angle:0drehung:-90size:13spacing:1fontID:"font1"col:0x000000};
    
meinKreis2 = {x:75y:75radius:30angle:0drehung:270size:13spacing:1fontID:"font1"col:0x000000};
    
meinKreis3 = {x:75y:75radius:30angle:0drehung:-270size:13spacing:1fontID:"font1"col:0x000000};
    
meinKreis4 = {x:75y:75radius:52angle:0drehung:90size:15spacing:2fontID:"font1"col:0x000000};
    
meinKreis5 = {x:75y:75radius:52angle:0drehung:-90size:15spacing:2fontID:"font1"col:0x000000};
    
meinKreis6 = {x:75y:75radius:52angle:0drehung:270size:15spacing:2fontID:"font1"col:0x000000};
    
meinKreis7 = {x:75y:75radius:52angle:0drehung:-270size:15spacing:2fontID:"font1"col:0x000000};
    var 
inputText = ["Link AB""Link CD""Link EF""Link GH""Link IJ""Link KL""Link MN""Link OP"];
    var 
timeline this;
    
meinKreis = new Array();
    for (var 
0i<inputText.lengthi++) {
        
timeline.createEmptyMovieClip("textKreis"+i100+i);
        
meinKreis[i] = timeline["meinKreis"+i];
        
drawCircleText(timeline["textKreis"+i], inputText[i], meinKreis[i]);
    }
}
viewLinkText(); 
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake 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 13:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele