Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-03-2004, 11:47   #1 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Aus Embed Objekt Variable an die SWF geben

Hi,

kann es sein, das wenn ich eine SWF in ein HTML-Code einbinde und dort mit

name.swf?parameter=wert

die SWF bestimme und eine Variable übergeben will, diese nicht in einem LoadVars Objekt gültig ist?

Ich hab nämlich eine SWF, die über 5 verschiedene Domains erreichbar sein soll und jeweils einen entsprechenden Menüpunkt dann aufruft. Ich wollte per PHP und GET aus der Browserzeile die URL ziehen und dann entsprechend mit einem Switch das Parameter selected übergeben.
Wisst ihr wie ich das meine?

Hier mein AS

ActionScript:
  1. this.onEnterFrame
  2.     {                  
  3.     MovieClip.prototype.setColor=function(colour)
  4.         {
  5.         newColor=new Color(this);
  6.         newColor.setRGB(colour);
  7.         };
  8.     var loader=new LoadVars()
  9.     loader.load("colours.php");
  10.     loader.onLoad=function(success)
  11.         {
  12.         if(success)
  13.             {         
  14.             for (i=0; i<this.swatches; i++)
  15.                 {
  16.                 _global["colour_"+i]=this["colour_"+i]   
  17.                 }
  18.                 init_colour=new Array();
  19.             switch(selected)
  20.                 {
  21.                 case 1:   
  22.                     init_colour=new Array(_global.colour_0, _global.colour_7, _global.colour_14, _global.colour_21);
  23.                     _root.elements.top_navi_00.gotoAndStop("active");
  24.                     _root.elements.top_navi_01.gotoAndStop("inactive");
  25.                     _root.elements.top_navi_02.gotoAndStop("inactive");
  26.                     _root.elements.top_navi_03.gotoAndStop("inactive");
  27.                     _root.elements.top_navi_04.gotoAndStop("inactive");
  28.                 break;
  29.                 case 2:
  30.                     init_colour=new Array(_global.colour_1, _global.colour_8, _global.colour_15, _global.colour_22);
  31.                     _root.elements.top_navi_01.gotoAndStop("active");
  32.                     _root.elements.top_navi_00.gotoAndStop("inactive");
  33.                     _root.elements.top_navi_02.gotoAndStop("inactive");
  34.                     _root.elements.top_navi_03.gotoAndStop("inactive");
  35.                     _root.elements.top_navi_04.gotoAndStop("inactive");
  36.                 break;
  37.                 case 3:
  38.                     init_colour=new Array(_global.colour_2, _global.colour_9, _global.colour_16, _global.colour_23);
  39.                     _root.elements.top_navi_02.gotoAndStop("active");
  40.                     _root.elements.top_navi_00.gotoAndStop("inactive");
  41.                     _root.elements.top_navi_01.gotoAndStop("inactive");
  42.                     _root.elements.top_navi_03.gotoAndStop("inactive");
  43.                     _root.elements.top_navi_04.gotoAndStop("inactive");
  44.                 break;
  45.                 case 4:
  46.                     init_colour=new Array(_global.colour_3, _global.colour_10, _global.colour_17, _global.colour_24);
  47.                     _root.elements.top_navi_03.gotoAndStop("active");
  48.                     _root.elements.top_navi_01.gotoAndStop("inactive");
  49.                     _root.elements.top_navi_02.gotoAndStop("inactive");
  50.                     _root.elements.top_navi_00.gotoAndStop("inactive");
  51.                     _root.elements.top_navi_04.gotoAndStop("inactive");
  52.                 break;
  53.                 case 5:
  54.                     init_colour=new Array(_global.colour_4, _global.colour_11, _global.colour_18, _global.colour_25);
  55.                     _root.elements.top_navi_04.gotoAndStop("active");
  56.                     _root.elements.top_navi_01.gotoAndStop("inactive");
  57.                     _root.elements.top_navi_02.gotoAndStop("inactive");
  58.                     _root.elements.top_navi_03.gotoAndStop("inactive");
  59.                     _root.elements.top_navi_00.gotoAndStop("inactive");
  60.                 break;
  61.                 }
  62.             _root.elements.colour_switch_00.setColor(init_colour[0]);
  63.             _root.elements.colour_switch_01.setColor(init_colour[1]);
  64.             _root.elements.colour_switch_02.setColor(init_colour[2]);
  65.             _root.elements.colour_switch_03.setColor(init_colour[3]);
  66.             _root.elements.colour_switch_00.colour_value = eval("init_colour[0]");
  67.             _root.elements.colour_switch_01.colour_value = eval("init_colour[1]");;
  68.             _root.elements.colour_switch_02.colour_value = eval("init_colour[2]");
  69.             _root.elements.colour_switch_03.colour_value = eval("init_colour[3]");
  70.             _root.elements.top_navi_00.colour_value=init_colour[0];
  71.             _root.elements.top_navi_00.top_navi_3d_button_00.surface.setColor(init_colour[0]);
  72.             _root.elements.top_navi_01.colour_value=init_colour[0];
  73.             _root.elements.top_navi_01.top_navi_3d_button_01.surface.setColor(init_colour[0]);
  74.             _root.elements.top_navi_02.colour_value=init_colour[0];
  75.             _root.elements.top_navi_02.top_navi_3d_button_02.surface.setColor(init_colour[0]);
  76.             _root.elements.top_navi_03.colour_value=init_colour[0];
  77.             _root.elements.top_navi_03.top_navi_3d_button_03.surface.setColor(init_colour[0]);
  78.             _root.elements.top_navi_04.colour_value=init_colour[0];
  79.             _root.elements.top_navi_04.top_navi_3d_button_04.surface.setColor(init_colour[0]);
  80.             _root.elements.top_navi_05.colour_value=init_colour[0];
  81.             _root.elements.top_navi_05.top_navi_3d_button_05.surface.setColor(init_colour[0]);
  82.             _root.elements.top_navi_06.colour_value=init_colour[0];
  83.             _root.elements.top_navi_06.top_navi_3d_button_06.surface.setColor(init_colour[0])
  84.             _root.elements.navi_01.setColor(init_colour[0]);
  85.             _root.elements.navi_02.setColor(init_colour[0]);
  86.             _root.elements.navi_03.setColor(init_colour[0]);
  87.             _root.elements.navi_04.setColor(init_colour[0]);
  88.             _root.elements.navi_05.setColor(init_colour[0]);   
  89.             _root.elements.content_navi_background.setColor(init_colour[0]);
  90.             _root.elements.background.setColor(init_colour[0]);
  91.             _root.elements.white_navi_01._alpha = 5;
  92.             _root.elements.white_navi_02._alpha = 10;
  93.             _root.elements.white_navi_03._alpha = 15;
  94.             _root.elements.white_navi_04._alpha = 20;
  95.             _root.elements.white_navi_05._alpha = 25;
  96.             _root.elements.navi_typo_01._alpha = 50;
  97.             _root.elements.navi_typo_02._alpha = 50;
  98.             _root.elements.navi_typo_03._alpha = 50;
  99.             _root.elements.navi_typo_04._alpha = 50;
  100.             _root.elements.navi_typo_05._alpha = 100;
  101.             }
  102.         }   
  103.     }

Yves
  Mit Zitat antworten
Alt 25-03-2004, 11:56   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
hi Yves,

die übergebenen Variablen liegen immer auf _level0 und sind immer von Typ String.
Wenn du also dein swf so einbindest:

name.swf?selected=1

muss dein switch-Block folgendermaßen aussehen:
ActionScript:
  1. switch(_level0.selected){
  2. case "1": // ...
  3. }
gruß,
roman

<edit>
und wieso liegt der gesamte Code in einem onEnterFrame-Handler?
</edit>

Geändert von romän (25-03-2004 um 11:58 Uhr)
romän ist offline   Mit Zitat antworten
Alt 25-03-2004, 13:06   #3 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Geschrieben von romän


<edit>
und wieso liegt der gesamte Code in einem onEnterFrame-Handler?
</edit>
Danke ersteinmal, es funktioniert! Ich hab anstatt Integer direkt dann String genommen.

Zu dem Handler… was spricht denn dagegen? Ich habe mir das so angewöhnt, normales AS das auf in einem Frame liegt mit diesem Handler zu versehen. Hat bisher nie Probleme gemacht und irgendwie sieht der Code dann nicht so „lose“ aus

Übrigens hier noch etwas das ich nun ins PHP/MYSQL Forum geschrieben habe, aber vielleicht hat ja jemand in Verbindung mit dem obigen Script Verwendung oder sogar einen Tipp dazu.

Zitat:
Hi zusammen,

ich habe eine index.php die eine main.swf aufrufen soll. Diese main.swf enthält 5 Menüpunkte. Jeder dieser Menüpunkte kann auch über eine extra Domain erreicht werden. Der Kunde will das so.

Nun könnte ich 5 index.php in verschiedenen Ordner machen etc. aber das ist nicht elegant finde ich.

Ich möchte aus der Browserzeile lesen, welcher Name dort enthalten ist. Wie kriege ich den String aus der Browserzeile in mein Script? Und dann wollte ich dort mit eregi(); prüfen, welche Domain eingegeben wurde. Bei Interessiert nur der Domainname.
Danach denke ich, kann man per switch(); entsprechend 2 Variablen setzen. 1. eine für die dynamische <title> Information und eine für das Übergabeparameter an die SWF.

Jemand eine Idee?

Mein Code sieht so aus

PHP-Code:
<html>
<head>
<title>Haupttitel | <?php echo''.$additional.'';?></title>
<link rel='stylesheet' href='cms/default.css'>   
<meta http-equiv='content-type' content='text/html'; charset='iso-8859-1'> 
<meta name='description' content='beschreibung'>
<meta name='keywords' content='keywords'>
<meta name='robots' content='all'>
<meta-http-equiv='expires' content='14'>
<meta name='author' content='Yves'>
</head>
<body>
<table width='100%' height='100%' class='swf'>
    <tr>
        <td>       
            <table width='953' height='730'>
                <tr>
                    <td>
                        <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0' width='953' height='730'>
                        <?php
                        
echo"
                            <param name=\'movie\' value=\'main.swf?selected='.$selected.'\'>  
                            <param name=\'quality\' value=\'high\'> 
                            <embed src=\'main.swf?selected='.$selected.'\' quality=\'high\' pluginspage=\'http://www.macromedia.com/go/getflashplayer\' type=\'application/x-shockwave-flash\' width=\'953\' height=\'730\'>
                            </embed>
                        "
;
                        
?>
                        </object>       
                    </td>
                </tr>    
            </table>
        </tr>
    </td>
</table>
</body>
</html>

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 25-03-2004, 13:19   #4 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
Zitat:
Geschrieben von 409coffeemaker
Zu dem Handler… was spricht denn dagegen?...
nuja...
Du erzeugst z.B. bei jedem Framedurchlauf ein neues LoadVars-Objekt.
Und du rufst bei jedem Framedurchlauf loader.load() neu auf.
Mich wundert ehrlich gesagt, dass der onLoad-Handler überhaupt aufgerufen wird.

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 25-03-2004, 13:33   #5 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Geschrieben von romän
nuja...
Du erzeugst z.B. bei jedem Framedurchlauf ein neues LoadVars-Objekt.
Und du rufst bei jedem Framedurchlauf loader.load() neu auf.
Mich wundert ehrlich gesagt, dass der onLoad-Handler überhaupt aufgerufen wird.

gruß,
roman
Framescripts werden bei mir generell nur einmal aufgerufen… also liegen nicht auf einer repetitiven Zeitleiste.

Wo macht deiner Meinung nach der onEnterFrame Handler Sinn, wo nicht?


Yves
  Mit Zitat antworten
Alt 25-03-2004, 13:53   #6 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
onEnterFrame macht nur Sinn, wenn Aktionen regelmäßig (also bei jedem Framedurchlauf) wiederholt werden sollen.
Zitat:
Geschrieben von 409coffeemaker
Framescripts werden bei mir generell nur einmal aufgerufen… also liegen nicht auf einer repetitiven Zeitleiste.
Was meinst du damit?
Der onEnterFrame-Handler wird auch ausgeführt wenn eine Zeitleiste gestoppt wurde oder nur aus einem Frame besteht.

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 25-03-2004, 14:03   #7 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Geschrieben von romän
onEnterFrame macht nur Sinn, wenn Aktionen regelmäßig (also bei jedem Framedurchlauf) wiederholt werden sollen.Was meinst du damit?
Der onEnterFrame-Handler wird auch ausgeführt wenn eine Zeitleiste gestoppt wurde oder nur aus einem Frame besteht.
Ich glaube da tut sich grad Halbwissen bei mir auf…


Angenommen ich habe einen Film aus 10 Frames.

In Frame 1 liegt das Script mit dem onEnterFrame Handler. Frame 1 wird nur einmal aufgerufen, danach werden nur Frame 2-10 jeweils wiederholt, da zb dort der Content liegt.

1.) Wird also das Script entsprechend der Framerate oft wiederholt, auch wenn der Film nicht mehr nach 1 zurückspringt?
Ich dachte immer der Handler führt die Aktion 1mal aus, wenn er den Frame entered und ruft diese erst dann wieder auf, wenn wieder zu dem Frame zurückgesprungen wird. Also quasi wenn der Film nur zwischen 2-10 läuft, das 1 gar nicht mehr aufgerufen ist.

Irre ich mich da?
Wenn ja kann das ja herbe auf die Performance hauen.

Also onEnterFrame macht bei 25fps sobald das Script das erste mal aufgerufen wurde konitnuierlich 25 mal die Sekunde die beinhalteten Aktion, egal ob man schon 10 Frames weiter ist oder der Film gar steht bzw aus einem Frame besteht oder per stop(); angehalten wird?


Yves
  Mit Zitat antworten
Alt 25-03-2004, 14:08   #8 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
kurze Antwort: JA.

kannst du ganz einfach testen:
ActionScript:
  1. this.onEnterFrame = function(){
  2. trace("onEnterFrame");
  3. };
  4. this.stop();
Wenn du den Handler nicht mehr brauchst kannst du ihn aber einfach über
ActionScript:
  1. delete this.onEnterFrame
  2. // oder
  3. this.onEnterFrame = null;
  4. // oder
  5. this.onEnterFrame = undefined;
löschen.
Allerdings find ich es keine gute Idee Script, das nur einmal ausgeführt werden soll, in einen onEnterFrame-Handler zu legen.

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 25-03-2004, 14:14   #9 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Geschrieben von romän

Allerdings find ich es keine gute Idee Script, das nur einmal ausgeführt werden soll, in einen onEnterFrame-Handler zu legen.
Handler schon entfernt Danke für den Hinweis. So schleicht man dann mit Halbwissen durch die Gegend


Hast du mal ein Beispiel, was mit dem Hanlder Sinn macht?
Vielleicht eine HitTest(); abfrage?

Mal direkt noch eine Frage nebenbei…

ich erzeuge ja über den Konstruktor ein loadVars Objekt. Ist es möglich/sinnvoll dieses nach Zweckerfüllung zu deleten?

Danke und liebe Grüße aus Dortmund

Yves
  Mit Zitat antworten
Alt 25-03-2004, 14:51   #10 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765

jo, hittest wäre ein möglicher Einsatzbereich. Aber z.B. auch Bewegungen oder Blenden die über AS gesteuert werden.

Das LoadVars-Objekt kannst du löschen um wieder etwas Speicher frei zu geben. Musst dir allerdings eine kleine Krücke bauen, denn delete this; funktioniert nicht:
ActionScript:
  1. var loader = new LoadVars();
  2. // Referenz zur Zeitleiste in loader definieren
  3. loader._tl= this;
  4. loader.onLoad = function(success){
  5. if(success){
  6. // ...
  7. delete this._tl["loader"];
  8. }
  9. };
gruß,
roman
romän 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 15:35 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele