Drag&Drop Componenten an falscher Stelle [Flash 10]
| 12.05.2009, 10:30 | | Beiträge: 71 Wohnort: Berlin Registriert: Jan 2004
| Drag&Drop Componenten an falscher Stelle 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
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
| |
|
| 12.05.2009, 12:18 | Re1 | Beiträge: 123 Wohnort: Straight Outta
Berlin-City Registriert: Aug 2006
| 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 | |
| 12.05.2009, 12:53 | Re2 | Beiträge: 71 Wohnort: Berlin Registriert: Jan 2004
Themenautor/in
| 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 | |
| | | nicht sichtbar bei eingeloggten Mitgliedern | 
|
| | Themen Ähnliche Beiträge zum Thema | 26.09.2010 - nischu 28.10.2010 - nischu 10.11.2010 - Xoltec 03.01.2012 - dreidreisieben |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News 
31.01.12, 12:30#Jobs Wir suchen (freiberufliche) Flash Developer (m/w) in Köln/Aachen http://t.co/4WPsXPOA 20.01.12, 21:02#Jobs Flash-Projekt Produktkonfigurator http://t.co/qPlGSiPd 12.01.12, 18:50#Jobs Flash Freelancer für ca. 2 Wochen in München gesucht http://t.co/XpMJr5dv 10.01.12, 10:45#PureMVC vs #RobotLegs Performance Battle. PureMVC is significantly faster than RobotLegs in nearly every respect. http://t.co/324gWRAr 06.01.12, 21:37#Jobs Flash Developer in Hamburg gesucht http://t.co/hZgTZvHJ
Regeln & Bedingungen
|