Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-11-2006, 10:35   #1 (permalink)
Trennschleifer
 
Benutzerbild von bobo_k1
 
Registriert seit: Apr 2004
Ort: Hamburg
Beiträge: 1.282
STUFF Advents-Kalender-Klasse

Moin moin,
gerade noch rechtzeitig fertiggeworden - eine kleine Advents-Kalender-Klasse.

Sie erstellt aus einem XML-File ein Daten-Array und prüft je nach Einstellung ob das Server-Datum oder das Client-Datum zur Sperrung der noch nicht offenen Türchen herangezogen werden soll.

PHP-Code:
/**
Erstellt ein anpassbares Adventskalender-Objekt
@author Boris Horn
@version 1.0
*/
import com.xfactorstudio.xml.xpath.XPath;
import mx.utils.Delegate;

class 
com.asdag.Adventskalender extends XML
{
    
    
    public var 
totalArray:Array = new Array();
    public var 
useServerTime:Boolean = new Boolean();
    public var 
getServerTime:String = new String();
    private var 
cDay:Number = new Number();
    private var 
serverTime:LoadVars;

/**
* Erstellt ein XML-Objekt mit allen Adventsdaten
@param XMLFileName der Pfad zum XML-File, welches die Daten des Advents-Kalenders enthält
*/    
    
    
public function pushData (XMLFileName:String) {
        
super ();
        
this.ignoreWhite true;
        
this.load (XMLFileName);
        
this.onLoad confirmLoad;
    }
    
/**
Wird ausgeführt, wenn das XML-File erfolgreich geladen wurde
*/    
    
private function confirmLoad (success:Boolean):Void {
        if (
success) {
            
trace ("xml-file erfolgreich geladen");
            
getDataArray();
            if(!
useServerTime){
            for (var 
i:Number 024 i++){
                
                
checkDate(i);
            }
            }
            
trace ("objekte erfolgreich erstellt");
            
        }
        else {
            
trace ("FILE NICHT GELADEN");
        }
    }
    
/**
Erstellt das Daten-Array mit allen Inhalten
*/
    
    
private function getDataArray(){
        
        var 
dataArray:Array = XPath.selectNodes(this"adventskalender/tag/@openDate");
        var 
resArray:Array = XPath.selectNodes(this"adventskalender/tag/@resource");
        var 
headArray:Array = XPath.selectNodes(this"adventskalender/tag/@head");
        var 
descArray:Array = XPath.selectNodes(this"adventskalender/tag/node()");
        var 
imgArray:Array = XPath.selectNodes(this"adventskalender/tag/@img");
                
        for(var 
i:Number 024i++)
            {
        
            
totalArray.push({openDate:dataArray[i],resource:resArray[i],head:headArray[i], desc:descArray[i], img:imgArray[i], alpha:0item:"item"+[i]});
            
            }
            
        
    
    
    }


    
/**
Erstellt ein Datums-Objekt (falls useServerTime = false);
*/

    
public function getCDate():Number {
    
        var 
localTime:Date = new Date();
        var 
cMonth:Number localTime.getMonth()+1;
        
cDay localTime.getUTCDate();
    
        return 
cDay;
    
}


/**
* Die Server-Zeit wird über ein externes PHP-Script geladen (manipulationssicherer!)
*@param useServerTime entweder true oder false - bei false wird automatisch die Client-Zeit verwendet
*/

    
public function setServerTime(useServerTime:Boolean){
        
        if(
useServerTime){
            
serverTime = new LoadVars();
            
serverTime.load("php/sTime.php");
            
serverTime.onLoad Delegate.create(thisloadScript); 
            
            
            
        } else {
                
                
trace ("Client-Time wird verwendet");
                
getServerTime "0";
                
            }
            
        }
            

/**
Verarbeitet die Scriptdaten und bei useServerTime = true erfolgt der Datums-Check
*/
    
    
public function loadScript(succ):String{
    
    if(
succ){
            
        
trace ("Servertime fertig geladen");
        
getServerTime serverTime.sTime;
            
        for (var 
i:Number 024 i++){
                
                
checkServerDate(i);
                
                }
                
        return 
getServerTime;
                
        } else {
                
                
trace("Das Script konnte nicht geladen werden");
            }
            
    }
            
            
        


/**
Ermittelt das Datum der Freigabe und graut noch nicht geöffnete Türchen aus
@param aElement das Array-Elememt des Advents-Objektes
*/
    
    
private function checkDate(aElement:Number){
    
        
getCDate();

        if(
cDay >= parseInt(totalArray[aElement]["openDate"])){
            
            
totalArray[aElement]["alpha"] = 100;
            

        }else{
        
            
totalArray[aElement]["alpha"] = 70;
            
        }
    }

    
/**
Ermittelt das Datum der Freigabe bei aktiviertem Server-Check  und graut noch nicht geöffnete Türchen aus
@param aElement das Array-Elememt des Advents-Objektes
*/

    
private function checkServerDate(aElement:Number){
        
        if(
getServerTime >= parseInt(totalArray[aElement]["openDate"])){
            
            
totalArray[aElement]["alpha"] = 100;
            

        }else{
        
            
totalArray[aElement]["alpha"] = 70;
            
        }
    }
    
    


so sieht das XML-File aus (beispielhaft für einen Tag - 24 werden benötigt)

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<adventskalender>
    <tag openDate="1" head="1.12.: Klingelton" img="img/pwp_01.jpg"  resource="res1"><![CDATA[Seeliger Ihr Handy nie klingelt: Der neue Klingelton.
Hier kurz reinhören, dann Ihre Handynummer eingeben und direkt auf Ihr Handy laden.]]></tag>
für Anregungen und Verbesserungsvorschläge bin ich sehr dankbar

gruss boris
Angehängte Dateien
Dateityp: zip com.zip (33,6 KB, 125x aufgerufen)
__________________
Es gibt nur zwei Arten von Menschen die Hawaiihemden tragen: Schwuchteln und dicke fette Partylöwen. Und du siehst nicht aus wie ein dicker fetter Partylöwe!" - Homer J. Simpson
bobo_k1 ist offline   Mit Zitat antworten
Alt 14-12-2006, 22:17   #2 (permalink)
Lieblingsuser
 
Benutzerbild von lightzoom
 
Registriert seit: Apr 2004
Ort: im rechner
Beiträge: 281
klingt interessant. könntest du mal ein beispiel posten/uploaden?
__________________
Die kleinen Schritte verändern die Welt: Sag NEIN zu Atomkraft und
wechsle zu CO2-freiem Ökostrom!
lightzoom ist offline   Mit Zitat antworten
Alt 15-12-2006, 08:22   #3 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Nur mal so eine Frage: wieso hast du mit Delegate gearbeitet und nicht einfach die onLoad-Methode überschrieben?
Omega Psi ist offline   Mit Zitat antworten
Alt 15-12-2006, 08:32   #4 (permalink)
Trennschleifer
 
Benutzerbild von bobo_k1
 
Registriert seit: Apr 2004
Ort: Hamburg
Beiträge: 1.282
ohne die Benutzung der Delegate-klasse hat die onLoad-Methode nie funktioniert, bis mir der sonar den Tipp mit der Delegate-klasse gegeben hat. Jetzt benutze ich diese Klasse sehr häufig um Event-Handler besser zu verarbeiten.

hier ist ein Beispiel:

http://wiki.vizar.de/adventskalender.html
__________________
Es gibt nur zwei Arten von Menschen die Hawaiihemden tragen: Schwuchteln und dicke fette Partylöwen. Und du siehst nicht aus wie ein dicker fetter Partylöwe!" - Homer J. Simpson
bobo_k1 ist offline   Mit Zitat antworten
Alt 15-12-2006, 08:52   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Hm, nur so als Denkanstoß...

Wenn man mit den onLoad-Prozeduren etc arbeiten will, muss man sich darüber im klaren sein, was wann wie wo passiert. In AS 3 gibt es Delegates wohl nicht mehr und dann muss man anders Vorgehen...

Ich würde es vielleicht so Konzipieren:
  1. XML laden und verarbeiten
  2. Wenn XML geladen, konstruiere den Film

Dabei würde ich die Klassenhierarchie so aufbauen, dass die XML unabhängig von den MovieClips geladen wird (also auch nciht in einem MovieCLip). Dann in der
function onLoad() {
if(success)
// Tue etwas un speichere die Daten in einer KlassenVariablen
_root.attachMovie(); // MovieClips erzeugen
}
}


oder

function onLoad() {
if(success)
this.parseXML();
this.drawMovie();
}
}


function parseXML() {
// Tue etwas un speichere die Daten in einer KlassenVariablen
}


function drawMovie() {
_root.attachMovie() // Erzeuge nun in _root den Film
}


Also ist nur eine Idee, aber generell wird man wohl eh in Zukunft komplexere Filme anders konzipieren müssen. Für komplexere Filme, in denen Daten nachgeladen werden müssen, dürften sich dann wohl auch Listener anbieten, um das Ladeverhalten zu bestimmen.
Omega Psi ist offline   Mit Zitat antworten
Alt 15-12-2006, 09:01   #6 (permalink)
Trennschleifer
 
Benutzerbild von bobo_k1
 
Registriert seit: Apr 2004
Ort: Hamburg
Beiträge: 1.282
Zitat:
In AS 3 gibt es Delegates wohl nicht mehr und dann muss man anders Vorgehen...
oh schade, die hat mir jetzt so gut gefallen - ich denke AS 3.0 wird sowieso was ganz anderes werden und hat, so wie ich das jetzt einschätzen kann mit dem bisherigen Workflow in AS 2.0 nicht mehr viel gemeinsam.

Bei der XML-Verabeitung ist die Frage, ob sie überhaupt in die Klasse soll oder im jeweiligen Programm laufen soll. Dann ist ein asynchrones Ladeverhalten weniger in der Klasse.
__________________
Es gibt nur zwei Arten von Menschen die Hawaiihemden tragen: Schwuchteln und dicke fette Partylöwen. Und du siehst nicht aus wie ein dicker fetter Partylöwe!" - Homer J. Simpson
bobo_k1 ist offline   Mit Zitat antworten
Alt 02-10-2007, 16:31   #7 (permalink)
Flaschendreherin
 
Benutzerbild von Jazzy4Rock
 
Registriert seit: Jul 2006
Beiträge: 47
hmm... mal ne frage, geht das auch ohne xml? oder kommt man da nich drum rum?
__________________
Was du nicht kannst, kann ich schon lange nicht!
www.slut-online.de / www.truescience.de (i.B.)
Jazzy4Rock ist offline   Mit Zitat antworten
Alt 13-11-2007, 21:37   #8 (permalink)
Neuer User
 
Registriert seit: Mar 2004
Ort: Dresden
Beiträge: 43
Das tät mich auch mal interessieren da ich auch noch eins machen muss.
Grafixboy ist offline   Mit Zitat antworten
Alt 14-11-2007, 12:21   #9 (permalink)
Trennschleifer
 
Benutzerbild von bobo_k1
 
Registriert seit: Apr 2004
Ort: Hamburg
Beiträge: 1.282
Klar geht das auch ohne XML - musst du eben etwas programmieren was die Daten in Objekten oder wasauchimmer hält
__________________
Es gibt nur zwei Arten von Menschen die Hawaiihemden tragen: Schwuchteln und dicke fette Partylöwen. Und du siehst nicht aus wie ein dicker fetter Partylöwe!" - Homer J. Simpson
bobo_k1 ist offline   Mit Zitat antworten
Alt 14-11-2007, 12:28   #10 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Zitat:
Zitat von Jazzy4Rock Beitrag anzeigen
hmm... mal ne frage, geht das auch ohne xml? oder kommt man da nich drum rum?
Wenn du nicht mit XML arbeitest, dann brauchst du die Klasse auch nicht.

Für mich sehe ich da auch keinen Sinn um ehrlich zu sein. Im Wesentlichen
wird eine XML Datei geparst, also schon sehr speziell auf deine Anwendung
geschnitten. Ist entsprechend einfacher und schneller so etwas selbst zu
schreiben als ein fremdes Script auf die eigenen Wünsche anzupassen.

Würde auch nicht von XML vererben, dann kannst du auch schön dein
Delegate nutzen

dennoch danke und lg
sebastian ist offline   Mit Zitat antworten
Alt 15-11-2007, 08:52   #11 (permalink)
...
 
Benutzerbild von flash bier
 
Registriert seit: Nov 2001
Beiträge: 1.227
Vielleicht noch ne kleine Anregung:
Schon geöffnete Türchen könnten anders dargestellt sein, damit der fröhliche Weihnachts-User weiß, welches Türchen er schon geöffnet hat oder welches er noch auf überaschende Weise öffnen kann.
(Shared Object und/oder Cookie)

MfG flash bier
__________________
Schweig oder sprich Worte, die besser sind als Schweigen !
flash bier ist offline   Mit Zitat antworten
Alt 15-11-2007, 15:57   #12 (permalink)
Flaschendreherin
 
Benutzerbild von Jazzy4Rock
 
Registriert seit: Jul 2006
Beiträge: 47
okay.... und wie setzt man die cookies?
__________________
Was du nicht kannst, kann ich schon lange nicht!
www.slut-online.de / www.truescience.de (i.B.)
Jazzy4Rock ist offline   Mit Zitat antworten
Alt 15-11-2007, 16:07   #13 (permalink)
Trennschleifer
 
Benutzerbild von bobo_k1
 
Registriert seit: Apr 2004
Ort: Hamburg
Beiträge: 1.282
so:

PHP-Code:
class com.leebrimelow.utils.FlashCookie {
   
   private var 
cookie:SharedObject;
   
   function 
FlashCookie(cookieName:String,path:String) {
      
cookie SharedObject.getLocal(cookieName,path);
   }
   
   public function 
setCookie(obj:Object):Void {
      var 
i:String;
      for (
i in obj) {
         
cookie.data[i] = obj[i];
         
cookie.flush();
      }
   }
   
   public function 
getCookie(str:String):String {
      return 
cookie.data[str];
   }
   
   public function 
eatCookie():Void {
       
cookie.clear();
   }
   

anwendung

PHP-Code:
import com.leebrimelow.utils.*;

var 
cookie:FlashCookie = new FlashCookie("user");
cookie.setCookie({name:"Flash Gott",pass:"password"});

trace(cookie.getCookie("name")); //Flash Gott 
__________________
Es gibt nur zwei Arten von Menschen die Hawaiihemden tragen: Schwuchteln und dicke fette Partylöwen. Und du siehst nicht aus wie ein dicker fetter Partylöwe!" - Homer J. Simpson
bobo_k1 ist offline   Mit Zitat antworten
Alt 18-11-2007, 20:33   #14 (permalink)
Trennschleifer
 
Benutzerbild von bobo_k1
 
Registriert seit: Apr 2004
Ort: Hamburg
Beiträge: 1.282
habe das ding mal in AS3 und Flex erweitert - gibts hier
__________________
Es gibt nur zwei Arten von Menschen die Hawaiihemden tragen: Schwuchteln und dicke fette Partylöwen. Und du siehst nicht aus wie ein dicker fetter Partylöwe!" - Homer J. Simpson
bobo_k1 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 19:17 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele