1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Datumsabfrage Adventskalender

Dieses Thema im Forum "Flash Plattform" wurde erstellt von Bina2200, 2. Dezember 2011.

  1. Bina2200

    Bina2200 Grünschnabel

    Hallo zusammen,

    ich setze gerade eine Art Adventskalender um und bekomme die Datumsabfrage leider nicht so hin, dass nur das jeweilige Türchen des aktuellen Tages geöffnet werden kann. Außerdem sollen die bereits geöffneten Türchen auch geöffnet bleiben.
    Ich sollte noch dazusagen, dass mein Kalender nur 12 Türchen hat =)

    Hier mein Ansatz:

    Code (Text):
    1.  
    2. var zeit:Date = new Date();
    3. var datum:Number = zeit.getDate();
    4. var month:Number = zeit.getMonth();
    5.  
    6. if (month == 12) {
    7.     switch (datum) {
    8.  
    9.         case 5 :
    10.             p0Click(null);         
    11.             break;
    12.         case 6 :
    13.             p1Click(null);
    14.             break;
    15.         case 7 :
    16.             p2Click(null);
    17.             break;
    18.         case 8 :
    19.             p3Click(null);
    20.             break;
    21.         case 9 :
    22.             p4Click(null);
    23.             break;
    24.         case 10 :
    25.             p5Click(null);
    26.             break;
    27.         case 11 :
    28.             p6Click(null);
    29.             break;
    30.         case 12 :
    31.             p7Click(null);
    32.             break;
    33.         case 13 :
    34.             p8Click(null);
    35.             break;
    36.         case 14 :
    37.             p9Click(null);
    38.             break;
    39.         case 15 :
    40.             p10Click(null);
    41.             break;
    42.         case 16 :
    43.             p11Click(null);
    44.             break;
    45.         default :
    46.             trace("");
    47.             break;
    48.     }
    49. }
    50.  
    Wäre super, wenn mir jemand weiterhelfen könnte..

    Vielen Dank schon mal!
    Zuletzt bearbeitet: 2. Dezember 2011
  2. Zinken

    Zinken Erfahrenes Mitglied

    Ich würde hier statt 'switch/case' eher eine for-Schleife verwenden, also etwas in dieser Art:
    Code (Text):
    1.  
    2. for (i = 1; i < datum; i++) {
    3.      öffne(i); // öffne = Funktion zum Öffnen eines Türchens
    4. }
    5. aktiviere(datum); // aktiviere = Funktion zum Aktivieren eines Türchens
    6.  
    Falls Du jeweils bloß z.B. jeweils einen MovieClip abspielen willst, kannst Du diese auch vorher in ein Array verpacken, das Du dann in der Schleife durchläufst. Statt 'öffne(i)' hättest Du dann halt beispielsweise 'array.play()'.
  3. Bina2200

    Bina2200 Grünschnabel

    Vielen lieben Dank! Funktioniert wunderbar!

    Ich weiß nur nicht wirklich, wie ich die Funktion für die Aktivierung der bereits geöffneten Türchen angehen soll. Könnte mir da jemand auf die Sprünge helfen? =)

    Danke!
  4. BrainLight

    BrainLight Grünschnabel

    Da JavaScript client-abhängig ist, ist dies gar nicht so einfach.

    Die einzige Möglichkeit dies zu realsieren, sehe ich in dem Setzen von Cookies, die über das Datums-Intervall des Weihnachtskalenders existieren (dürfen).

    LG
    BL
  5. Bina2200

    Bina2200 Grünschnabel

    Danke für den Hinweis.. Ich will das Flash aber lediglich lokal ausführen =)
    Zuletzt bearbeitet: 2. Dezember 2011
  6. BrainLight

    BrainLight Grünschnabel

    Huch :)

    Das sah auf Anhieb etwas nach JavaScript aus :) Sorry
    Bin quasi grad in der falschen Kategorie unterwegs ...

    Egal...
    Ich weiß jetzt wirklich nicht, ob Flash (in welcher Generetaion auch immer) lokale Schreibrechte hat.

    Falls dies so sein sollte, dann schreib doch einfach die aktuelle anzahl der geöffneten Türchen in eine lokale txt-file.
    Damit könntest Du dann gut und gerne hantieren, wie Du möchtest.

    LG
    BL
  7. Zinken

    Zinken Erfahrenes Mitglied

    Verstehe ich Dich richtig, dass Du in einer Datei speichern willst, welche Türchen bereits angeklickt wurden? Das geht leider nur über Umwege, da Daten aus Flash heraus nicht einfach so gespeichert werden können. Soll die Flash-Anwendung denn im Browser oder im Standalone-Player (bzw. Export als .exe) laufen?

    Bei einer lokalen Anwendung außerhalb des Browsers kannst Du z.B. per XML-Socket eine Verbindung zu einem zusätzlichen Programm (geschrieben in Python, Java oder sonstwas) aufbauen und dieses dann die übergebenen Daten speichern lassen. Ist relativ umständlich, aber eine einfachere Lösung kenne ich auch nicht.

    Edit: Zu langsam... Aber nein, Flash hat keine lokalen Schreibrechte.
  8. Bina2200

    Bina2200 Grünschnabel

    Danke für eure Antworten!

    Ich bin leider noch nicht besonders fit in Actionscript. Ich weiß.. Das macht die Sache natürlich nicht leichter ;)


    Ich bin grad wieder so weit, dass nichts mehr funktioniert... Weder Datumsabfrage, noch sonst irgendwas :(

    Generell hätte ich das mit den geöffneten Türchen gerne mit einer Abfrage gelöst. Banal gesagt: Wenn der 4.12., zeige Türchen 1,2,3,4.

    Die Anwendung soll im Standalone-Player laufen.

    Dürfte ich euch nochmal meinen Code bzgl. Datumsabfrage zeigen? Bin grad ein wenig am verzweifeln...


    Code (Text):
    1.  
    2. var zeit:Date = new Date();
    3. var datum:Number = zeit.getDate();
    4. var month:Number = zeit.getMonth();
    5. trace(datum);
    6. trace(i);
    7. var i;
    8. var k;
    9.  
    10. init();
    11.  
    12. //init
    13. function init():void{
    14.     for(var k:uint = 0; k < 12; k++){
    15.         MovieClip(getChildByName("p"+k)).alpha = 1;
    16.         MovieClip(getChildByName("p"+k)).buttonMode = true;
    17.         MovieClip(getChildByName("p"+k)).addEventListener(MouseEvent.CLICK, pClick);
    18.     }
    19. }
    20.  
    21.  
    22. for (i = 1; i < datum; i++) {
    23.    
    24.    
    25.     function pClick(e:MouseEvent,i):void{
    26.    
    27.     switch (e.target.name){
    28.         case "p0":
    29.             Tweener.addTween(p0, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    30.             break;
    31.         case "p1":
    32.             Tweener.addTween(p1, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    33.             break;
    34.         case "p2":
    35.             Tweener.addTween(p2, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    36.             break;
    37.         case "p3":
    38.             Tweener.addTween(p3, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    39.             break;
    40.         case "p4":
    41.             Tweener.addTween(p4, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    42.             break;
    43.         case "p5":
    44.             Tweener.addTween(p5, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    45.             break;
    46.         case "p6":
    47.             Tweener.addTween(p6, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    48.             break;
    49.         case "p7":
    50.             Tweener.addTween(p7, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    51.             break;
    52.         case "p8":
    53.             Tweener.addTween(p8, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    54.             break; 
    55.            
    56.         case "p9":
    57.             Tweener.addTween(p9, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    58.             break; 
    59.            
    60.         case "p10":
    61.             Tweener.addTween(p10, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    62.             break; 
    63.        
    64.         case "p11":
    65.             Tweener.addTween(p11, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    66.             break; 
    67.            
    68.         default:
    69.             trace("Hat wohl nich geklappt");
    70.    
    71.     }
    72. }
    73.  
    74. }
    75.  
    76.  
    Ich bedanke mich schon mal herzlich!!
  9. Bina2200

    Bina2200 Grünschnabel

    Achja... Und das ist die Fehlermeldung, die ich bekomme: MainTimeline/pClick(). 2 erwartet, 1 erhalten
  10. Bina2200

    Bina2200 Grünschnabel

    Ok.. Das mit den geöffneten Türen -je nach Datum- habe ich jetzt mittels If-Bedingungen hinbekommen. Ich hab die Lösung ja im Endeffekt schon selbst hingeschrieben =)

    Jetzt fehlt mir nur noch die Datumsabfrage.. Hat jemand eine Idee wie es funktionieren könnte, bzw. wo der Fehler liegt?

    Dankeschön!
  11. Zinken

    Zinken Erfahrenes Mitglied

    Ahem, sorry, aber eine Funktion innerhalb einer Schleife zu definieren, ergibt keinen Sinn. Der Aufruf der Funktion sollte dort erfolgen, um Dir das komplette switch/case-Konstrukt zu ersparen. Du führst immer die gleiche Aktion auf unterschiedlichen Objekten aus - perfekt für eine for-Schleife...
    Und nur am Rande: um von 0 bis 12 zu zählen, brauchst du kein 'unsigned integer'. 'int' tut es hier völlig.
    Ohne jetzt den Rest Deiner Programmierung zu kennen, hier mal der Ansatz:
    Code (Text):
    1.  
    2. var zeit:Date = new Date();
    3. var datum:Number = zeit.getDate();
    4. var month:Number = zeit.getMonth();
    5. var tueren:Array = new Array(); // Deine Türchen
    6.  
    7. init();
    8.  
    9. function init():void{
    10.    
    11.     // Alle Türchen in ein Array packen, um leichter darauf zugreifen zu können
    12.     for (var k:int = 0; k < 12; k++){
    13.         var obj:MovieClip = MovieClip(getChildByName("p"+k));
    14.         obj.alpha = 1;        
    15.         tueren.push(obj);
    16.     }
    17. }
    18.  
    19. // Schleife durchläuft alle Türchen bis 'gestern' und öffnet sie
    20. for (var i:int =0; i < datum; i++) {
    21.     oeffne(tueren[i]);     // siehe weiter unten
    22. }
    23.  
    24. // Türchen 'heute' wird anklickbar gemacht
    25. var heute:MovieClip = tueren[datum];
    26. heute.buttonMode = true;
    27. heute.addEventListener(MouseEvent.CLICK, clickmich);
    28.  
    29.  
    30. // Funktion, die beim Anklicken aufgerufen wird
    31. function clickmich(e:MouseEvent):void {
    32.     oeffne(e.target);
    33. }
    34.  
    35. // Funktion zum Öffnen eines Türchens
    36. function oeffne(obj:MovieClip):void {
    37.     // Sofern das die Aktion zum Öffnen ist:
    38.     Tweener.addTween(obj, {alpha:0, time:0.5,  transition:"easeOutCirc"});
    39. }
    40.  
    41.  
    Etwas verschachtelt, aber ich denke, so sollte die Funktionsweise klar werden...
    Die Monatsabfrage musst Du natürlich noch irgendwo einbauen.

Diese Seite empfehlen