Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-06-2006, 21:16   #1 (permalink)
Pixelschieber
 
Registriert seit: Aug 2004
Ort: Berlin
Beiträge: 41
Question Dynamisches zentrieren, mathematisch lösbar?

Hallo,

ich hab ein Problem, was mir etwas kopfzerbrechen bereitet:

Auf der Stage liegt ein MC (leerer Kontainer) in diese werden nacheinander mcs geladen. deren Position innherhalb von MC immer anders ist -> Der Registerpoint ist demnach auch immer woanders. Und genau da liegt das Problem. Diesen gefüllten Kontainer-MC möchte ich zentrieren durch eine funktion, nennen wir sie centerStage().

Zur veranschaulichung nochmal 2 skizzen im Anhang (unbedingt ansehen!).

Bekannte Variablen/Größen:
- Stage.width
- Stage.height
- MC._width
- MC._height
- MC._x
- MC._y

Ich habe leider die Vermutung, dass das zu wenige bekannt Größen sind, um diese Problem zu lösen...

[EDIT: LÖSUNG auf Seite 2]

PHP-Code:
//  ---
Stage.align "TL";
Stage.scaleMode "noScale";
stageListener = new Object();
stageListener.onResize = function() {
    
centerStage();
};
Stage.addListener(stageListener);
//  ---
function centerStage() {
//  MC._x = ???;
//  MC._y = ???;

Die nachfolgenden(siehe Link) vermittelten Kenntnisse sind mir bekannt und führen leider nicht zu dem gewünschten Ergebnis:
[TUTORIAL] - Scale & Stage

Hat jemand eine Idee wie ich der Situation Herr werde? Vielen Dank im Voraus und mfG
Angehängte Grafiken
Dateityp: jpg problem-1.jpg (7,5 KB, 22x aufgerufen)
Dateityp: jpg problem-2.jpg (7,4 KB, 18x aufgerufen)

Geändert von Timo S. (30-06-2006 um 01:55 Uhr)
Timo S. ist offline   Mit Zitat antworten
Alt 29-06-2006, 21:26   #2 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.649
Wieso ist denn der Registerpunkt nicht Links-Oben.
Das leuchtet mir momentan nicht.
Mindestens sollte dir da ja der Abstand der RPunkts zum LinkenOberen ende des MCS bekannt sein oder nciht.

*b.asile rätselt*
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 29-06-2006, 21:43   #3 (permalink)
Pixelschieber
 
Registriert seit: Aug 2004
Ort: Berlin
Beiträge: 41
Nein. Leider ist mir weder der Abstand noch die exakte Lage des Registerpoints bekannt. Die in den MC geladenen Clips "bewegen" sich oder sind bewegbar. Der Registerpoint bleibt quasi an ort und Stelle, aber der Inhalt von MC, also Breite, Höhe und Position innerhalb von MC variiren...

Habe gerad das hier im Forum entdeckt, werde aber aus dem Script nicht schlau:
centerClip

ob das die Lösung ist die ich suche... *grübel
Timo S. ist offline   Mit Zitat antworten
Alt 29-06-2006, 21:59   #4 (permalink)
Pixelschieber
 
Registriert seit: Aug 2004
Ort: Berlin
Beiträge: 41
ok! die Lage des Registerpoints ist mir sehr wohl bekannt, aber das relative Verhältnis zu den darin befindlichen Elementen nicht. Diese sind z.B. Drag&Drop fähig... ungefähr verstanden was ich meine ?
Timo S. ist offline   Mit Zitat antworten
Alt 29-06-2006, 22:01   #5 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.649
es geht ja nur um die funktion:
PHP-Code:
function centerClip(){
this._x -= this._width/2;
this._y -= this._height/2;

Aber ich habe immer gedacht das wenn ich mc._x verwende das der RPunkt genommen wird.
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 29-06-2006, 22:15   #6 (permalink)
Pixelschieber
 
Registriert seit: Aug 2004
Ort: Berlin
Beiträge: 41
Ja, genau da liegt ja der Hund begraben ... hier nochmal 2 Screens:

Das grüne ist der REGISTERPOINT... die "Uhren" der Inhalt von MC... *seufz
Angehängte Grafiken
Dateityp: jpg screen-1.jpg (28,1 KB, 21x aufgerufen)
Dateityp: jpg screen-2.jpg (28,0 KB, 22x aufgerufen)
Timo S. ist offline   Mit Zitat antworten
Alt 29-06-2006, 22:28   #7 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Warum machst nicht alle Wecker so das sie nicht dauernd andere RegPints haben
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 29-06-2006, 22:37   #8 (permalink)
Pixelschieber
 
Registriert seit: Aug 2004
Ort: Berlin
Beiträge: 41
ok, dasn virtueller desktop. die "wecker" haben alle ein eigenen regpoint, z.zt. glaube ich mittig. Der grüne regpoint ist der regpoint des desktops. der desktop ist sozugen _parent für alle die "wecker" (oder später andere mcs) und liegt im _root. Die "wecker" sind drag&drop fähig und auf kommando möchte ich den desktop zentrieren: klar könnte ich jetzt alle wecker einzeln abfragen, deren position, breite, höhe innerhalb von dem desktop-clip... hatte aber gehofft, das es einfach geht...

also ums nochmal klarzustellen: ich möchte den gsammten desktop mit alle seinen weckern zentrieren, als ganzes, nicht alle wecker in die mitte, das die sich dort überlagern. sondern die wecker als gesammte "benutzte "fläche nehmen und zentrieren..

Geändert von Timo S. (29-06-2006 um 22:42 Uhr)
Timo S. ist offline   Mit Zitat antworten
Alt 29-06-2006, 22:53   #9 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
OK, jetzt hab ichs (glaub ich)
Wenn der RegPoint des "desktop_mc'c" in der mitte ist, geht mittig ausrichten auf der Bühne so!
PHP-Code:
this.desktop_mc._x Stage.width 2;
this.desktop_mc._y Stage.height 2
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 29-06-2006, 22:58   #10 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.649
also wenn die regpoints alle in der mitte liegen, ist das doch sogar die einfachste möglichkeit die MCs zu zentrieren.
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 29-06-2006, 23:01   #11 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Hehe! Stimmt
Aber nur zum mittig Possen
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 29-06-2006, 23:35   #12 (permalink)
...
 
Benutzerbild von flash bier
 
Registriert seit: Nov 2001
Beiträge: 1.227
Ich glaube Timo meint das so:
Bsp mit 2 Weckern:
Wecker1 sitzt bei x = 300 und Wecker2 sitzt bei x=600;
Wenn die RegPoints der Wecker nun mittig sitzen wäre nun die Mitte der beiden Wecker bei x = 450, und das soll in die Mitte der Stage!!
Also müsste der desktop_mc auf x = Stage._width/2 - 450 !!!

Hier ein Script, welches das ganze auf der Stage ausrichtet, wenn die RegPoints der Wecker links oben sitzen würden (die Info dass sie in der Mitte sitzen kam etwas zu spät.) Das Script kann auch verschieden große MCs beinhalten... Die Wecker dürfte also auch unterschiedlich groß sein ....

ActionScript:
  1. function centerStage() {
  2.     min_x = undefined;
  3.     min_y = undefined;
  4.     max_x = undefined;
  5.     max_y = undefined;
  6.    
  7.     // ermitteln der Grenzwerte der beinhalteten MovieClips
  8.     for (name in MC) {
  9.     if (typeof (MC[name]) == "movieclip") {
  10.         temp = MC[name];
  11.         if (temp._x < min_x || min_x == undefined){
  12.             min_x = temp._x;
  13.         }
  14.         if (temp._y < min_y || min_y == undefined){
  15.             min_y = temp._y
  16.         }
  17.         if((temp._x + temp._width) > max_x || max_x == undefined){
  18.             max_x = temp._x + temp._width;
  19.         }
  20.         if((temp._y + temp._height) > max_y || max_y == undefined){
  21.             max_y =temp._y + temp._height;
  22.         }
  23.         // trace ("MovieClip "+name+" hat die Koordinaten x/y:"+MC[name]._x+"/"+MC[name]._y+" Breite/Höhe: "+MC[name]._width+"/"+MC[name]._height);
  24.       }
  25.     }
  26.    
  27.     // generiert eine BOX (nur zur kontrolle)
  28.     MC.lineStyle(1,0x000000,100);
  29.     MC.moveTo(min_x,min_y);
  30.     MC.lineTo(max_x,min_y);
  31.     MC.lineTo(max_x,max_y);
  32.     MC.lineTo(min_x,max_y);
  33.     MC.lineTo(min_x, min_y);
  34.    
  35.     // hier die eigentliche Positionierung
  36.     MC._x =Stage.width/2 - min_x - (max_x-min_x)/2 ;
  37.     MC._y =Stage.height/2 - min_y - (max_y-min_y)/2 ;
  38.    
  39. }

Hoffe, ich hab mir hier nicht umsonst die Mühe gemacht?!

MfG flash bier
__________________
Schweig oder sprich Worte, die besser sind als Schweigen !
flash bier ist offline   Mit Zitat antworten
Alt 29-06-2006, 23:40   #13 (permalink)
Pixelschieber
 
Registriert seit: Aug 2004
Ort: Berlin
Beiträge: 41
Hallo flash bier! Richtig, vom Prinzip hast Du's richtig verstanden! werd mal versuchen dein code zu interpretieren und eizubauen... ich melde mich gleich nochmal obs eklappt hat, danke schonmal für den Ansatz!
Timo S. ist offline   Mit Zitat antworten
Alt 30-06-2006, 00:00   #14 (permalink)
Pixelschieber
 
Registriert seit: Aug 2004
Ort: Berlin
Beiträge: 41
Ok, ich glaub das ist der richtige Ansatz, mit deinem Script schaut so aus:

(Ich experimentiere gerad, um die verschiebung auszugleichen, frage mich allerindgs noch wie. Bei gleichgroßen "weckern" gehts mit einer addition... aber bei verschieden großen? hmmm!!!)

soweit schon mal vielen Dank! Auch für die hilfsbereitschaft von Euch!
Angehängte Grafiken
Dateityp: jpg screen-3.jpg (31,5 KB, 11x aufgerufen)
Timo S. ist offline   Mit Zitat antworten
Alt 30-06-2006, 00:03   #15 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Zitat:
Zitat von Timo S.
also ums nochmal klarzustellen: ich möchte den gsammten desktop mit alle seinen weckern zentrieren, als ganzes, nicht alle wecker in die mitte, das die sich dort überlagern. sondern die wecker als gesammte "benutzte "fläche nehmen und zentrieren..
Bin von dem augegangen, und des hört sich so an als obs einen Desktop_mc geben würde der zentriert werden soll!
P.S. Für Blöd_Säcke wie mich kannst nicht evtl. einen Screenshot machen wie es aussehen sollte
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"

Geändert von RustyCake (30-06-2006 um 00:06 Uhr)
RustyCake 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:55 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele