tutorials.de Buch-Aktion 05/2012
  • Matthias Kannengiesser

    von Matthias Kannengiesser Veröffentlicht: 23.05.04 11:21
    Seitenaufrufe: 276 
    Hi Folks,

    Hier mal ein kurzes und bündiges Tutorial zum Thema Einsatz des prototype-Objekts (Fallbeispiel: MovieClip.prototype) in Flash MX 2004. Was gilt es beim Einsatz zu beachten!

    Fallbeispiel (MovieClip.prototype)
    PHP-Code:
    MovieClip.prototype.wabbern = function(x_endy_endmultiplikatorratio) {    
            
    // Initialisierung
            
    if (this.sX == undefinedthis.sX 0;
            if (
    this.sY == undefinedthis.sY 0;        
                        
            
    // Berechnung
            
    this.sX this.sX*multiplikator+(x_end-this._xscale)*ratio;
            
    this.sY this.sY*multiplikator+(y_end-this._yscale)*ratio;
            
            
    // Umsetzung auf den jeweils betroffene MovieClip-Instanz
            
    this._xscale += this.sX;
            
    this._yscale += this.sY;        
    };

    // Ausführung
    this.onEnterFrame = function() {
        
    mc.wabbern(200,200,0.8,0.7);


    1. Schreibweise movieclip - ist Syntaktisch nicht korrekt. Es muss, wie folgt lauten: MovieClip. In Flash 5 und MX war dies noch egal - in MX 2004 nicht!

    PHP-Code:
    // In Flash 5 und MX (Funktionsfähige Schreibweisen)
    movieclip
    MovieClip
    Movieclip

    // In Flash MX 2004 (Funktionsfähige schreibweise)
    MovieClip 
    von Matthias Kannengiesser Veröffentlicht: 14.05.04 11:22
    Seitenaufrufe: 270 
    Hi Folks,

    Habe hier mal was für alle Datums-Objekt geschädigten - eine auf UTC (Universal Coordinated) basierte Lösung. Sowohl für Flash MX als auch Flash MX 2004 geeignet.

    PHP-Code:
    // AnalogUhr
    function initUTCUhr(posX,posY,radius,pzone,pstadt,pname,ptiefe) {
        
    // Variablen Initialisierung
        
    var radiantstart_xstart_yend_xend_y;
        var 
    zeit,std,mins,sek;
        var 
    sek_winkel,min_winkel,std_winkel;
        var 
    sek_radiant,min_radiant,std_radiant;
        var 
    sek_x,sek_y,min_x,min_y,std_x,std_y;
        
        
    // Winkel in Bogenmass
        
    function winkelBogen(winkel) {
            return 
    winkel/180*Math.PI;
        }
        
        
    // MovieClip für AnalogUhr erzeugen
        
    this.createEmptyMovieClip(pname,ptiefe);
        
        
    // Textfeld für Statdanzeige erzeugen
        
    this[pname].createTextField("anzeige_txt",ptiefe+1,posX,posY+radius,0,0);
        
    this[pname].anzeige_txt.autoSize "center";
        
    this[pname].anzeige_txt.text pstadt;
        
        
    // Ziffernblatt zeichnen    
        
    for(var i=1i<=60i++) {        
            
    radiant winkelBogen(i*6);        
            if (
    i%== 0) {            
                
    start_x Math.cos(radiant)*(radius-10);
                
    start_y Math.sin(radiant)*(radius-10);
                
    end_x Math.cos(radiant)*radius;
                
    end_y Math.sin(radiant)*radius;            
                
    this.lineStyle(20100);
                
    this.moveTo(posX+start_xposY+start_y);
                
    this.lineTo(posX+end_xposY+end_y);                
            } else {
                
    start_x Math.cos(radiant)*(radius-5);
                
    start_y Math.sin(radiant)*(radius-5);
                
    end_x Math.cos(radiant)*radius;
                
    end_y Math.sin(radiant)*radius;
                
    this.lineStyle(10100);
                
    this.moveTo(posX+start_xposY+start_y);
                
    this.lineTo(posX+end_xposY+end_y);
            }
        }
        
    this[pname].onEnterFrame = function() {
            
    // Zeiger entfernen        
            
    this.clear();        
            
    // Uhrzeit ermitteln
            
    zeit = new Date();
            
    sek zeit.getUTCSeconds();
            
    mins zeit.getUTCMinutes();
            
    std zeit.getUTCHours()+pzone;
            
    // AM/PM ermitteln
            
    if  (std >= 24) {
              
    std std 24
            }        
            if (
    std 12) {
                
    this.anzeige_txt.text pstadt " / am";
            } else {
                
    this.anzeige_txt.text pstadt " / pm";
            }
            
    // Zeigerwinkel Berechnen
            
    sek_winkel sek*6-90;
            
    min_winkel mins*6-90;
            
    std_winkel std*30+mins/60*30-90;
            
    // die winkel werden in bogenmaße umgerechnet
            
    sek_radiant winkelBogen(sek_winkel);
            
    min_radiant winkelBogen(min_winkel);
            
    std_radiant winkelBogen(std_winkel);
            
    // Zeigerpunkte via Sin/Cos berechnen
            // Sekunden
            
    sek_x posX Math.cos(sek_radiant)*radius;
            
    sek_y posY Math.sin(sek_radiant)*radius;
            
    // Minuten
            
    min_x posX Math.cos(min_radiant)*(radius*1);
            
    min_y posY Math.sin(min_radiant)*(radius*1);
            
    // Sekunden
            
    std_x posX Math.cos(std_radiant)*(radius*.75);
            
    std_y posY Math.sin(std_radiant)*(radius*.75);
            
    // Zeiger zeichnen
            // Sekunden
            
    this.lineStyle(10xff0000100);
            
    this.moveTo(posXposY);
            
    this.lineTo(sek_xsek_y);        
            
    // Minuten
            
    this.lineStyle(20100);
            
    this.moveTo(posXposY);
            
    this.lineTo(min_xmin_y);        
            
    // Stunden
            
    this.lineStyle(30100);
            
    this.moveTo(posXposY);
            
    this.lineTo(std_xstd_y);
        }     
    }

    // Städte und Zeitzonen
    var x=0,y=0;
    stadtliste = new Array("Berlin","Istanbul","New York","Moskau","Tokyo","Sydney");
    zonenliste = new Array(2,3,-5,4,9,10);

    // Uhren erzeugen
    for (var j=0stadtliste.lengthj++) {    
        
    startpos 150;
        
    x++;
        
    pX startpos 120*x;    
        if (
    j%== 0) {
            
    x=0;
            
    y++;
            
    pX startpos;
            
    pY 120*y;
        }
        
    initUTCUhr(pX,pY,50,zonenliste[j],stadtliste[j],"uhr"+j,j);    
    }

    /*
    // Uhren (UTC)
    // Berlin (+01:00)
    initUTCUhr(Stage.width/2,Stage.height/2,50,2,"Berlin","uhr",1);
    // Istanbul (+02:00)
    initUTCUhr(Stage.width/2,75,50,3,"Istanbul","uhr2",2);
    // New York (-05:00)
    initUTCUhr(Stage.width/2,325,50,-5,"New York","uhr3",3);
    // Moskau (+03:00)
    //initUTCUhr(100,100,50,3,"Moskau","uhr4",4);
    */ 
    Einzeln können die analog Uhren natürlich ebenfalls erzeugt werden:

    PHP-Code:
    // Uhren (UTC)
    // Berlin (+01:00)
    initUTCUhr(Stage.width/2,Stage.height/2,50,1,"Berlin","uhr",1);
    // Istanbul (+02:00)
    initUTCUhr(Stage.width/2,75,50,2,"Istanbul","uhr2",2);
    // New York (-05:00)
    initUTCUhr(Stage.width/2,325,50,-5,"New York","uhr3",3); 
    Hinweis
    GMT (Greenwich Mean Time) - im normalen täglichen Gebrauch können UTC und GMT gleichgesetzt werden.

    Info: Universal Time Coordinated
    Die UTC wird durch Mittelung der Zeittakte von genau 100 ausgewählten, in diversen Staaten betriebenen Atomuhren erzeugt. Die Signale dieser Atomuhren laufen beim "Internationalen Büro für die Zeit" in Paris zusammen. In Deutschland wurde die UTC durch das "Gesetz über die Zeitbestimmung" vom 25.07. 1978 eingeführt. In den Arbeitskarten und Unterlagen des Deutschen Wetterdienstes wird die UTC seit 1985 verwendet.

    MEZ, MESZ und GZ

    MEZ (Mittel Europäische Zeit) Mittlere Sonnenzeit des durch Görlitz verlaufenden 15. östlichen Meridians

    MESZ (MittelEuropäische SommerZeit) Gegenüber der mitteleuroäischen Zeit um 1 Stunde vorverlegte Uhrzeit zur besseren Ausnutzung des Tageslichtes und zur Herbeiführung von Erleichterungen im europäischen Bahnreiseverkehr während des Sommerhalbjahres.

    GZ (Gesetzliche Zeit) Durch das Zeitgesetz von 1978 wird die mitteleuropäische Zeit MEZ oder die mitteleuropäische Sommerzeit MESZ als gesetzliche Zeit festgelegt. Sie soll im amtlichen und geschäftlichen Verkehr verwendet werden. Die Bezeichnung GZ bei Zeitangaben bedeutet daher im Sommer MESZ und im Winter MEZ.

    Der Unterschied zwischen MEZ beziehungsweise MESZ und der koordinierten Weltzeitskala UTC beträgt:

    MEZ = UTC + 1h
    MESZ = UTC + 2h

    Liebe Grüsse
    Matze K.
    von Matthias Kannengiesser Veröffentlicht: 01.10.03 11:24
    Seitenaufrufe: 224 
    Hi Folks,

    Hier habe ich ein Flash Crypto Packet für euch. Die Verschlüsselungen basieren auf:


    MD4
    MD5
    SHA-1


    Wobei MD4 und MD5 auf 128-Bit basieren und SHA-1 auf 160-Bit.

    MD5 in Flash
    PHP-Code:
    /*
     * MD5 Algorithm
     * A Flash implementation of the RSA Data Security, Inc. MD5 Message
     * Digest Algorithm, as defined in RFC 1321.
     * Flash Version 1.0 - added and tested by Matthias Kannengiesser 2003.
     * Original JavaScript Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
     * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
     * Distributed under the BSD License 
     */

    /*
     * Konfigurations Variablen
     * Diese legen die Einstellungen so fest, dass sie mit der Serverseite
     * kompatibel sind. Die Standardeinstellungen sollten jedoch einwandfrei
     * arbeiten.
    */
    var hexcase 0;  // Hex Ausgabe-Format: 0 - klein Buchstaben; 1 - gross Buchstaben   
    var b64pad  ""// Base-64. "=" für strikte RFC Übereinstimmung   
    var chrsz   8;  // Bits pro Zeichen: 8 - ASCII; 16 - Unicode  

    /*
     * Die Funktionen zur Verschlüsselung
    */
    function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length chrsz));}
    function 
    b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length chrsz));}
    function 
    str_md5(s){ return binl2str(core_md5(str2binl(s), s.length chrsz));}
    function 
    hex_hmac_md5(keydata) { return binl2hex(core_hmac_md5(keydata)); }
    function 
    b64_hmac_md5(keydata) { return binl2b64(core_hmac_md5(keydata)); }
    function 
    str_hmac_md5(keydata) { return binl2str(core_hmac_md5(keydata)); }

    // Verwenden
    /*
    trace(hex_md5("matze"));
    trace(b64_md5("matze"));
    trace(str_md5("matze"));
    trace("------------------------");
    trace(hex_hmac_md5("passwort","matze"));
    trace(b64_hmac_md5("passwort","matze"));
    trace(str_hmac_md5("passwort","matze"));
    */

    function md5_vm_test()
    {
      return 
    hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
    }

    function 
    core_md5(xlen)

      
    x[len >> 5] |= 0x80 << ((len) % 32);
      
    x[(((len 64) >>> 9) << 4) + 14] = len;
      
      var 
    =  1732584193;
      var 
    = -271733879;
      var 
    = -1732584194;
      var 
    =  271733878;

      for(var 
    0x.length+= 16)
      {
        var 
    olda a;
        var 
    oldb b;
        var 
    oldc c;
        var 
    oldd d;
     
        
    md5_ff(abcdx[i0], , -680876936);
        
    md5_ff(dabcx[i1], 12, -389564586);
        
    md5_ff(cdabx[i2], 17,  606105819);
        
    md5_ff(bcdax[i3], 22, -1044525330);
        
    md5_ff(abcdx[i4], , -176418897);
        
    md5_ff(dabcx[i5], 12,  1200080426);
        
    md5_ff(cdabx[i6], 17, -1473231341);
        
    md5_ff(bcdax[i7], 22, -45705983);
        
    md5_ff(abcdx[i8], ,  1770035416);
        
    md5_ff(dabcx[i9], 12, -1958414417);
        
    md5_ff(cdabx[i+10], 17, -42063);
        
    md5_ff(bcdax[i+11], 22, -1990404162);
        
    md5_ff(abcdx[i+12], ,  1804603682);
        
    md5_ff(dabcx[i+13], 12, -40341101);
        
    md5_ff(cdabx[i+14], 17, -1502002290);
        
    md5_ff(bcdax[i+15], 22,  1236535329);

        
    md5_gg(abcdx[i1], , -165796510);
        
    md5_gg(dabcx[i6], , -1069501632);
        
    md5_gg(cdabx[i+11], 14,  643717713);
        
    md5_gg(bcdax[i0], 20, -373897302);
        
    md5_gg(abcdx[i5], , -701558691);
        
    md5_gg(dabcx[i+10], ,  38016083);
        
    md5_gg(cdabx[i+15], 14, -660478335);
        
    md5_gg(bcdax[i4], 20, -405537848);
        
    md5_gg(abcdx[i9], ,  568446438);
        
    md5_gg(dabcx[i+14], , -1019803690);
        
    md5_gg(cdabx[i3], 14, -187363961);
        
    md5_gg(bcdax[i8], 20,  1163531501);
        
    md5_gg(abcdx[i+13], , -1444681467);
        
    md5_gg(dabcx[i2], , -51403784);
        
    md5_gg(cdabx[i7], 14,  1735328473);
        
    md5_gg(bcdax[i+12], 20, -1926607734);

        
    md5_hh(abcdx[i5], , -378558);
        
    md5_hh(dabcx[i8], 11, -2022574463);
        
    md5_hh(cdabx[i+11], 16,  1839030562);
        
    md5_hh(bcdax[i+14], 23, -35309556);
        
    md5_hh(abcdx[i1], , -1530992060);
        
    md5_hh(dabcx[i4], 11,  1272893353);
        
    md5_hh(cdabx[i7], 16, -155497632);
        
    md5_hh(bcdax[i+10], 23, -1094730640);
        
    md5_hh(abcdx[i+13], ,  681279174);
        
    md5_hh(dabcx[i0], 11, -358537222);
        
    md5_hh(cdabx[i3], 16, -722521979);
        
    md5_hh(bcdax[i6], 23,  76029189);
        
    md5_hh(abcdx[i9], , -640364487);
        
    md5_hh(dabcx[i+12], 11, -421815835);
        
    md5_hh(cdabx[i+15], 16,  530742520);
        
    md5_hh(bcdax[i2], 23, -995338651);

        
    md5_ii(abcdx[i0], , -198630844);
        
    md5_ii(dabcx[i7], 10,  1126891415);
        
    md5_ii(cdabx[i+14], 15, -1416354905);
        
    md5_ii(bcdax[i5], 21, -57434055);
        
    md5_ii(abcdx[i+12], ,  1700485571);
        
    md5_ii(dabcx[i3], 10, -1894986606);
        
    md5_ii(cdabx[i+10], 15, -1051523);
        
    md5_ii(bcdax[i1], 21, -2054922799);
        
    md5_ii(abcdx[i8], ,  1873313359);
        
    md5_ii(dabcx[i+15], 10, -30611744);
        
    md5_ii(cdabx[i6], 15, -1560198380);
        
    md5_ii(bcdax[i+13], 21,  1309151649);
        
    md5_ii(abcdx[i4], , -145523070);
        
    md5_ii(dabcx[i+11], 10, -1120210379);
        
    md5_ii(cdabx[i2], 15,  718787259);
        
    md5_ii(bcdax[i9], 21, -343485551);

        
    safe_add(aolda);
        
    safe_add(boldb);
        
    safe_add(coldc);
        
    safe_add(doldd);
      }
      return Array(
    abcd);
      
    }

    function 
    md5_cmn(qabxst)
    {
      return 
    safe_add(bit_rol(safe_add(safe_add(aq), safe_add(xt)), s),b);
    }
    function 
    md5_ff(abcdxst)
    {
      return 
    md5_cmn((c) | ((~b) & d), abxst);
    }
    function 
    md5_gg(abcdxst)
    {
      return 
    md5_cmn((d) | (& (~d)), abxst);
    }
    function 
    md5_hh(abcdxst)
    {
      return 
    md5_cmn(dabxst);
    }
    function 
    md5_ii(abcdxst)
    {
      return 
    md5_cmn(^ (| (~d)), abxst);
    }

    function 
    core_hmac_md5(keydata)
    {
      var 
    bkey str2binl(key);
      if(
    bkey.length 16bkey core_md5(bkeykey.length chrsz);

      var 
    ipad = Array(16), opad = Array(16);
      for(var 
    016i++) 
      {
        
    ipad[i] = bkey[i] ^ 0x36363636;
        
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
      }

      var 
    hash core_md5(ipad.concat(str2binl(data)), 512 data.length chrsz);
      return 
    core_md5(opad.concat(hash), 512 128);
    }

    function 
    safe_add(xy)
    {
      var 
    lsw = (0xFFFF) + (0xFFFF);
      var 
    msw = (>> 16) + (>> 16) + (lsw >> 16);
      return (
    msw << 16) | (lsw 0xFFFF);
    }

    function 
    bit_rol(numcnt)
    {
      return (
    num << cnt) | (num >>> (32 cnt));
    }

    function 
    str2binl(str)
    {
      var 
    bin = Array();
      var 
    mask = (<< chrsz) - 1;
      for(var 
    0str.length chrsz+= chrsz)
        
    bin[i>>5] |= (str.charCodeAt(chrsz) & mask) << (i%32);
      return 
    bin;
    }

    function 
    binl2str(bin)
    {
      var 
    str "";
      var 
    mask = (<< chrsz) - 1;
      for(var 
    0bin.length 32+= chrsz)
        
    str += String.fromCharCode((bin[i>>5] >>> (32)) & mask);
      return 
    str;
    }

    function 
    binl2hex(binarray)
    {
      var 
    hex_tab hexcase "0123456789ABCDEF" "0123456789abcdef";
      var 
    str "";
      for(var 
    0binarray.length 4i++)
      {
        
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
               
    hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
      }
      return 
    str;
    }

    function 
    binl2b64(binarray)
    {
      var 
    tab "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
      var 
    str "";
      for(var 
    0binarray.length 4+= 3)
      {
        var 
    triplet = (((binarray[i   >> 2] >> * ( i   %4)) & 0xFF) << 16)
                    | (((
    binarray[i+>> 2] >> * ((i+1)%4)) & 0xFF) << )
                    |  ((
    binarray[i+>> 2] >> * ((i+2)%4)) & 0xFF);
        for(var 
    04j++)
        {
          if(
    binarray.length 32str += b64pad;
          else 
    str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
        }
      }
      return 
    str;

    Achtung
    Ohne Kenntnisse über Bitwise-Operatoren läuft nichts!

    Hinweis
    Urheber des ganzen auf JavaScript Basis ist Paul Johnston.
    Die MD4 und SHA-1 Version findet Ihr im Attachment.

    Wünsche viel Spass damit!

    Liebe Grüsse
    Matze K.
    von Matthias Kannengiesser Veröffentlicht: 01.10.03 11:24
    Seitenaufrufe: 1041 
    Der Einsatz von externen Daten in Flash-Projekten ist kaum noch zu vermeiden. Oftmals kommen noch Datenbanken samt serverseitiger PHP-Skripte zum Einsatz. Damit bei der Formatierung keine unliebsamen Überraschungen auftauchen sollte man sich fünf Minuten Zeit nehmen und sich den unten aufgeführten PHP-Funktionen u. Flash-Methoden zu wenden.

    Zeichen aus Texten entfernen
    Um bestimmte Zeichen aus externen Texten zu entfernen stehen in PHP einige nützliche Funktionen zur Verfügung. Die Funktion die sicher recht eindeutig in Ihrer Funktion ist ist str_replace() und soll hier vorgestellt werden.

    PHP und Steuerungszeichen, wie Zeilenumbrüche entfernen

    Um beispielsweise Steuerungszeichen, wie Zeilenumbrüche aus einem Text zu entfernen wird noch die PHP Funktion chr() benötigt.

    PHP-Code:
    chr(10) - neue Zeile (line feed)
    chr(13) - wagenrücklauf (carriage return) 
    Ihr könnt mit Hilfe der PHP Funktionen str_replace() und chr() die Steuerzeichen 10 u. 13 entfernen.

    Bsp.:
    PHP-Code:
    $inhalt str_replace (chr(10), ""$inhalt);
    $inhalt str_replace (chr(13), ""$inhalt); 
    Hinweis
    Natürlich können auch sämtliche andere Zeichen aus dem Text entfernt werden. Die beiden Funktion sind nicht nur auf Steuerzeichen beschränkt. Für diejenigen, die noch etwas tiefer in die Materie vorstossen wollen und sich auch vor regulären Ausdrücken nicht fürchten, seien folgende PHP Funktionen empfohlen - ereg_replace() u/o. preg_replace().

    Flash und Steuerungszeichen, wie Zeilenumbrüche entfernen
    Natürlich kann man diese Steuerungszeichen auch mit Hilfe von Flash entfernen. Hierbei sind die Flash-Methoden split() und join() behilflich.

    Escape-Sequenzen
    Zusätzlich kommen die sog. Escape-Sequenzen zum Einsatz, wie \n, \r, \t, etc. mit deren Hilfe lassen sich die Steuerungszeichen entfernen, da die Escape-Sequenzen selbst nichts anderes darstellen als entsprechende Steuerungszeichen, wie z.B. \n (neue Zeile).

    Bsp.:
    PHP-Code:
    // Steuerzeichen entfernen
    inhalt "Hallo\nDu da\rhey";
    inhalt=inhalt.split("\n").join("")
    inhalt=inhalt.split("\r").join("");
    trace(inhalt); 
    Bsp.:
    PHP-Code:
    // In einer Zeile
    inhalt "Hallo\nDu da\rhey";
    inhalt=inhalt.split("\n").join("").split("\r").join();
    trace(inhalt); 
    Hinweis
    Die Variable inhalt steht hier stellvertretend für die eingelesenen externen Texte.

    Zusatz zu PHP
    Sollte man PHP einsetzen kann man folgende PHP Methode verwenden: nl2br(). Mit Hilfe von nl2br() werden vor sämtlichen Zeilenumbrüchen eines Strings HTML-Zeilenumbrüche eingesetzt. So lassen sich Zeilenumbrüche in dynamische HTML-Textfelder gezielt platzieren und auch darstellen.

    Bsp.:
    PHP-Code:
    $inhalt nl2br($inhalt); 
    Viel Erfolg!

    Liebe Grüsse
    Matze K.