Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-07-2004, 21:29   #1 (permalink)
nah dran
 
Benutzerbild von -Panda-
 
Registriert seit: Sep 2002
Ort: Karlsruhe
Beiträge: 147
setBounds()-Prototype für MovieClips

Hallo,

Hab hier gerade ein setBounds-Prototype gebaut, mit dem man Größe und Position eines Movieclips an die Größe und Position eines anderen Movieclips übertragen kann. Es sollte (hoffe ich) unabhängig von den Pfaden der MCs in jedem Fall funktioneren.

Außerdem kann man die Werte für linken, oberen, rechten und unteren Rand - in dieser Reihenfolge - auch direkt in einem Array übergeben. Es ist auch möglich, bei der Übergabe des Arrays einzelne Werte wegzulassen, wenn man nur den linken und rechten Rand ändern will z.B. so ["5", "", 50, ""].

Hat jemand Lust sich das mal anzuschauen ob das so taugt? Für Anregungen und Optimierungen bin ich natürlich sehr dankbar. Ich bin mir z.B. nicht sicher, ob die Lösung mit dem leeren String im Array so geschickt ist und die vielen if-Abfragen lassen sich vielleicht auch eleganter lösen, keine Ahnung...

Naja, so sieht das ganze jedenfalls im Moment aus:


PHP-Code:
MovieClip.prototype.setBounds = function(param) {
    if (
typeof param == "movieclip") {
        
// bei Übergabe eines MovieClips
        
var param.getBounds(this._parent);
        
this._width b.xMax b.xMin;
        
this._height b.yMax b.yMin;
        
this._x += b.xMin this.getBounds(this._parent).xMin;
        
this._y += b.yMin this.getBounds(this._parent).yMin;
    } else if (
typeof param == "object" && param.length == 4) {
        
// bei Übergabe eines Arrays mit Werten für left, top, right, bottom
        // auch einzelne Werte sind möglich
        
if (param[0] == "" && param[2] != "") {
            
this._width param[2];
        } else if (
param[0] != "" && param[2] == "") {
            
this._width = -param[0];
        } else if (
param[0] != "" && param[2] != "") {
            
this._width param[2] - param[0];
        }
        if (
param[1] == "" && param[3] != "") {
            
this._height param[3];
        } else if (
param[1] != "" && param[3] == "") {
            
this._height = -param[1];
        } else if (
param[1] != "" && param[3] != "") {
            
this._height param[3] - param[1];
        }
        
//
        
if (param[0] != "") {
            
this._x += param[0] - this.getBounds(this._parent).xMin;
        }
        if (
param[1] != "") {
            
this._y += param[1] - this.getBounds(this._parent).yMin;
        }
    } else {
        return 
trace("setBounds() Fehlermeldung: Der übergebene Parameter ist nicht korrekt!");
    }
};
// Aufruf
mc1.onRelease = function() {
    
this.setBounds(mc2);
};
mc2.onRelease = function() {
    
this.setBounds([200300200]);
};
mc3.onRelease = function() {
    
this.setBounds([""0""200]);
}; 
Thanx,
Panda
-Panda- ist offline   Mit Zitat antworten
Alt 01-08-2004, 04:13   #2 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
sieht gut aus!

kürzer:
(nicht großartig getestet)
ActionScript:
  1. MovieClip.prototype.setBounds = function(param) {
  2.     if (typeof param == "movieclip") {
  3.         // bei Übergabe eines MovieClips
  4.         var b = param.getBounds(this._parent);
  5.         this._width = b.xMax - b.xMin;
  6.         this._height = b.yMax - b.yMin;
  7.         this._x += b.xMin - this.getBounds(this._parent).xMin;
  8.         this._y += b.yMin - this.getBounds(this._parent).yMin;
  9.     } else if (typeof param == "object" && param.length == 4) {
  10.         // bei Übergabe eines Arrays mit Werten für left, top, right, bottom
  11.         // auch einzelne Werte sind möglich
  12.         switch(param[0]) {
  13.             case (param[0]!= ""):
  14.                  (param[2] == "") ? this._width = -param[0] : this._width = param[2] - param[0];
  15.                  this._x += param[0] - this.getBounds(this._parent).xMin;
  16.                 break;
  17.             default :
  18.                 if (param[2] != "") {
  19.                     this._width = param[2];
  20.                 }
  21.         }
  22.         switch(param[1]) {
  23.             case (param[1]!= ""):
  24.                  (param[3] == "") ? this._height = -param[1] : this._height = param[3] - param[1];
  25.                  this._y += param[1] - this.getBounds(this._parent).yMin;
  26.                 break;
  27.             default :
  28.                 if (param[3] != "") {
  29.                     this._height = param[3];
  30.                 }
  31.         }
  32.     } else {
  33.         return trace("setBounds() Fehlermeldung: Der übergebene Parameter ist nicht korrekt!");
  34.     }
  35. };
  36.  
  37. // Aufruf
  38. mc1.onRelease = function() {
  39.     this.setBounds(mc2);
  40. };
  41. mc2.onRelease = function() {
  42.     this.setBounds([20, 0, 300, 200]);
  43. };
  44. mc3.onRelease = function() {
  45.     this.setBounds(["", 0, "", 200]);
  46. };
Edit:
mir fällt da grade so auf.. ist ar nicht kürzer....lol
nur nen bisl anders geschrieben!

Geändert von pape (01-08-2004 um 04:24 Uhr)
pape 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 06:37 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele