Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-06-2010, 17:13   #1 (permalink)
Ganz ohne Titel
 
Registriert seit: Jul 2002
Ort: Marburg
Beiträge: 173
flexibler ankerpunkt und rotation eines movieclips

hallöchen,

eine sache bereitet mir gerade etwas kopfzerbrechen. oder vielmehr die mathematik dahinter.

ich habe mal eine "interaktive" skizze gebaut, damit ich nicht lange erklären muss und hoffentlich jeder versteht

http://www.here2stay.com/drehung.swf

es geht darum, dass ich gerne einen mc um genau den punkt drehen lassen möchte, wo mit der maus geklickt wird.
in meinem beispiel funktioniert das beim ersten mal auch tadellos, aber anschließend gerät das koordinatensystem durch die rotation in schieflage und meine simple milchmdächenrechnung greift nicht mehr

hier noch ganz kurz mein bisheriges script dahinter:
PHP-Code:
// dummy = container mc
// dummy.box = eigentlicher clip (grafik)

dummy.onPress = function() {
    
    var 
mx this._xmouse;
    var 
my this._ymouse;
    
    
this.box._x -= mx;
    
this.box._y -= my;

    
this._x += mx;
    
this._y += my;
    
    
this.pressed true;
    
}

dummy.onRelease dummy.onReleaseOutside = function() {

    
this.pressed false;

}

dummy.onEnterFrame = function() {
    
    if (
this.pressed) {
        
        
this._rotation += 1;
        
    }
    


ich hoffe, was ich meine ist klar geworden. im prinzip benötige ich eine lösung für "positionierung des ankerpunktes" inkl. der ganzen sinus-/cosinus-berechnungen um die positionen im gedrehten koordinatensystem wieder zu rekonstruieren

hat irgendjemand sowas schon mal gemacht oder hat ansätze?

besten dank und schönen gruß
felix
here2stay ist offline   Mit Zitat antworten
Alt 20-06-2010, 12:37   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.864
in AS2:
ActionScript:
  1. //code liegt bei mir in der Hauptzeitleiste, also nicht direkt auf dem Objekt
  2. import flash.geom.Point;
  3.  
  4. function rotateAroundCenter(target:MovieClip, angle:Number, isRad:Boolean)
  5. {
  6.     var bounds:Object = target.getBounds(target);
  7.     var center:Point = new Point((bounds.xMin+bounds.xMax)/2,(bounds.yMin+bounds.yMax)/2);
  8.  
  9.     rotateAroundPoint(target, angle, isRad, center, false);
  10. }
  11.  
  12. function rotateAroundPoint(target:MovieClip, angle:Number, isRad:Boolean, rotationPoint:Point, rpIsGlobal:Boolean)
  13. {
  14.     var aRad:Number;
  15.     if(!isRad){
  16.         aRad = angle * Math.PI/180;
  17.     }else{
  18.         aRad = angle;
  19.         angle *= 180/Math.PI;
  20.     }
  21.        
  22.     var rp:Point = new Point(0,0);
  23.     if(rotationPoint && !rotationPoint.equals(rp)){
  24.        
  25.         rp = rotationPoint.clone();
  26.         if(!rpIsGlobal){
  27.             target.localToGlobal(rp);
  28.         }
  29.         if(target._parent != _root){
  30.             target._parent.globalToLocal(rp);
  31.         }
  32.        
  33.         var ox:Number = rp.x - target._x;
  34.         var oy:Number = rp.y - target._y;
  35.        
  36.         var d:Number = Math.sqrt(ox*ox+oy*oy);
  37.         var a:Number = Math.atan2(oy,ox) + aRad;
  38.        
  39.         target._x = (rp.x - Math.cos(a)*d);
  40.         target._y = (rp.y - Math.sin(a)*d);
  41.     }
  42.  
  43.     target._rotation += angle; 
  44. }
  45.  
  46. dummy.onPress = function() {
  47.     this.rp = new Point(_root._xmouse, _root._ymouse);
  48.     this.pressed = true;
  49. }
  50.  
  51. dummy.onRelease = dummy.onReleaseOutside = function() {
  52.     this.pressed = false;
  53. }
  54.  
  55. dummy.onEnterFrame = function() {
  56.     if(this.pressed) {
  57.         rotateAroundPoint(dummy.box, 1, false, this.rp, true);
  58.     }else{
  59.         rotateAroundCenter(dummy.box, 1, false);
  60.     }
  61. }

AS3 hab ich hier mal gebaut: Parent aus Klasse / Funktion ansprechen
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (20-06-2010 um 12:41 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 21-06-2010, 08:58   #3 (permalink)
Ganz ohne Titel
 
Registriert seit: Jul 2002
Ort: Marburg
Beiträge: 173
super! das es mit der matrx in as3 so einfach geht, wusste ich mal wieder nicht kleiner wink mit dem zaunpfahl dahin, hätte auch gereicht danke dir vielmals!
here2stay ist offline   Mit Zitat antworten
Alt 22-06-2010, 11:58   #4 (permalink)
Ganz ohne Titel
 
Registriert seit: Jul 2002
Ort: Marburg
Beiträge: 173
mittlerweile bin ich durch zufall auch noch auf eine andere lösung gestoßen... das ganze funktioniert praktisch nur mit localToGlobal bzw globalToLocal... auch ganz nett

as2:
Dynamic MovieClip Registration with AS2 - darron schall

as3:
Oscar Trelles - Interaction Architect, Flash Developer

wurde an anderer stelle hier auch schon im forum verlinkt, aber da ich es über die suche nicht gefunden habe, füge ich es hier der vollständigkeithalber nochmal an
here2stay ist offline   Mit Zitat antworten
Alt 22-06-2010, 13:25   #5 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.864
ey, danke für die Links, hatte ich bisher auch nicht gekannt.
ist ein genial einfacher Ansatz.

ich werd am WE mal nen Performancevergleich zu meinem Code mit der Matrix machen. bin echt gespannt.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 18-07-2010, 03:43   #6 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.864
kurzer Nachtrag, für alle die es interessiert:
hatte den Post leider vergessen. bin erst durch einen anderen wieder daran erinnert worder.

ich wollte ja einen Vergleich zu meiner Variante mit transform.matrix machen.
mein Ergebnis: die Variante mit der transform.matrix war im Durchschnitt um ~50% langsamer als die zuletzt verlinkte.

getestet hab ich 50 Durchläufe a 10000 drehungen desselben Objektes.
transform.matrix: ~90ms/10000 drehungen.
verschieben: ~60ms/10000 drehungen.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Aus der Klasse eines MovieClips auf ein Objekt des MovieClips zugreifen... netterkerl1981 ActionScript 3 4 11-12-2008 14:50
Merkwürdiges Verhalten einer function (Rotation-MovieClips) piXeLfanatiker ActionScript 2 2 03-06-2008 13:18
Rotation eines Movieclips ausgeben lassen CosmicBear Flash Einsteiger 15 06-03-2006 21:53
Rotation von 5 MovieClips um eine Elipse cyberjack ActionScript 1 6 18-12-2004 19:08
MovieClips und Rotation Downy ActionScript 1 9 11-06-2003 08:28


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele