Anzeige

[AS3] Mehrere Funktionen bei klicken eines Buttons

[AS3] - Mehrere Funktionen bei klicken eines Buttons | PSD-Tutorials.de

Erstellt von DaFunsel, 23.06.2011.

  1. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    Hallo zusammen.
    Da ich noch seeeeeehr viele Probleme mit AS3 habe bin ich dabei eine Homepage mit allem drum und dran zu basteln um ein wenig damit vertraut zu werden.

    Die Oberfläche ist soweit fertig und es läuft alles fast so wie ich mir das vorstelle. Meine Navigation besteht aus folgendem Script:
    PHP:
    1.  
    2. home.addEventListener(MouseEvent.CLICK,diahome);
    3.  
    4. function diahome(evt:MouseEvent)
    5. {
    6.     index1.gotoAndPlay("51");
    7.     iris.gotoAndPlay("101");
    8.  
    9.     var preloader:myLoader = new myLoader();
    10.     addChild(preloader);
    11.     preloader.x = stage.stageWidth / 2;
    12.     preloader.y = 340;
    13.  
    14.     var inhalt:Loader = new Loader();
    15.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    16.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    17.     inhalt.load(new URLRequest("diahome.swf"));
    18.  
    19.     function laden(e:ProgressEvent):void
    20.     {
    21.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    22.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    23.     }
    24.  
    25.     function fertig(e:Event):void
    26.     {
    27.         removeChild(preloader);
    28.         preloader.prozent = null;
    29.         mc.addChild(inhalt);
    30.         iris.gotoAndPlay("51");
    31.         removeEventListener(MouseEvent.CLICK,diahome);
    32.     }
    33.  
    34. }
    35.  
    36. ////////////////////////////////////////////////////////////////////////////
    37.  
    38. booth.addEventListener(MouseEvent.CLICK,diabooth);
    39.  
    40. function diabooth(evt:MouseEvent)
    41. {
    42.     index1.gotoAndPlay("51");
    43.     iris.gotoAndPlay("101");
    44.  
    45.     var preloader:myLoader = new myLoader();
    46.     addChild(preloader);
    47.     preloader.x = stage.stageWidth / 2;
    48.     preloader.y = 340;
    49.  
    50.     var inhalt:Loader = new Loader();
    51.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    52.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    53.     inhalt.load(new URLRequest("diabooth.swf"));
    54.  
    55.     function laden(e:ProgressEvent):void
    56.     {
    57.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    58.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    59.     }
    60.  
    61.     function fertig(e:Event):void
    62.     {
    63.         removeChild(preloader);
    64.         preloader.prozent = null;
    65.         mc.addChild(inhalt);
    66.         iris.gotoAndPlay("51");
    67.         beschreibung.text = "Wonderful time of work with great engineers, designers, artists and musicians at the Frankfurt music fair!";
    68.         removeEventListener(MouseEvent.CLICK,diabooth);
    69.     }
    70.  
    71. }
    72.  
    73. ////////////////////////////////////////////////////////////////////////////
    74.  
    75. beau.addEventListener(MouseEvent.CLICK,diabeau);
    76.  
    77. function diabeau(evt:MouseEvent)
    78. {
    79.     index1.gotoAndPlay("51");
    80.     iris.gotoAndPlay("101");
    81.  
    82.     var preloader:myLoader = new myLoader();
    83.     addChild(preloader);
    84.     preloader.x = stage.stageWidth / 2;
    85.     preloader.y = 340;
    86.  
    87.     var inhalt:Loader = new Loader();
    88.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    89.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    90.     inhalt.load(new URLRequest("diabeau.swf"));
    91.  
    92.     function laden(e:ProgressEvent):void
    93.     {
    94.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    95.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    96.     }
    97.  
    98.     function fertig(e:Event):void
    99.     {
    100.         removeChild(preloader);
    101.         preloader.prozent = null;
    102.         mc.addChild(inhalt);
    103.         iris.gotoAndPlay("51");
    104.         beschreibung.text = "My beloved daughter Lotte, My son Nils and my son Manu!";
    105.         removeEventListener(MouseEvent.CLICK,diabeau);
    106.     }
    107.  
    108. }
    109.  
    110. ////////////////////////////////////////////////////////////////////////////
    111.  
    112. timemachine.addEventListener(MouseEvent.CLICK,diatimemachine);
    113.  
    114. function diatimemachine(evt:MouseEvent)
    115. {
    116.     index1.gotoAndPlay("51");
    117.     iris.gotoAndPlay("101");
    118.  
    119.     var preloader:myLoader = new myLoader();
    120.     addChild(preloader);
    121.     preloader.x = stage.stageWidth / 2;
    122.     preloader.y = 340;
    123.  
    124.     var inhalt:Loader = new Loader();
    125.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    126.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    127.     inhalt.load(new URLRequest("diatimemachine.swf"));
    128.  
    129.     function laden(e:ProgressEvent):void
    130.     {
    131.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    132.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    133.     }
    134.  
    135.     function fertig(e:Event):void
    136.     {
    137.         removeChild(preloader);
    138.         preloader.prozent = null;
    139.         mc.addChild(inhalt);
    140.         iris.gotoAndPlay("51");
    141.         beschreibung.text = "Musicians, here are my old companions!";
    142.         removeEventListener(MouseEvent.CLICK,diatimemachine);
    143.     }
    144.  
    145. }
    146.  
    147. ////////////////////////////////////////////////////////////////////////////
    148.  
    149. newartist.addEventListener(MouseEvent.CLICK,dianewartist);
    150.  
    151. function dianewartist(evt:MouseEvent)
    152. {
    153.     index2.gotoAndPlay("51");
    154.     iris.gotoAndPlay("101");
    155.  
    156.     var preloader:myLoader = new myLoader();
    157.     addChild(preloader);
    158.     preloader.x = stage.stageWidth / 2;
    159.     preloader.y = 340;
    160.  
    161.     var inhalt:Loader = new Loader();
    162.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    163.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    164.     inhalt.load(new URLRequest("dianewartist.swf"));
    165.  
    166.     function laden(e:ProgressEvent):void
    167.     {
    168.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    169.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    170.     }
    171.  
    172.     function fertig(e:Event):void
    173.     {
    174.         removeChild(preloader);
    175.         preloader.prozent = null;
    176.         mc.addChild(inhalt);
    177.         iris.gotoAndPlay("51");
    178.         beschreibung.text = "Here I am introduceing a great new artist. Mister Marc Seefried and his fantastic work.contact: seefried@gmx.de";
    179.         removeEventListener(MouseEvent.CLICK,dianewartist);
    180.     }
    181.  
    182. }
    183.  
    184. ////////////////////////////////////////////////////////////////////////////
    185.  
    186. guestbook.addEventListener(MouseEvent.CLICK,getguestbook);
    187.  
    188. function getguestbook(evt:MouseEvent)
    189. {
    190.     index2.gotoAndPlay("51");
    191.     iris.gotoAndPlay("101");
    192.     screen.gotoAndPlay("2");
    193.  
    194.     var preloader:myLoader = new myLoader();
    195.     addChild(preloader);
    196.     preloader.x = stage.stageWidth / 2;
    197.     preloader.y = 340;
    198.  
    199.     var inhalt:Loader = new Loader();
    200.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    201.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    202.     inhalt.load(new URLRequest("guestbook.swf"));
    203.  
    204.     function laden(e:ProgressEvent):void
    205.     {
    206.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    207.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    208.     }
    209.  
    210.     function fertig(e:Event):void
    211.     {
    212.         removeChild(preloader);
    213.         preloader.prozent = null;
    214.         mcguestbook.addChild(inhalt);
    215.         iris.gotoAndPlay("51");
    216.         removeEventListener(MouseEvent.CLICK,getguestbook);
    217.     }
    218.  
    219. }
    220.  
    221. ////////////////////////////////////////////////////////////////////////////
    222.  
    223. imprint.addEventListener(MouseEvent.CLICK,getimprint);
    224.  
    225. function getimprint(evt:MouseEvent)
    226. {
    227.     index2.gotoAndPlay("51");
    228.     iris.gotoAndPlay("101");
    229.  
    230.     var preloader:myLoader = new myLoader();
    231.     addChild(preloader);
    232.     preloader.x = stage.stageWidth / 2;
    233.     preloader.y = 340;
    234.  
    235.     var inhalt:Loader = new Loader();
    236.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    237.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    238.     inhalt.load(new URLRequest("imprint.swf"));
    239.  
    240.     function laden(e:ProgressEvent):void
    241.     {
    242.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    243.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    244.     }
    245.  
    246.     function fertig(e:Event):void
    247.     {
    248.         removeChild(preloader);
    249.         preloader.prozent = null;
    250.         mc.addChild(inhalt);
    251.         iris.gotoAndPlay("51");
    252.         removeEventListener(MouseEvent.CLICK,getimprint);
    253.     }
    254.  
    255. }
    256.  
    257. ////////////////////////////////////////////////////////////////////////////
    258.  
    259. policy.addEventListener(MouseEvent.CLICK,getpolicy);
    260.  
    261. function getpolicy(evt:MouseEvent)
    262. {
    263.     index2.gotoAndPlay("51");
    264.     iris.gotoAndPlay("101");
    265.  
    266.     var preloader:myLoader = new myLoader();
    267.     addChild(preloader);
    268.     preloader.x = stage.stageWidth / 2;
    269.     preloader.y = 340;
    270.  
    271.     var inhalt:Loader = new Loader();
    272.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    273.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    274.     inhalt.load(new URLRequest("policy.swf"));
    275.  
    276.     function laden(e:ProgressEvent):void
    277.     {
    278.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    279.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    280.     }
    281.  
    282.     function fertig(e:Event):void
    283.     {
    284.         removeChild(preloader);
    285.         preloader.prozent = null;
    286.         mc.addChild(inhalt);
    287.         iris.gotoAndPlay("51");
    288.         removeEventListener(MouseEvent.CLICK,getpolicy);
    289.     }
    290.  
    291. }
    292.  
    Ich weiß nicht ob man dieses noch vereinfachen könnte, sodass ich nicht für jeden Button eine Funktion schreiben muss. Ich würde auch gerne die Funktion von einem Button löschen das die Funktion nur einmal ausgeführt wird wenn man auf den Button klickt und erst wieder ausgeführt wird wenn man zuvor auf einen anderen Button geklickt hat. Mir ist auch aufgefallen das die externen .swf´s nicht gelöscht werden wenn ich eine andere lade. Diese werden nur übereinander gelegt. Um das Ganze zu erweitern würde ich auch gerne wissen wie man den Cache löschen kann damit jede .swf neu geladen wird. Ist das alles in irgendeiner Form möglich?

    Über eine Antwort würde ich mich sehr freuen.

    -->LG<--
     
    #1      
  2. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi,

    eine UNGETESTE Möglichkeit (deswegen sicher Dein Script vorher)

    Code (Text):
    1. var preloader:myLoader;
    2. var btnId:String;
    3. var currentVisibleObject:Loader=null;//Speichert die geladene SWF-Datei bzw. den Loader davon
    4.  
    5. booth_mc.name="diabooth";//Name der Swf-Datei (ohne .swf)
    6. booth_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    7. home_mc.name="diahome";
    8. home_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    9. beau_mc.name="diabeau";
    10. beau_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    11. timemachine_mc.name="diatimemachine";
    12. timemachine_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    13. newartist_mc.name="dianewartist";
    14. newartist_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    15. guestbook_mc.name="guestbook";
    16. guestbook_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    17. imprint_mc.name="imprint";
    18. imprint_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    19. policy_mc.name="policy";
    20. policy_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    21.  
    22. function clickHandler(e:MouseEvent):void{
    23.     if(currentVisibleObject){
    24.         currentVisibleObject.unload();//Unload swf
    25.         mc.removeChild(currentVisibleObject);//remove from Display list
    26.     }
    27.     index1.gotoAndPlay("51");
    28.     iris.gotoAndPlay("101");
    29.     preloader= new myLoader();
    30.     addChild(preloader);
    31.     preloader.x = stage.stageWidth / 2;
    32.     preloader.y = 340;
    33.     btnId=e.target.name;
    34.     var inhalt:Loader = new Loader();
    35.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    36.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    37.     inhalt.load(new URLRequest(e.target.name+".swf"));//e.target ist dein MC / Btn, den Namen hast Du oben gesetzt.
    38. }
    39.  
    40. function laden(e:ProgressEvent):void{
    41.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    42.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    43. }
    44.  
    45. function fertig(e:Event):void{
    46.         removeChild(preloader);
    47.         preloader.prozent = null;
    48.         mc.addChild(e.target);
    49.         iris.gotoAndPlay("51");
    50.     switch(btnId){
    51.             case "diabooth": beschreibung.text = "Wonderful time of work with great engineers, designers, artists and musicians at the Frankfurt music fair!"; break;
    52.         case "diabeau": beschreibung.text = "My beloved daughter Lotte, My son Nils and my son Manu!"; break;
    53.         //Die anderen Fehlen noch, dazu hatte ich keine Lust ;)
    54.     }
    55.         removeEventListener(MouseEvent.CLICK, clickHandler);
    56. }
    MFG ad86
     
    #2      
  3. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hallo.

    Erstmal vielen Dank für deine Hilfe, das ist echt mehr als ich erwartet habe. Das ist ein verdammt guter Ansatz. Habe mich die letzten Stunden mit deinem Script beschäftigt und versucht zu verstehen wie du das gemacht hast. Ich habe das Script angewendet. Beim Test spuckte er viele Fehlermeldungen aus. Dann habe ich das "_mc" nach den Buttonnamen gelöscht und jetzt macht er nur noch eine Meldung:

    HTML:
    1. Szene 1, Ebene 'AS_BTN', Bild 39, Zeile 48    1067: Implizite Umwandlung eines Werts des Typs String in einen nicht verwandten Typ flash.display:DisplayObject.
    Das ist die Stelle mit
    PHP:
    1. mc.addChild(e.target);
    Verstehe aber nicht warum, ist doch total richtig was da steht.
    Nochmals vielen Dank für die schnelle und mehr als aufwendige Hilfe :)

    Edit:
    Ich habe das Problem durch "mc.addChild(e.target.name);" ersetzt, die Meldung ist weg aber ich bekomme eine neue:

    HTML:
    1. Error: Error #2078: Die Namenseigenschaft eines in die Zeitleiste eingefügten Objekts kann nicht geändert werden.
    2.     at flash.display::DisplayObject/set name()
    3.     at home_fla::MainTimeline/frame39()
    Mir ist auch aufgefallen das er die Animation "index1.gotoAndPlay("51");"
    beim Klicken nicht ausführt. Ich müsste für die Buttons "home, booth, beau, timemachine" die Animation "index1" abspielen und für die restlichen Button "index2". Den Button "guestbook" müsste ich auch mit einer URL verlinken. Ich habe leider das Problem, dass das Gästebuch zu klein ist, wenn ich es in die Kugel lade, jetzt habe ich eine neue Seite dafür angelegt.

    -->LG<--
     
    Zuletzt von einem Moderator bearbeitet: 24.06.2011
    #3      
  4. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    HI,

    Warum er das mit dem "mc.addChild(e.target)" nicht macht, weiß ich aktuell nicht, aber ich hatte sowieso etwas vergessen, das ist rot markiert. Zusätze zu Deinem weiteren "Problem" in grün.

    Code (Text):
    1. var preloader:myLoader;
    2.  
    3. var btnId:String;
    4. var currentVisibleObject:Loader=null;//Speichert die geladene SWF-Datei bzw. den Loader davon
    5.  
    6. booth_mc.name="diabooth";//Name der Swf-Datei (ohne .swf)
    7. booth_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    8. home_mc.name="diahome";
    9. home_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    10. beau_mc.name="diabeau";
    11. beau_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    12. timemachine_mc.name="diatimemachine";
    13. timemachine_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    14. newartist_mc.name="dianewartist";
    15. newartist_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    16. guestbook_mc.name="guestbook";
    17. guestbook_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    18. imprint_mc.name="imprint";
    19. imprint_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    20. policy_mc.name="policy";
    21. policy_mc.addEventListener(MouseEvent.CLICK, clickHandler);
    22.  
    23. function clickHandler(e:MouseEvent):void{
    24.     if(currentVisibleObject){
    25.         currentVisibleObject.unload();//Unload swf
    26.         mc.removeChild(currentVisibleObject);//remove from Display list
    27.     }
    28.     [COLOR="SeaGreen"]switch(e.target.name){
    29.         case "diahome":
    30.         case "diabooth":
    31.         case "diabeau":
    32.         case "diatimemachine":index1.gotoAndPlay("51"); break;//don't forget break
    33.         default: index2.gotoAndPlay("51");//Notwendig in ""?? Wenn FrameNummer reicht die Zahl, sonst sucht er nach einem Frame der 101 genannt ist
    34.     }
    35.     if (e.target.name=="guestbook"){
    36.         screen.gotoAndPlay("2")
    37.     }
    38. [/COLOR]
    39.     iris.gotoAndPlay("101");
    40.     preloader= new myLoader();
    41.     addChild(preloader);
    42.     preloader.x = stage.stageWidth / 2;
    43.     preloader.y = 340;
    44.     btnId=e.target.name;
    45.     var inhalt:Loader = new Loader();
    46.         [COLOR="Red"]currentVisibleObject=inhalt;[/COLOR]
    47.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    48.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    49.     inhalt.load(new URLRequest(e.target.name+".swf"));//e.target ist dein MC / Btn, den Namen hast Du oben gesetzt.
    50. }
    51.  
    52. function laden(e:ProgressEvent):void{
    53.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    54.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    55. }
    56.  
    57. function fertig(e:Event):void{
    58.         removeChild(preloader);
    59.         preloader.prozent = null;
    60.         [COLOR="red"]mc.addChild(currentVisibleObject);[/COLOR]
    61.         iris.gotoAndPlay("51");
    62.     switch(btnId){
    63.             case "diabooth": beschreibung.text = "Wonderful time of work with great engineers, designers, artists and musicians at the Frankfurt music fair!"; break;
    64.         case "diabeau": beschreibung.text = "My beloved daughter Lotte, My son Nils and my son Manu!"; break;
    65.         //Die anderen Fehlen noch, dazu hatte ich keine Lust ;)
    66.     }
    67.         removeEventListener(MouseEvent.CLICK, clickHandler);
    68. }
    ZU Deinem Gästebuch, das hab ich noch nicht so verstanden, was Du jetzt machen möchtest. Soll das GB dann in einem neuen Fenster geöffnet werden? Dann müsstest Du eine eigene clickFunktion für das Gästebuch schreiben und darin
    Code (Text):
    1. navigateToURL(new URLRequest("Dies ist der Link zu meiner GB-Seite"));
    nutzen


    EDIT: jetzt gerade gesehen, mit dem Gästebuch: Du meinst diese Zeile "screen.gotoAndPlay("2") ;". Habe ich jetzt mit eingearbeitet.
    MFG ad86
     
    Zuletzt von einem Moderator bearbeitet: 24.06.2011
    #4      
  5. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi super,
    Danke für die Antwort werde Das Sonntag ausprobieren.Bin zur Zeit nicht zu Hause.Gebe sofort Statusbericht ab wenn ich zu Hause bin.

    MfG
     
    #5      
  6. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi.
    Also ich habe es jetzt ein paar Stunden versucht das Ding zum laufen zu bringen. Das Script habe ich soweit angepasst. Das mit der URL für das Gästebuch ist mein Plan. Wenn ich das Script nutze wie es unten steht, dann sagt er:

    PHP:
    1. Error: Error #2078: Die Namenseigenschaft eines in die Zeitleiste eingefügten Objekts kann nicht geändert werden.
    2.    at flash.display::DisplayObject/set name()
    3.     at home_fla::MainTimeline/frame39()
    Ich verstehe nicht warum, es wird kein Name geändert... Ich weiß auch nicht ob es jetzt daran liegt das nichts passiert, denke aber mal schon das er wegen dem Fehler auf nichts reagiert. Es wird nichts geladen, keine Animation abgespielt etc. Lediglich der Sound der Buttons ist zu hören.

    PHP:
    1.  
    2. var preloader:myLoader;
    3.  
    4. var btnId:String;
    5. var currentVisibleObject:Loader=null;//Speichert die geladene SWF-Datei bzw. den Loader davon
    6.  
    7. booth.name="diabooth";//Name der Swf-Datei (ohne .swf)
    8. booth.addEventListener(MouseEvent.CLICK, clickHandler);
    9. home.name="diahome";
    10. home.addEventListener(MouseEvent.CLICK, clickHandler);
    11. beau.name="diabeau";
    12. beau.addEventListener(MouseEvent.CLICK, clickHandler);
    13. timemachine.name="diatimemachine";
    14. timemachine.addEventListener(MouseEvent.CLICK, clickHandler);
    15. newartist.name="dianewartist";
    16. newartist.addEventListener(MouseEvent.CLICK, clickHandler);
    17. guestbook.name="guestbook";
    18. guestbook.addEventListener(MouseEvent.CLICK, clickHandler);
    19. imprint.name="imprint";
    20. imprint.addEventListener(MouseEvent.CLICK, clickHandler);
    21. policy.name="policy";
    22. policy.addEventListener(MouseEvent.CLICK, clickHandler);
    23.  
    24. function clickHandler(e:MouseEvent):void{
    25.     if(currentVisibleObject){
    26.         currentVisibleObject.unload();//Unload swf
    27.         mc.removeChild(currentVisibleObject);//remove from Display list
    28.     }
    29.     switch(e.target.name){
    30.         case "diahome":
    31.         case "diabooth":
    32.         case "diabeau":
    33.         case "diatimemachine":index1.gotoAndPlay("51"); break;//don't forget break
    34.         default: index2.gotoAndPlay("51");//Notwendig in ""?? Wenn FrameNummer reicht die Zahl, sonst sucht er nach einem Frame der 101 genannt ist
    35.     }
    36.     if (e.target.name=="guestbook"){
    37.         navigateToURL(new URLRequest(""));    }
    38.    
    39.     iris.gotoAndPlay("101");
    40.     preloader= new myLoader();
    41.     addChild(preloader);
    42.     preloader.x = stage.stageWidth / 2;
    43.     preloader.y = 340;
    44.     btnId=e.target.name;
    45.     var inhalt:Loader = new Loader();
    46.         currentVisibleObject=inhalt;
    47.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    48.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    49.     inhalt.load(new URLRequest(e.target.name+".swf"));//e.target ist dein MC / Btn, den Namen hast Du oben gesetzt.
    50. }
    51.  
    52. function laden(e:ProgressEvent):void{
    53.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    54.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    55. }
    56.  
    57. function fertig(e:Event):void{
    58.         removeChild(preloader);
    59.         preloader.prozent = null;
    60.         mc.addChild(currentVisibleObject);
    61.         iris.gotoAndPlay("51");
    62.     switch(btnId){
    63.         case "diabooth": beschreibung.text = "Wonderful time of work with great engineers, designers, artists and musicians at the Frankfurt music fair!"; break;
    64.         case "diabeau": beschreibung.text = "My beloved daughter Lotte, My son Nils and my son Manu!"; break;
    65.         case "diatimemachine": beschreibung.text = "Musicians, here are my old companions!"; break;
    66.         case "dianewartist": beschreibung.text = "Here I am introduceing a great new artist. Mister Marc Seefried and his fantastic work.contact: seefried@gmx.de"; break;
    67.     }
    68.         removeEventListener(MouseEvent.CLICK, clickHandler);
    69. }
    -->LG<--

    EDIT:
    Habe in dem Script noch keine Klickfunktion für das Gästebuch reingeschrieben...
     
    Zuletzt von einem Moderator bearbeitet: 27.06.2011
    #6      
  7. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi,

    Am Anfang meines Script ändere ich die Namen deiner Btn. Da Sie aber schon auf der Bühne liegen meckert Flash herum. (Mein Fehler) Sprich: Die Namen die in dem Script stehen musst Du dem Btn/MC in Deiner Flash-Datei hinzufügen. ODER (ist einfacher) benenne Deine SWF-Dateien um:
    diabooth.swf -> booth.swf (wegen dem BTn/MC booth)
    diahome.swf -> home.swf (wegen dem BTn/MC home)
    diabeau.swf -> beau.swf
    diatimemachine.swf -> timemachine.swf
    dianewartist.swf -> newartist.swf

    Änderungen deswegen sind in rot (meist wird nur das "din" weggenommen).

    Code (Text):
    1.  
    2. var preloader:myLoader;
    3.  
    4. var btnId:String;
    5. var currentVisibleObject:Loader=null;//Speichert die geladene SWF-Datei bzw. den Loader davon
    6.  
    7.  
    8. [COLOR="Red"]booth.addEventListener(MouseEvent.CLICK, clickHandler);
    9. home.addEventListener(MouseEvent.CLICK, clickHandler);
    10. beau.addEventListener(MouseEvent.CLICK, clickHandler);
    11. timemachine.addEventListener(MouseEvent.CLICK, clickHandler);
    12. newartist.addEventListener(MouseEvent.CLICK, clickHandler);
    13. guestbook.addEventListener(MouseEvent.CLICK, clickHandler);
    14. imprint.addEventListener(MouseEvent.CLICK, clickHandler);
    15. policy.addEventListener(MouseEvent.CLICK, clickHandler);[/COLOR]
    16.  
    17. function clickHandler(e:MouseEvent):void{
    18.     if(currentVisibleObject){
    19.         currentVisibleObject.unload();//Unload swf
    20.         mc.removeChild(currentVisibleObject);//remove from Display list
    21.     }
    22.     switch(e.target.name){
    23.         [COLOR="red"]case "home":
    24.         case "booth":
    25.         case "beau":
    26.         case "timemachine"[/COLOR]:index1.gotoAndPlay("51"); break;//don't forget break
    27.         default: index2.gotoAndPlay("51");//Notwendig in ""?? Wenn FrameNummer reicht die Zahl, sonst sucht er nach einem Frame der 101 genannt ist
    28.     }
    29.     if (e.target.name=="guestbook"){
    30.         navigateToURL(new URLRequest(""));    }
    31.    
    32.     iris.gotoAndPlay("101");
    33.     preloader= new myLoader();
    34.     addChild(preloader);
    35.     preloader.x = stage.stageWidth / 2;
    36.     preloader.y = 340;
    37.     btnId=e.target.name;
    38.     var inhalt:Loader = new Loader();
    39.         currentVisibleObject=inhalt;
    40.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    41.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    42.     inhalt.load(new URLRequest(e.target.name+".swf"));//e.target ist dein MC / Btn, den Namen hast Du oben gesetzt.
    43. }
    44.  
    45. function laden(e:ProgressEvent):void{
    46.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    47.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    48. }
    49.  
    50. function fertig(e:Event):void{
    51.         removeChild(preloader);
    52.         preloader.prozent = null;
    53.         mc.addChild(currentVisibleObject);
    54.         iris.gotoAndPlay("51");
    55.     switch(btnId){
    56.         case [COLOR="red"]"booth"[/COLOR]: beschreibung.text = "Wonderful time of work with great engineers, designers, artists and musicians at the Frankfurt music fair!"; break;
    57.         case [COLOR="red"]"beau"[/COLOR]: beschreibung.text = "My beloved daughter Lotte, My son Nils and my son Manu!"; break;
    58.         case [COLOR="red"]"timemachine"[/COLOR]: beschreibung.text = "Musicians, here are my old companions!"; break;
    59.         case "[COLOR="red"]newartist"[/COLOR]: beschreibung.text = "Here I am introduceing a great new artist. Mister Marc Seefried and his fantastic work.contact: seefried@gmx.de"; break;
    60.     }
    61.         removeEventListener(MouseEvent.CLICK, clickHandler);
    62. }
     
    #7      
  8. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Ja 100%!

    Ich bin als auf der Suche nach Änderungen des Namens gewesen. Meine Buttons hießen ja so wie im Script... Das hat mich ein wenig verwirrt. Jetzt läuft alles. Habe auch die Klickfunktion mit dabei für das Gästebuch.

    Final:

    PHP:
    1. var preloader:myLoader;
    2.  
    3. var btnId:String;
    4. var currentVisibleObject:Loader=null;//Speichert die geladene SWF-Datei bzw. den Loader davon
    5.  
    6. guestbook.addEventListener(MouseEvent.CLICK,getguestbook);
    7. function getguestbook(evt:MouseEvent)
    8. {
    9.   var url:String = "";
    10.   var request:URLRequest = new URLRequest(url);
    11.   try {
    12.     navigateToURL(request, '_self');
    13.   } catch (e:Error) {
    14.     trace("Error occurred!");
    15.   }
    16.  }
    17.  
    18. booth.addEventListener(MouseEvent.CLICK, clickHandler);
    19. home.addEventListener(MouseEvent.CLICK, clickHandler);
    20. beau.addEventListener(MouseEvent.CLICK, clickHandler);
    21. timemachine.addEventListener(MouseEvent.CLICK, clickHandler);
    22. newartist.addEventListener(MouseEvent.CLICK, clickHandler);
    23. imprint.addEventListener(MouseEvent.CLICK, clickHandler);
    24. policy.addEventListener(MouseEvent.CLICK, clickHandler);
    25.  
    26. function clickHandler(e:MouseEvent):void{
    27.     if(currentVisibleObject){
    28.         currentVisibleObject.unload();//Unload swf
    29.         mc.removeChild(currentVisibleObject);//remove from Display list
    30.     }
    31.     switch(e.target.name){
    32.         case "home":
    33.         case "booth":
    34.         case "beau":
    35.         case "timemachine":index1.gotoAndPlay("51"); break;//don't forget break
    36.         default: index2.gotoAndPlay("51");//Notwendig in ""?? Wenn FrameNummer reicht die Zahl, sonst sucht er nach einem Frame der 101 genannt ist
    37.     }
    38.    
    39.     iris.gotoAndPlay("101");
    40.     preloader= new myLoader();
    41.     addChild(preloader);
    42.     preloader.x = stage.stageWidth / 2;
    43.     preloader.y = 340;
    44.     btnId=e.target.name;
    45.     var inhalt:Loader = new Loader();
    46.         currentVisibleObject=inhalt;
    47.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    48.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    49.     inhalt.load(new URLRequest(e.target.name+".swf"));//e.target ist dein MC / Btn, den Namen hast Du oben gesetzt.
    50. }
    51.  
    52. function laden(e:ProgressEvent):void{
    53.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    54.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    55. }
    56.  
    57. function fertig(e:Event):void{
    58.         removeChild(preloader);
    59.         preloader.prozent = null;
    60.         mc.addChild(currentVisibleObject);
    61.         iris.gotoAndPlay("51");
    62.     switch(btnId){
    63.         case "booth": beschreibung.text = "Wonderful time of work with great engineers, designers, artists and musicians at the Frankfurt music fair!"; break;
    64.         case "beau": beschreibung.text = "My beloved daughter Lotte, My son Nils and my son Manu!"; break;
    65.         case "timemachine": beschreibung.text = "Musicians, here are my old companions!"; break;
    66.         case "newartist": beschreibung.text = "Here I am introduceing a great new artist. Mister Marc Seefried and his fantastic work.contact: seefried@gmx.de"; break;
    67.     }
    68.         removeEventListener(MouseEvent.CLICK, clickHandler);
    69. }
    Ich steige auch so langsam dahinter und verstehe das Script Stück für Stück :D
    Auf jedenfall für deine Arbeit ein FETTES DANKESCHÖN *TOP HILFE*...
    Actionscript 3 würde ich auch gerne so gut beherrschen:motz:

    Wenn ich jetzt z.B. noch eine Erweiterung einbringen will, das von mir aus die home.swf schon am Anfang angezeigt wird, müsste ich doch mit einer Art "onEnterFrame" arbeiten oder? Klar das es bei AS3 wieder alles anders ist...
    Ich könnte ja dann
    PHP:
    1. addEventListener(Event.ENTER_FRAME,myFunction); function myFunction(event:Event) {     trace("Do Something"); }
    nehmen und als Funktion sagen, dass er die .swf laden soll.

    EDIT:
    Man könnte doch auch so spielereien machen, dass z.B. der Preloader erst einsetzt wenn die Iris geschlossen ist?! Ich weiss das ich das damals in AS2 gemacht habe. Ob die Funktionen sich geändert haben weiß ich noch nicht. Gucke mir gerade die Liste der Änderungen an...

    -->LG<--
     
    Zuletzt von einem Moderator bearbeitet: 27.06.2011
    #8      
  9. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi,

    Also ein Event.ENTER_FRame bedeutet das in jedem Frame der trace ausgegeben wird. Hast Du z.B. eine Framerate von 120, dann wird "Do Something" 120 mal in der Sekunde ausgegeben, bis Du die Flash-Datei schließt.
    Wenn Du am Anfang die home.swf geladen haben willst, solte im ersten Frame folgendes stehen (die EventListener sollten schon vorhanden sein):
    Code (Text):
    1. home.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
    Damit wird vom home-Btn/MC ein MouseEvent ausgelöst und die Methode "clickHandler" wird aufgerufen und er macht all das, was er auch machen würde, wenn Du von einem Menüpunkt zum Home-Menüpunkt möchtest.

    Willst Du nur die Anzeige der home.swf, ohne die Animationen haben, müsste im ersten Frame stehen:
    Code (Text):
    1.  
    2. currentVisibleObject=new Loader();
    3. currentVisibleObject.load(new URLRequest("home.swf"));
    4. mc.addChild(currentVisibleObject);
    5.  
    MFG ad86
     
    #9      
  10. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Wie geil ist das denn? Ich bin jetzt von größeren änderungen vom Script ausgegangen. Das läuft ohne zu Zicken. Dein Vorschlag mit dem Script ist echt genial. Ich kann mit kurzen Befehlen all das abrufen was unten schon aufgeführt ist...Die Funktion das ein Mousklick "vorgetäuscht" wird kannte ich auch noch nicht. Wenn ich das richtig verstehe holt er sich die Funktion über den EventListener der unten aufgeführt ist?! Da hat man ja sehr viele neue Möglichkeiten.

    Dann müsste ich ja für mein Vorhaben mit der Iris auch nur ein paar Zeilen schreiben in der ich sage:
    Wenn die Iris bei Frame "x" angekommen ist werden die untenstehenden Funktionen ausgeführt. Somit setzt der Loader erst ein Wenn die Iris geschlossen ist. Wenig Aufwand und sieht besser aus:D

    Vielen Dank

    -->LG<--
     
    #10      
  11. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi,
    Naja, wenn Du eigene Event schreibst, ist die dispatchEvent-Funktion schon wichtig, sonst wirst Du nie eigene Events umherschicken können. (das brauchte ich vor allem in meine BA-Arbeit) Und ja er holt sich die Funktion über den EventListener. Wichtig ist nur, dass der EventListener vorher deklariert wurde, sonst wird nichts passieren. Schließlich kennt er oben ja den EventListener noch nicht.

    Erstens, ich weiß nicht, ob es nur ein paar Zeilen sind. Aber ich kenne ja auch nicht Dein komplettes Projekt (muss ich ja auch nicht). In Flash gibt es viele Möglichkeiten. So kann man ja AS3-Code innerhalb von der fla-datei schreiben, man kann Sie aber auch in eine eigene Datei auslagern (was ich in den meisten Fällen mache).

    Und zweitens Bitte sehr.

    MFG ad86
     
    #11      
  12. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hallöchen.
    Da bin ich wieder. Ich habe mich mit der Aufgabe der Frames angenommen.
    Also wenn die Iris bei Frame x angekommen ist soll etwas geladen werden.
    Ich komme nicht weiter, weil ich den Fehler nicht finde.
    Das Problem ist, er versucht ständig eine iris.swf zu laden. Wenn ich auf Home klicke soll ja home.swf geladen werden und nicht iris.swf!
    Ich habe das Problem auch am Anfang des Films, er soll ja am Anfang die Iris schließen, wenn sie Frame 50 erreicht hat soll der Preloader einsetzen (das funktioniert alles), nur will er eine iris.swf laden. Hoffe mir kann jemand helfen.

    Hier das aktuelle Script.
    PHP:
    1. var preloader:myLoader;
    2. var btnId:String;
    3. var mcinhalt:Loader=null;
    4. ////////////////////////////////////////////////////////////////////////////////Event für die Iris
    5. aniiris.addEventListener(Event.ENTER_FRAME, geschlosseneIris);
    6. ////////////////////////////////////////////////////////////////////////////////Klick Event für die BTN´s
    7. booth.addEventListener(MouseEvent.CLICK, clickHandler);
    8. home.addEventListener(MouseEvent.CLICK, clickHandler);
    9. beau.addEventListener(MouseEvent.CLICK, clickHandler);
    10. timemachine.addEventListener(MouseEvent.CLICK, clickHandler);
    11. newartist.addEventListener(MouseEvent.CLICK, clickHandler);
    12. imprint.addEventListener(MouseEvent.CLICK, clickHandler);
    13. policy.addEventListener(MouseEvent.CLICK, clickHandler);
    14. //////////////////////////////////////////////////////////////////////////////// Was soll passieren wenn Klick auf BTN:
    15. function clickHandler(e:MouseEvent):void{
    16. aniiris.gotoAndPlay(1);
    17. btnId=e.target.name;
    18.    if(mc.contains(mcinhalt)) {
    19.          mc.removeChild(mcinhalt);
    20.          mcinhalt.unload();
    21.       }
    22.     switch(e.target.name){
    23.         case "home":
    24.         case "booth":
    25.         case "beau":
    26.         case "timemachine":
    27.         index1.gotoAndPlay(51); break;
    28.         default: index2.gotoAndPlay(51);
    29.     }
    30. }
    31. //////////////////////////////////////////////////////////////////////////////// Was soll passieren wenn Iris zu:
    32. function geschlosseneIris(e:Event):void {
    33.       if (aniiris.currentFrame == 50) {
    34.            aniiris.removeEventListener(Event.ENTER_FRAME, geschlosseneIris)
    35.     preloader = new myLoader();
    36.     addChild(preloader);
    37.     preloader.x = stage.stageWidth / 2;
    38.     preloader.y = 340;
    39.     var inhalt:Loader = new Loader();
    40.     mcinhalt=inhalt;
    41.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    42.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    43.     inhalt.load(new URLRequest(e.target.name+".swf"));
    44.     }
    45. }
    46. //////////////////////////////////////////////////////////////////////////////// Was soll passieren beim Laden:
    47. function laden(e:ProgressEvent):void{
    48.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    49.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    50. }
    51. //////////////////////////////////////////////////////////////////////////////// Was soll passieren wenn fertig geladen:
    52. function fertig(e:Event):void{
    53.         removeChild(preloader);
    54.         preloader.prozent = null;
    55.         mc.addChild(mcinhalt);
    56.         aniiris.gotoAndPlay("51");
    57.     switch(btnId){
    58.         case "booth": beschreibung.text = "1"; break;
    59.         case "beau": beschreibung.text = "2"; break;
    60.         case "timemachine": beschreibung.text = "3"; break;
    61.         case "newartist": beschreibung.text = "4"; break;
    62.     }
    63.         removeEventListener(MouseEvent.CLICK, clickHandler);
    64. }
    65.  
    Schonmal vielen Dank.

    -->LG<--
     
    #12      
  13. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi, Du hast (glaub ich) zwei Fehler drin.

    Erstens rufst Du die clickHandler auf, wenn eines der Btn (home, both, ...) geklickt wurde. In dieser Methode lädst Du aber keine swf-Datei.

    Die Stelle mit dem Laden der swf-Datei ist jetzt in Deiner geschlosseneIris-Methode. In dieser Methode ganz unten steht:

    Code (Text):
    1. inhalt.load(new URLRequest(e.target.name+".swf"));
    Da der aniiris-MovieClip, diese Methode aufruft wird hier die aniiris.swf-Datei versucht zu laden. Vielleicht sollte dort

    Code (Text):
    1. inhalt.load(new URLRequest("home.swf"));
    stehen?

    MFG ad86
     
    #13      
  14. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi... Danke für die Antwort.
    Also wenn ich
    PHP:
    1.     inhalt.load(new URLRequest("home.swf"));
    2.  
    schreibe läd er beim ersten mal die .swf. Wenn ich dann auf einen Button klicke passiert nichts, außer das er die Iris schließt. Klar, weil er nichts zum laden hat.
    Aber ich sage ihm doch unten mit:
    PHP:
    1. function geschlosseneIris(e:Event):void {
    2. .............
    das er die .swf laden soll die von dem Button ausgeht. Wenn ich den "home" BTN drücke soll er das .swf dran hängen und diese laden.
    Im clickHandler will ich ihm ja nur sagen das er die MC leeren soll und die entsprechende Animation abspielt. Über die Funktion der Iris möchte ich ja, dass er die entsprechende .swf läd wenn diese geschlossen ist.
    Ich finde keinen passenden Weg. Habe es schon mit einer Variablen für die Iris versucht. Aber auch ohne Erfolg. Die sah so ähnlich aus wie die Variable für den clickHandler mit e.target.

    -->LG<--
     
    #14      
  15. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi,

    na dann versuch mal folgendes:

    Ganz oben

    Code (Text):
    1. var btnId:String=[COLOR="red"]"home"[/COLOR];

    In der iris-Methode unten:

    Code (Text):
    1. inhalt.load(new URLRequest([COLOR="Red"]btnId[/COLOR]+".swf"));
    Die btnId, wird ja immer bei einem Klick auf DEine Btns verändert, am Anfang gibt es ja noch kein Klick, deswegen, bekommt btnId den Startwert "home".

    MFG ad86
     
    #15      
  16. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Das geht auch, ist aber im Prinzip das gleiche wie:
    PHP:
    1. inhalt.load(new URLRequest("home.swf"));
    So läd er zwar die home.swf am Anfang aber nicht die richtigen .swf´s bei Klick auf einen BTN. Er nimmt da quasi nicht die Änderung der btnId.
    Ich habe mal zum Probieren das "btnId=e.target.name;" in die Funktion "geschlosseneIris" geschrieben. Das frisst er aber nicht.

    -->LG<--
     
    #16      
  17. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Das kann er auch nicht. Du hast der aniiris den ENTER_FRAME-EventListener gegeben. Dementsprechend ist e.target.name "aniiris".

    Wird eigentlich Dein Enter_Frame-EventListener später nochmal erstellt? Du erstellst ihn am Anfang, löschst Ihn aber wenn Frame 50 erreicht ist. Du solltest in Deinem clickHandler, den ENTER_FRAME-EventListener kurz vor der Zeile aniiris.gotoAndPlay(1) und setzt das btnId=e.target.name VOR die Zeile aniiris.gotoAndPlay. Dann musste eigentlich alles funktionieren.


    EDIT: Noch eine Sache: Ganze unten steht:
    Code (Text):
    1. removeEventListener(MouseEvent.CLICK, clickHandler);
    Was willst Du damit erreichen?
    MFG ad86
     
    Zuletzt von einem Moderator bearbeitet: 19.07.2011
    #17      
  18. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Ich gehe später in keinen anderen Frame mehr. Der Film wird gestoppt.
    Wenn ich das so mache ist alles wie "vorher" er läd nur einmal am Anfang die home.swf.

    Mit:
    HTML:
    1. removeEventListener(MouseEvent.CLICK, clickHandler);
    möchte ich, das der Preloader nicht mehrfach hintereinander gelegt wird (bzw. das jeder BTN nur einmal gedrückt werden kann und erst wieder "frei" ist wenn vorerst eine andere .swf geladen wurde). Das war glaube ich noch vom alten Script, das habe ich jetzt mal gelöscht, weil es keine Funktion mehr hat, diese Funktion wollte ich gerne noch mit einbauen aber das bekomme ich eh nicht hin.
     
    #18      
  19. ad86

    ad86 Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Hi,

    hast Du schonmal versucht in dem clickhandler nach der Zuweisung btnId=e.target.name "trace("Click "+btnId);" auszugeben und in deinem ENTER_FRAME-Listener (in der if-Anweisung) "trace("Iris "+btnId);" ?

    ZU dem Problem, dass man den Preloader nicht mehrfach hintereinander gelegt wird:

    Du hast einen Boolean-Wert (z.B. isBtnClickable). Am Anfang und in dem clickHandler setzt Du ihn auf false, und in deiner fertig-Methode wieder auf true. IN der ersten Zeile deines clickHandlers schreibst Du.

    Code (Text):
    1. if (!isBtnClickable){
    2. return;
    3. }
    4. isBtnClickable=FALSE;
    Bezüglich der oben genannten traces: Du kannst die Ausgabe dann hier mal öffentlich machen. (Klicke am besten auch mal ein oder zwei Btn an) Vielleicht sehe ich dann das Problem.


    EDIT: Ich bin nochmal wegen dem ENTER_FRAME-Listener durchgegangen
    Code (Text):
    1. var preloader:myLoader;
    2. var btnId:String;
    3. var mcinhalt:Loader=null;
    4. ////////////////////////////////////////////////////////////////////////////////Event für die Iris
    5. [COLOR="Red"]aniiris.addEventListener(Event.ENTER_FRAME, geschlosseneIris);//Erstellst den EventListener[/COLOR]
    6. ////////////////////////////////////////////////////////////////////////////////Klick Event für die BTN´s
    7. booth.addEventListener(MouseEvent.CLICK, clickHandler);
    8. home.addEventListener(MouseEvent.CLICK, clickHandler);
    9. beau.addEventListener(MouseEvent.CLICK, clickHandler);
    10. timemachine.addEventListener(MouseEvent.CLICK, clickHandler);
    11. newartist.addEventListener(MouseEvent.CLICK, clickHandler);
    12. imprint.addEventListener(MouseEvent.CLICK, clickHandler);
    13. policy.addEventListener(MouseEvent.CLICK, clickHandler);
    14. //////////////////////////////////////////////////////////////////////////////// Was soll passieren wenn Klick auf BTN:
    15. function clickHandler(e:MouseEvent):void{
    16. aniiris.gotoAndPlay(1);
    17. btnId=e.target.name;
    18.    if(mc.contains(mcinhalt)) {
    19.          mc.removeChild(mcinhalt);
    20.          mcinhalt.unload();
    21.       }
    22.     switch(e.target.name){
    23.         case "home":
    24.         case "booth":
    25.         case "beau":
    26.         case "timemachine":
    27.         index1.gotoAndPlay(51); break;
    28.         default: index2.gotoAndPlay(51);
    29.     }
    30. }
    31. //////////////////////////////////////////////////////////////////////////////// Was soll passieren wenn Iris zu:
    32. function geschlosseneIris(e:Event):void {
    33.       if (aniiris.currentFrame == 50) {
    34.            [COLOR="red"]aniiris.removeEventListener(Event.ENTER_FRAME, geschlosseneIris);//1. Semikolon fehlte, 2. Hier loeschst Du den EventHandler, wenn Du Ihn nie wieder hinzufügst, wird diese Methode NIE mehr aufgerufen[/COLOR]
    35.     preloader = new myLoader();
    36.     addChild(preloader);
    37.     preloader.x = stage.stageWidth / 2;
    38.     preloader.y = 340;
    39.     var inhalt:Loader = new Loader();
    40.     mcinhalt=inhalt;
    41.     inhalt.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, laden);
    42.     inhalt.contentLoaderInfo.addEventListener(Event.COMPLETE, fertig);
    43.     inhalt.load(new URLRequest(e.target.name+".swf"));
    44.     }
    45. }
    46. //////////////////////////////////////////////////////////////////////////////// Was soll passieren beim Laden:
    47. function laden(e:ProgressEvent):void{
    48.         var przt:Number = e.bytesLoaded / e.bytesTotal;
    49.         preloader.prozent.text = Math.ceil(przt * 100) + "%".toString();
    50. }
    51. //////////////////////////////////////////////////////////////////////////////// Was soll passieren wenn fertig geladen:
    52. function fertig(e:Event):void{
    53.         removeChild(preloader);
    54.         preloader.prozent = null;
    55.         mc.addChild(mcinhalt);
    56.         aniiris.gotoAndPlay("51");
    57.     switch(btnId){
    58.         case "booth": beschreibung.text = "1"; break;
    59.         case "beau": beschreibung.text = "2"; break;
    60.         case "timemachine": beschreibung.text = "3"; break;
    61.         case "newartist": beschreibung.text = "4"; break;
    62.     }
    63. }
    64.  
    MFG ad86
     
    Zuletzt von einem Moderator bearbeitet: 19.07.2011
    #19      
  20. DaFunsel

    DaFunsel Guest

    Mehrere Funktionen bei klicken eines Buttons
    AW: Mehrere Funktionen bei klicken eines Buttons

    Das bekomme ich als Trace:
    Irishome
    Click home
    Click booth
    Click beau
    Click timemachine
    Click newartist
    Click imprint
    Click policy

    EDIT:
    Stimmt, ich weiß aber auch nicht warum ich das da stehen hatte xD
    Wenn ich das lösche läd er alles. Aber wenn ich den Download simuliere, wird der Preloader ganz oft hintereinander gelegt und Flash ist kurz vorm abstürzen..

    Danke für die Hilfestellung mit dem BTN aber damit muss ich mich noch auseinander setzen bevor ich das jetzt noch mit da reinschmiere.
    -->LG<--
     
    Zuletzt von einem Moderator bearbeitet: 19.07.2011
    #20      
Seobility SEO Tool
x
×
×