Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-04-2007, 20:25   #1 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
[STUFF] MovieClipGroup - Klasse

Ist vllt nicht ganz perfekt udn man könnte noch weitere funktionen reinbauen
aber vllt helf ich jemanden damit

mit der klasse kann man MCs gruppiren und diese als gruppe bewegen und rotieren lassen.

ActionScript:
  1. class MovieClipGroup
  2. {
  3.     private var _group:Array;
  4.    
  5.     public function MovieClipGroup() {
  6.         _group = [];
  7.        
  8.         var params:Object = arguments.length;
  9.         if(params != 0) {
  10.             for(var i:Number = 0; i < params; i++) {
  11.                 if(typeof(arguments[i]) == "movieclip") {
  12.                     _group.push(arguments[i]);
  13.                 }
  14.             }
  15.         }
  16.     }
  17.    
  18.     public function moveTo(x:Number,y:Number):Void {
  19.         var lX:Number = _group[0]._x;
  20.         var lY:Number = _group[0]._y;
  21.        
  22.         for(var i:Number = 0; i < _group.length; i++) {
  23.             if(lX > _group[i]._x) {
  24.                 lX = _group[i]._x;
  25.             }
  26.             if(lY > _group[i]._y) {
  27.                 lY = _group[i]._y;
  28.             }
  29.         }
  30.        
  31.         for(var i:Number = 0; i < _group.length; i++) {
  32.             _group[i]._x += (x - lX);
  33.             _group[i]._y += (y - lY);
  34.         }
  35.     }
  36.    
  37.     public function rotateTo(m:Array, angle:Number):Void {   
  38.         for(var i:Number = 0; i < _group.length; i++) {
  39.             var a:Object = {x: m[0], y: m[1]};
  40.             var obj:MovieClip = _group[i];
  41.            
  42.             obj.globalToLocal(a);
  43.             obj._rotation += angle;
  44.             obj.localToGlobal(a);
  45.             obj._x += m[0] - a.x;
  46.             obj._y += m[1] - a.y;
  47.         }
  48.     }
  49.    
  50.     public function addClip(clip:MovieClip):Void {
  51.         _group.push(clip);
  52.     }
  53.    
  54.     public function addClipAt(clip:MovieClip,i:Number):Void {
  55.         var tmp:Array = [];
  56.         for(var j:Number = 0; j < (_group.length + 1); j++){
  57.             if(j < i) tmp.push(_group[j]);
  58.            
  59.             else if(j == i) tmp.push(clip);
  60.            
  61.             else tmp.push(_group[j-1]);
  62.         }
  63.         _group = tmp;
  64.     }
  65.    
  66.     public function removeAt(i:Number):Void {
  67.         var tmp:Array = [];
  68.         for(var j:Number = 0; j < _group.length; j++) {
  69.             if(j != i) {
  70.                 tmp.push(_group[j]);
  71.             }
  72.         }
  73.         _group = tmp;
  74.     }
  75.    
  76.     public function clear():Void {
  77.         _group = [];
  78.     }
  79.    
  80.     public function getClipAt(i:Number):MovieClip {
  81.         return _group[i];
  82.     }
  83.    
  84.     public function getGroup():Array {
  85.         return _group;
  86.     }
  87. };

Funktionen:
ActionScript:
  1. // konstruktor
  2. // parameter optional
  3. new MovieClipGroup([para1,para2,...])
  4.  
  5. moveTo(x:Number, y:Number) : Void;
  6.  
  7. // [x,y] ist der Mittelpunkt um den rotiert wird.
  8. rotateTo([x,y]:Array,angle:Number) : Void;
  9.  
  10. addClip(clip:MovieClip) : Void;
  11. addClipAt(clip:MovieClip, index:Number) : Void;
  12.  
  13. removeAt(index:Number) : Void;
  14. clear() : Void;
  15.  
  16. getClipAt(index:Number) : MovieClip;
  17. // oder getGroup()[index:Number];
  18. getGroup():Array;

viel spaß damit

edit =>
so jetz sind aber hoffentlich keine fehler mehr drin ne
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi

Geändert von _crypto_ (17-04-2007 um 20:36 Uhr)
_crypto_ ist offline   Mit Zitat antworten
Alt 17-04-2007, 20:33   #2 (permalink)
backToThe._roots
 
Benutzerbild von Blax_ed
 
Registriert seit: Feb 2003
Ort: Ebnat-Kappel [CH]
Beiträge: 1.571
Zitat:
Zitat von _crypto_ Beitrag anzeigen
Ist vllt nicht ganz perfekt
PHP-Code:
moveTo(x:Numbery:Numver) : Void
erster!

haste noch ne demo fla ? oder ..
__________________
Cheers,
Flow!

Geändert von Blax_ed (17-04-2007 um 20:44 Uhr)
Blax_ed ist offline   Mit Zitat antworten
Alt 17-04-2007, 20:56   #3 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Die Methode moveTo müsste man eventuell umschreiben da man dort auch mit "localToGLobal" und "globalToLocal" arbeiten muss.


Das würde ich auch ändern:
PHP-Code:
var params:Object arguments.length;        
if(
params != 0
{
//... 
in:
PHP-Code:
if( arguments.length 
Bei der Methode addClip sollte man eventuell prüfen ob der MC nicht schon vorhanden ist.

Für die Methoden "addClipAt" und "removeAt" solltest du dir mal die Methode "Array.splice" angucken.

Insgesamt würde ich anstelle von so einer Klasse, wenn man es anders machen kann, lieber alles so aufbauen das ich die Objekte in einem Container (MovieClip) lege und diesen rotiere/ verschiebe.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 17-04-2007, 21:02   #4 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
ja das mit dem container is schon richtig.
aber aus diesem grunde hab ihc ja mal so ansatzweise angefangen eben
einen gruppenMC dynmaishc erstellbar zu machen.

wenn du jetz 5 oder mehr MCs aufer bühne hast dann bekommst du die ja
nicht in einen Container rein oder? wenn ja dann wäre es mir neu und die
klasse wäre überflüssig
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ ist offline   Mit Zitat antworten
Alt 17-04-2007, 21:09   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Zitat:
wenn du jetz 5 oder mehr MCs aufer bühne hast dann bekommst du die ja
nicht in einen Container rein oder?
Richtig.
Darum vorher überlegen dann erst programmieren.
__________________
ERROR: Signature is too large
rendner[i] 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 18:33 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele