[as3.0]Lastig globalToLocal probleem

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Sanity11
  • Registratie: Januari 2004
  • Niet online
Hallo allemaal.

Ik wil een object inladen in en vervolgens draaien om een bepaald punt. Dit doe ik met de class DynamicMovie. Deze class maakt dit perfect mogelijk.

Om dit te testen heb ik een test class geprogrammeerd.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// ActionScript file
package classes
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.geom.Point;
    
    public class rotatietest extends MovieClip
    {
        private var rotate:DynamicMovie;
        private var graphic:Sprite; 
        private var container:DynamicMovie;
        private var center:Array = new Array(1);
        private var centerLoc:Point = new Point;
        
        public function rotatietest()
        {
            btnRotate.addEventListener(MouseEvent.MOUSE_DOWN, rotateObject);
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, changeCenter);
            
            graphic = new Sprite;
            
            graphic.graphics.beginFill(0x00FF00, 1);
            graphic.graphics.drawRect(100, 100, 100, 100);
            graphic.graphics.endFill();     
            
            center[0] = 150;
            center[1] = 150;
            
            rotate = new DynamicMovie;
            
            rotate.setRegistration(center[0], center[1]);
            
            rotate.addChild(graphic);
            
            addChild(rotate);
        }
        
        public function changeCenter(event:MouseEvent)
        {   
            centerLoc.x = rotate.mouseX;
            centerLoc.y = rotate.mouseY;
            
            trace(centerLoc.x);
            trace(centerLoc.y);
            
            rotate.localToGlobal(centerLoc);
            
            trace(centerLoc.x);
            trace(centerLoc.y);
            
            var centerPoint:Sprite = new Sprite;

            centerPoint.graphics.beginFill(0x00FFF0, 1);
            centerPoint.graphics.drawCircle(centerLoc.x, centerLoc.y, 5);
            centerPoint.graphics.endFill();
            
            rotate.setRegistration(centerLoc.x, centerLoc.y);
            
            rotate.addChild(centerPoint);
        }
        
        public function rotateObject(event:MouseEvent)
        {
            stage.removeEventListener(MouseEvent.MOUSE_DOWN, changeCenter);
            stage.addEventListener(MouseEvent.MOUSE_UP, addChangeCenter);
            rotate.rotation2 += 10;
        }
        
        public function addChangeCenter(event:MouseEvent)
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN, changeCenter);    
        }
    }
}


Dit werkt zoals verwacht. Maar ik wil in de uiteindelijke applicatie net iets anders. Ik wil het object roteren om het midden van een ander display object. Niet vanaf de muispositie op de image.

Om dit te verduidelijken een afbeelding:
Afbeeldingslocatie: http://www.diovisuals.com/forum/afbeelding11.jpg

Het midden van de tool (een crop tool) moet het centrum zijn waar de afbeelding rondom draait. Alleen ik weet niet hoe ik het midden van de crop tool (holder) kan overbrengen in de image?

Hmm. lastig uit te leggen.

Hier in ieder geval een stuk code uit de applicatie:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            var centX = (LTX + ((RTX - LTX) / 2));
            var centY = (LTY + ((LBY - RTY) / 2));
            
            center.width = 10;
            center.height = 10;

            center.x = centX;
            center.y = centY;
            
            centerPosition.x = centX;
            centerPosition.y = centY;
            
            localToGlobal(centerPosition);
            
            image.setRegistration(centerPosition.x, centerPosition.y);


De variabelen LTX, LTY, RTX, RTY, LBX, LBY, RBX, RBY zijn de posites van de hoeken van de holder voor de duidelijkheid.

Is er iemand die een techniek weet om dit voor elkaar te krijgen. Ik loop hier behoorlijk vast.

Alvast bedankt voor jullie reacties :).

www.diovisuals.co,


Acties:
  • 0 Henk 'm!

  • Sanity11
  • Registratie: Januari 2004
  • Niet online
Misschien kan ik het eenvoudiger uit proberen te leggen dan.

Ik heb een willekeurig punt op de stage. Om het nog makkelijker te maken, dit is x: 150 y:120. Met deze twee coordinaten teken ik een puntje op de stage, en een puntje in een DisplayObject welke op een willekeurige plek op de stage is geplaatst. Deze twee puntjes moeten precies op dezelfde plek komen.

code:
1
2
3
4
5
6
var centPos:Point = new Point;                         
centPos.x = 150;             
centPos.y = 120;                         
trace(centPos.x + ' ' + centPos.y);                         
image.globalToLocal(centPos);                         
trace(centPos.x + ' ' + centPos.y);


Hier moet de eerste trace toch een ander resultaat geven dan de eerste?!

www.diovisuals.co,