Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-01-2008, 15:15   #1 (permalink)
keep cool...
 
Benutzerbild von cytrics
 
Registriert seit: Mar 2006
Ort: Erlangen
Beiträge: 356
Drag and Drop

Hy,

habe das Problem, dass ich Bilder aus eienm Array anzeige und diese einzeln mit Drag and Drop verschieben möchte.

Aber es bewegen sich immer nur alle zusammen...

Code:
import flash.events.MouseEvent;

// Liste der externen Bilder
var bilder:Array = ["Bilder/bild1.jpg", 
					"Bilder/bild2.png", 
					"Bilder/bild3.gif"];
var clip:MovieClip = new MovieClip();
addChild( clip );

for (var i = 0; i < bilder.length; i++)
{
	clip.addEventListener( MouseEvent.MOUSE_DOWN, myDownDrag );
	clip.addEventListener( MouseEvent.MOUSE_UP, myUpDrag );
	
	var loader:Loader = new Loader();
	var urlReq:URLRequest = new URLRequest(bilder[i]);
        loader.load(urlReq);
        clip.addChild(loader);	

	function myDownDrag(event:MouseEvent):void
	{
		clip.startDrag();		
	}
		
	function myUpDrag(event:MouseEvent):void
	{
		clip.stopDrag();	
	}
}
Was mache ich falsch?

Gruß
cytrics ist offline   Mit Zitat antworten
Alt 27-01-2008, 15:38   #2 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Bin mir hier bei der Syntax nicht ganz sicher.
PHP-Code:
for (var 0bilder.lengthi++)
{
  var 
loader:Loader = new Loader();
  var 
urlReq:URLRequest = new URLRequest(bilder[i]);
  
loader.load(urlReq);

  
loader.addEventListenerMouseEvent.MOUSE_DOWNmyDownDrag );
  
loader.addEventListenerMouseEvent.MOUSE_UPmyUpDrag );
  
clip.addChild(loader);
}

function 
myDownDrag(event:MouseEvent):void
{
  
event.target.startDrag();        
}
        
function 
myUpDrag(event:MouseEvent):void
{
  
event.target.stopDrag();    

Das Problem besteht aber darin, daß Du alle
Bilder in einen MovieClip lädst und auf diesen
den Drag-Befehl packst. Folglich müssen sich
ja alle mitbewegen.

gruß, gaspode

Geändert von gaspode (27-01-2008 um 15:41 Uhr)
gaspode ist offline   Mit Zitat antworten
Alt 27-01-2008, 15:41   #3 (permalink)
keep cool...
 
Benutzerbild von cytrics
 
Registriert seit: Mar 2006
Ort: Erlangen
Beiträge: 356
Hy,

d.h. ich muss für jedes Bild einen mc erstellen?

Danke


Gruß
cytrics ist offline   Mit Zitat antworten
Alt 27-01-2008, 15:50   #4 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Genau.

So war das zumindest »früher«.
Ich bin in AS3 noch nicht ganz so fit.
Da ist es doch irgendwie so, daß die
Loader-Instanzen selbst zu den Clips
werden wo etwas reingeladen wird?!

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 27-01-2008, 15:51   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ja, das würde Sinn machen. Oder eine eigene Klasse, die einen Loader kapselt. Diese könntest du in einem Array verwalten. Also, so als Idee.
Omega Psi ist offline   Mit Zitat antworten
Alt 27-01-2008, 15:54   #6 (permalink)
keep cool...
 
Benutzerbild von cytrics
 
Registriert seit: Mar 2006
Ort: Erlangen
Beiträge: 356
Hy,

danke für die Tipps...
Werde es einmal testen..


Grüße Olli
cytrics ist offline   Mit Zitat antworten
Alt 27-01-2008, 16:07   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Das Problem ist, dass Loader nicht die folgenden Funktionen unterstützt:
  • Sprite#startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void
  • Sprite#stopDrag():void
Deswegen würde ich das so angehen:
ActionScript:
  1. package {
  2.  
  3.   // imports
  4.  
  5.   public class InteractiveSprite {
  6.  
  7.     private var loader:Loader;
  8.  
  9.     public function InteractiveSprite() {
  10.       this.loader = new Loader();
  11.       // EventListener adden
  12.     }
  13.  
  14.     protected function eventListener(event:Event):void {
  15.       if ((event.type == MouseEvent.MOUSE_DOWN) &&
  16.               (event.target == this)) {
  17.         this.startDrag();
  18.       }
  19.       // Die anderen Listener analog
  20.     }
  21.  
  22.     /**
  23.      * Beispielkapselung einer Loader Funktion.
  24.      */
  25.     public function load(request:URLRequest, context:LoaderContext = null):void {
  26.       this.loader.load(request, context);
  27.     }
  28.   }
  29. }
Die anderen Funktionen analog implementieren, damit du einen saubere Kapselung erreichst.

So als Beispiel
Omega Psi ist offline   Mit Zitat antworten
Alt 27-01-2008, 16:22   #8 (permalink)
keep cool...
 
Benutzerbild von cytrics
 
Registriert seit: Mar 2006
Ort: Erlangen
Beiträge: 356
Hy,

danke Omega Psi,
so passt es, und die Kapselung ist in der Tat optimal..!!

Hast du noch einen Tipp, wie ich die Bilder dann verlinken kann?
Und die Position angeben...

(Fange gerade erst an mit AS 3...)


Danke


Gruß Olli
cytrics ist offline   Mit Zitat antworten
Alt 27-01-2008, 16:45   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Du gibst der Klasse ein Attribut url (private, Zugriff über get und set Methode). Die Position gibst du an wie bei jedem Sprite. Was meinst du denn mit Verlinkung?
Omega Psi ist offline   Mit Zitat antworten
Alt 27-01-2008, 17:38   #10 (permalink)
keep cool...
 
Benutzerbild von cytrics
 
Registriert seit: Mar 2006
Ort: Erlangen
Beiträge: 356
Hy,

ich möchte Thumbs anzeigen lassen und das Original auf Klick anzeigen...
Wie bei einer Galerie...


Grüße
cytrics ist offline   Mit Zitat antworten
Alt 27-01-2008, 17:47   #11 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
In der SWF oder ausserhalb? Wenn es in der SWF ist übergibst du am besten die Referenz auf einen Sprite/Loader, der das Bild anzeigen soll. Wenn es ausserhalb sein soll halt einen String, den du per navigateToURL (so meine ich zumindest) aufrufst.

Wenn du allerdings die Klasse so nimmst und einen MouseEvent.CLICK und einen MouseEvent.MOUSE_DOWN an dem ding registrierst, kann das zu einem unerwünschten Verhalten führen. Dann wäre es besser dem Sprite einen Anfasser mit zugeben, der das Drag'n Drop realisiert.
Omega Psi ist offline   Mit Zitat antworten
Alt 27-01-2008, 17:50   #12 (permalink)
keep cool...
 
Benutzerbild von cytrics
 
Registriert seit: Mar 2006
Ort: Erlangen
Beiträge: 356
Ok, danke...

Ich denke, ich lasse ein Fenster mit dem Bild aufgehen...
Sollte ausreichen...


Grüße Olli
cytrics 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 16:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele