Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-01-2009, 01:35   #1 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Erstellung einer komplexen Drag and Drop anwebdung mit hittest?

Hi,
Ich erstelle zur zeit eine ziemlich aufwendige Drag and Drop anwendung und habe noch nicht sehr viel erfahrung mit der hitTest Methode.

Meine anwendung besteht aus "zwei spalten".

-in der linken spalte befinden sich 20 MCs (jeder mc beinhaltet ein piktogramm), die vom benutzer gedragged werden können.
-in der rechten Spalte befinden sich n - MCs (je nach einstellung des benutzers sind 3-36 mcs vorhanden--> diese Anzahl kann der benutzer zur laufzeit festlegen)
An diesen MCs sollen die "Piktogramm-MCs" aus der linken Spalte haften bleiben.

Es muss jeder der verschiebbaren MCs (aus der linken spalte) an jedem MC der reechten spalte haften bleiben können.

Ich würde gern wissen, ob mein vorhaben allein mit der hitTest-Methode überhaupt realisierbar ist, da sehr viele "verschiebbare" objekte und "Haftpunkte" vorhanden sein werden???
Vielleicht hat jemand von euch sogar ein beispiel zur hand, indem nicht nur ein element,sondern mehrere, auf einem beliebigen "Haftpunkt" gedragged werden können
Hoffentlich kann mir jemand eine Antwort geben, bevor ich mir daran die Zähne ausbeiß ;-)
florist ist offline   Mit Zitat antworten
Alt 27-01-2009, 02:54   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
hitTest(..,false) prüft, ob ein punkt im umgebenden rechteck steht
hitTest(..,treu) prüft, ob ein punkt in der form steht

das hat soweit nichts mit verschiebbar und andocken und haftpunkten usw. zu tun.

ich denke, solche tests kannst du mehr als genug machen, ohne das flash zusammenbricht. und 36 mc's sind noch keine nennenswerte menge.
es kommt halt darauf an, was noch so alles zur gleichen zeit passieren soll. das sind je application andere bedingungen, die man insgesamt berücksichtigen muss.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 27-01-2009, 08:33   #3 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Zitat:
hitTest(..,false) prüft, ob ein punkt im umgebenden rechteck steht
hitTest(..,treu) prüft, ob ein punkt in der form steht

das hat soweit nichts mit verschiebbar und andocken und haftpunkten usw. zu tun.
genau das wollte ich sagen
...naja fast, bis auf
Zitat:
hitTest(...,treu)


Werd mich mal ranmachen und das ganze aufbauen, wenn ich überhaupt nicht weiterkomme, dann post ich wieder.

Danke schonmal!

Geändert von florist (27-01-2009 um 08:34 Uhr)
florist ist offline   Mit Zitat antworten
Alt 27-01-2009, 10:18   #4 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Jetzt hab ich doch schon ne kleine Frage, weil ich an einer Stelle nicht weiterkomme.

mein draggbares Objekt soll auf einem beliebigen von ~ 30 MCs haften bleiben.
Das hab ich auch schon hinbekommen.
Allerdings krieg eine Bedingung nicht hin!
habs so versucht:

if (wenn maus losgelassen wird und sich das "dragObjekt" über einem der 30 MCs befindet) {
--> ....hefte dich an...
} else {
--> ....lösche "dragObjekt"..
}

FOlgendes Skript liegt auf jedem der 30 "HaftMcs":
Code:
onClipEvent (mouseUp) {
	stopDrag();
	if (this.hitTest(dragObjekt )) {
		dragObjekt ._x = _x;
		dragObjekt ._y = _y;

	} else {
		trace("Objekt.."+ dragObjekt + "..leider daneben");
		dragObjekt.removeMovieClip();
	}
}
Kann sich das jemand mal kurz angucken, ich glaub ich steh aufm schlauch!
florist ist offline   Mit Zitat antworten
Alt 27-01-2009, 10:47   #5 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Uiuiui ... das scheint mir aber arg unelegant ... da würd ich ja eher sowas machen:

PHP-Code:
// die 30 Objekte liegen auf _root und heissen dt0 bis dt29:
function doesStick(mc:MovieClip):MovieClip {
  var 
stick:MovieClip null;  

  for(var 
i:Number=0i<30i++) {
    if(
mc.hitTest(_root["dt"+i]) === true) {
      
stick _root["dt"+i];
    }
  }
  return 
stick;
}

// -> Dann das Script für den MC der gedraggt wird:
mc.onPress = function():Void {
  
startDrag(this);
}

mc.onRelease mc.onReleaseOutside = function():Void {
  var 
dt:MovieClip doesStick(this);

  if(
dt !== null) {
    
trace("Ich habe den MC "+dt._name+" getroffen");
  } else {
    
trace("Ich habe keinen MC getroffen");
  }

ungetestet, aber müsste gehen eigentlich.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'

Geändert von readme.txt (27-01-2009 um 10:50 Uhr)
readme.txt ist offline   Mit Zitat antworten
Alt 27-01-2009, 11:56   #6 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Hab gerade deine Lösung versucht, allerdings bekomm ich eine Fehler ausgegeben

Zitat:
Szene=Szene 1, Ebene=as, Bild=1: Zeile 2: {' erwartet
function doesStick(ding:MovieClip):MovieClip {

Szene=Szene 1, Ebene=as, Bild=1: Zeile 11: Unerwartetes Auftreten von '}'
}
Ist das AS1 oder AS2? Ich benutze FlashMX!
Ich geh mal davon aus, das ist AS2.
Kannst du mir das "Übersetzen" :-)
Ich wollte mir das schon lang mal antun, da ich viele Beitrage nur in AS2 finde, ich aber nicht weiß, was z.B. ":" oder "Void()" in AS2 bedeuted.
Wär echt super!
florist ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:00   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
ist bis dahin egal, ob AS1 oder AS2
d.h. readme.txt hat AS2 elemente verwendet. AS2 kannst du ruhig immer angeschaltet lassen. es gibt nur ganz wenige dinge, die nur in AS1 gehen. p.s. AS2 heisst nicht automatisch OOP.

du musst ein } zu viel haben !

void heisst nichts.
tatsächlich nichts ;-) das bedeutet, das die funktion keinen wert mit return zurück gibt. baut man doch sowas ein, dann gibt der compiler eine fehlermeldung aus.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (27-01-2009 um 12:03 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:13   #8 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Zitat:
AS2 kannst du ruhig immer angeschaltet lassen.
Vielleicht täusch ich mich auch, aber wo kann ich in FlashMX AS2 "anschalten"?
das geht doch erst im MX 2004?

Also mit den klammern dachte ich auch zuerst, aber esstimmt alles hier nochmal das Script von readme.txt:

PHP-Code:
// die 30 Objekte liegen auf _root und heissen dt0 bis dt29:
function doesStick(ding:MovieClip):MovieClip {
  var 
stick:MovieClip null;  
  for(var 
i:Number=0i<30i++) {
    if(
ding.hitTest(_root["dt"+i]) === true) {
      
stick _root["dt"+i];
    }    
//end if
  
}   //end for
  
return stick;
}   
//end function

// -> Dann das Script für den MC der gedraggt wird:
ding.onPress = function():Void {
  
startDrag(this);


ding.onRelease ding.onReleaseOutside = function():Void {
  var 
dt:MovieClip doesStick(this);

  if(
dt !== null) {
    
trace("Ich habe den MC "+dt._name+" getroffen");
  } else {
    
trace("Ich habe keinen MC getroffen");
  }   
//end if
}  //end function

stop(); 
florist ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:17   #9 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Du musst nur die Typisierungen weglassen, dann ist das AS1 kompatibel:

PHP-Code:
// die 30 Objekte liegen auf _root und heissen dt0 bis dt29:
function doesStick(ding) {
  var 
stick null;  
  for(var 
i=0i<30i++) {
    if(
ding.hitTest(_root["dt"+i]) === true) {
      
stick _root["dt"+i];
    }    
//end if
  
}   //end for
  
return stick;
}   
//end function

// -> Dann das Script für den MC der gedraggt wird:
ding.onPress = function() {
  
startDrag(this);


ding.onRelease ding.onReleaseOutside = function() {
  var 
dt doesStick(this);

  if(
dt !== null) {
    
trace("Ich habe den MC "+dt._name+" getroffen");
  } else {
    
trace("Ich habe keinen MC getroffen");
  }   
//end if

  
stopDrag();
}  
//end function

stop(); 
Ansonsten: Wenn AS2 in MX geht (bin selbst nicht sicher gerade), dann kann man das unter "Einstellungen für Veröffentlichung" im Reiter "Flash" einstellen.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'

Geändert von readme.txt (27-01-2009 um 12:21 Uhr)
readme.txt ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:18   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
das geht schon seit flash6 ?
menü: datei/ einstellungen für veröffentlichungen ...
auf den flash-reiter klicken
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:26   #11 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
langsam, langsam...
Also, den Code werd ich gleich nochmal testen!

Ich arbeite jetzt gerade mit FLash MX (= Flash 6).
Hier gibt es keine Einstellungen, weder under den "Einstellungen für Veröffentlichungen", noch in den "Voreinstellungen".

Im reiter Flash lässt sich lediglich "ladereihenfolge"und "Flash Player version" (FlashPlayer - 6) einstellen.
florist ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:33   #12 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
Super, das skript funktioniert, Danke für die schnelle Hilfe, jetzt bau ich das ganze mal in mein tool ein und kombiniere es mit meiner "anheft"-funktion, yuhu!

@readme.txt:

Zitat:
Du musst nur die Typisierungen weglassen, dann ist das AS1 kompatibel:
Danke, das wollte ich wissen!
Das heißt ich muss in AS2 grundsätzlich den Typ einer Variablen angeben,richtig?muss oder kann?

Die "===" waren nicht beabsichtigt, oder ;-)
Zitat:
...hitTest(_root["dt"+i]) === true)
florist ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:36   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
habe kein flash6, bin von 5 auf 7 gesprungen ;-)

aber man kann von flash7 aus flash6 abspeichern und wenn da kein AS2 möglich wäre, er würde mäckern !?
dito beim erstellen des SWFs


typisierung kann muss aber nicht. wie geschrieben: AS2 ist nicht gleich OOP

=== ist kein versehen, schau doch in der hilfe nach
== gleich
=== identisch
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (27-01-2009 um 12:39 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:37   #14 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
@hgseib:

AS2 gibt es erst seit Flash MX 2004.
Und da kann man rückwirkend für
Flash MX auch AS2 einstellen. Aber
in Flash MX selber geht das noch nicht.

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 27-01-2009, 12:48   #15 (permalink)
langsam wirds
 
Registriert seit: Dec 2005
Ort: Nürnberg
Beiträge: 300
@ hgseib:

Zitat:
=== ist kein versehen, schau doch in der hilfe nach
== gleich
=== identisch
***ups*** ich muss weg...

Danke für eure Hilfe und die guten Tipps!
Ich hoffe, ich muss nicht nochmal auf euer wissen zurückgreifen...

------------------------
Grüßla flo
florist 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 02:07 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele