Flashhilfe.de - Flash Community

Drag&Drop Componenten an falscher Stelle [Flash 10]

 


AntwortenRegistrieren Seite1  

reksi#1
Benutzerbild von reksi
Beiträge: 71
Wohnort: Berlin
Registriert: Jan 2004

12.05.2009, 10:30

Hallo
ich habe ein Problem mit dem DragManager!
Ich habe mit einmal eine Komponente Tile auf die Bühne gezogen, inder sich andere Komponenten befinden, welche später zum Draggen gedacht sind.
Diese bewegbaren Komponenten will ich auf ein Arbeitspanel platzieren können.
Beim Platzieren rutschen die Komponenten aber für nen paar Pixel in eine andere Richtung! Was mache ich da falsch? gibt es Fehler bei der Berechnung der Position? Probiere ja den Offset der auftritt, da der Ankerpunkt oben rechts hängt rauszurechnen!

Ein Zweites Problem wäre noch! Ich will nicht das meine Komponente die ich in der Tile drin habe verschwindet. Sie müsste dupliziert werden, was ich meiner Meinung auch mache
ActionScript:
1child=new UIComponent;


Wie kann man dieses Problem lösen?
Vielen Dank im Vorraus und über Antworten würde ich mich sehr sehr freuen!

So nun noch mein Quellcode:
ActionScript:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundColor="0x000000" width="1024" height="768" verticalAlign="middle" horizontalAlign="center">

<mx:Script>
<![CDATA[
import mx.controls.Image
import mx.core.DragSource;
import mx.core.UIComponent
import mx.events.DragEvent
import mx.managers.DragManager
import mx.effects.Resize;

private function doDragEnter(event:DragEvent):void
{
DragManager.acceptDragDrop(UIComponent(event.target));

}
private function doDragDrop(event:DragEvent):void
{

   var child:UIComponent;
   if(event.dragInitiator.parent==dropCanvas){
      child=event.dragInitiator as UIComponent;
   }else{
      child= new UIComponent();
      child=event.dragInitiator as UIComponent;      
      child.addEventListener(MouseEvent.MOUSE_DOWN,doDragStart);

   }   
   event.currentTarget.addChild(child);
   setPosition(child,event)
   CanvasBorder(0x1C5CC7,UIComponent(event.dragInitiator.parent));
}

private function setPosition(child:UIComponent,event:DragEvent):void{
   if(child.parent==dropCanvas){
      child.x = event.localX - (event.dragSource.dataForFormat("localX") as Number);
      child.y = event.localY - (event.dragSource.dataForFormat("localY") as Number);
      kollisionborder(child);         
   }
}

private function kollisionborder(child:UIComponent):void{
   var space:uint=10;
   if(child.x>dropCanvas.width-child.width-space){
      child.x=dropCanvas.width-child.width-space;
   }
   if(child.x<space){
      child.x=space;
   }
   if(child.y>dropCanvas.height-child.height-space){
      child.y=dropCanvas.height-child.height-space;
   }
   if(child.y<space){
      child.y=space;
   }
   kollisioncomponents(child);
   
}

private function kollisioncomponents(child:UIComponent):void{
}


private function doDragStart(event:MouseEvent):void{   
   var dragInitiator:UIComponent = event.currentTarget as UIComponent;
   var dragSource:DragSource = new DragSource();
   dragSource.addData(event.localX, "localX");
   dragSource.addData(event.localY, "localY");
   dragSource.addData(dragInitiator,"child");
   DragManager.doDrag(dragInitiator, dragSource, event);
   CanvasBorder(0xff0000,UIComponent(dragInitiator.parent));
}

private function CanvasBorder(color:Object,component:UIComponent):void{
   if(component==meinetollevbox){
      dropCanvas.setStyle("borderColor",color);
      meinetollevbox.setStyle("borderColor",0x1C5CC7);   
   }else{
      meinetollevbox.setStyle("borderColor",color);         
      dropCanvas.setStyle("borderColor",0x1C5CC7);
   }
}

]]>
</mx:Script>         
         <mx:Tile id="meinetollevbox" direction="vertical" height="500"  width="80"
                horizontalGap="10" verticalGap="15" backgroundColor="0x00ff00"
                paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10"    dragEnter="doDragEnter(event)"
   dragDrop="doDragDrop(event)" borderStyle="solid" cornerRadius="20" borderThickness="2" borderColor="0x1C5CC7"  x="110" y="110">

   <mx:Button id="testid" label="test1" mouseDown="doDragStart(event)"  x="20" y="30"/>
   <mx:Button label="test2" mouseDown="doDragStart(event)"  y="60" x="20"/>
   <mx:Button label="test3" mouseDown="doDragStart(event)"  y="90" x="20"/>
   <mx:Button label="test4" mouseDown="doDragStart(event)"  y="120" x="20"/>
   </mx:Tile>
<mx:Canvas id="dropCanvas" width="500" height="500" backgroundColor="0x333333" borderColor="0x1C5CC7" dragEnter="doDragEnter(event)" dragDrop="doDragDrop(event)" borderStyle="solid" cornerRadius="20" borderThickness="2" x="200" y="110">
</mx:Canvas>

</mx:Application>
Geändert von reksi am 12.05.09 um 10:31 Uhr
Werbung
Beiträge: 0
Registriert: Feb 2016


valuee#2
Benutzerbild von valuee
Beiträge: 133
Wohnort: Straight Outta Berlin-City
Registriert: Aug 2006

12.05.2009, 12:18

Ich hatte mal ein ähnliches Problem: Ich hatte ziemlich viele Komponenten und Grafiken die nicht mit ganzen Pixeln positioniert waren (also z.B. x=5,7 und y=0,2) Nach dem draggen ist das dann immer leicht gehüpft... sehr minimal, aber sichtbar und nicht wirklich schön. Gelöst hatte ich das, indem ich beim absetzen alle X,Y-Werte auf ganze Zahlen gerundet habe.

Dein zweites Problem verstehe ich nicht ganz. Der Aufruf new UIComponent() dupliziert jedenfalls keine Komponente, sondern erstellt eine neue Instanz
reksi#3
Benutzerbild von reksi
Beiträge: 71
Wohnort: Berlin
Registriert: Jan 2004

Themenautor/in

12.05.2009, 12:53

Danke werds mal ausprobieren!

und wie mache ich das dann? :S will halt das das Object in der Tile immer noch vorhanden ist damit es nochmal raufgezogen werden kann.

Mit freundlichen Grüßen
reksi

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2020 Sebastian Wichmann - Flashhilfe.de