Objekt mit Maus verschieben, zwei Fragen

Jan-Frederik Stieler

Monsterator
Moderator
Hallo,
hab ein kleine Problem wa swarscheinlich auch recht popelig ist :) .
Und zwar möchte ich ein Objekt mit dem Mauszeiger verschieben können, das klappt auch. Aber wie bekomme ich den nun den Mauszeiger wieder von dem Objekt los?
Und das Objekt springt beim Klicken immer zum Mittelpunkt. Kann man das auch irgendwie umgehen.

Hier noch das AS mit dem ich das hinbekommen habe:
Code:
on (press){
this.onEnterFrame = function() {
	this._x = _root._xmouse;
}}

Ich muß warscheinlich die Funktion einfach wieder entladen. Nur wie mach ich das?

Viele Grüße
 
Zuletzt bearbeitet:
Hi,

1. könntest Du beim onRelease/onReleaseOutside die onEnterFrame-Methode einfach wieder löschen:
Code:
on(release, releaseOutside) {
    delete this.onEnterFrame;
}
Um das "Springen" zu vermeiden, müsstest Du zu Beginn des Verschiebens den Abstand zum Ankerpunkt des Objekts merken und als Ausgleich zu den Koordinaten hinzufügen.

2. Würde es mit der startDrag-Methode, die sogar ein Flag für die Verankerung in der MC-Mitte (siehe Referenz) mitbringt, womöglich eleganter gehen :
Code:
on(press) {
    this.startDrag(false);
}

on(release, releaseOutside) {
    this.stopDrag();
}

Gruß
.
 
Mh. Dein Code ist recht umständlich. Versuchs mal so:
Code:
on (press) {
	this.startDrag();
}
on (release) {
	this.stopDrag();
}
 
Zuletzt bearbeitet:
Hi,
das ist natürlich intelligenter. Dank an euch.
Wo besteht den der Unterschied drinnen wenn ich this.startDrag(true); oder das true weglasse?
Ein weiteres Problem was ich nun hab ist das ich das MC ja nur auf der X-Achse bewegen möchte. Das hab ich so versucht umzusetzen:
Code:
on (press) {
startDrag(this,true,550,this._y,550,this._y);
}
on (release) {
stopDrag();
}
Aber dann springt mir das MC ja zur Stelle 550 was ich nicht möchte sondern dahin wo sich die Mausbefindet. Oder beantwortet das schon meine Frage, also das ich die Mausposition abfragen muß? ISt doch etwas mit Kanonen auf Spatzen geschossen würde ich jetzt meinen.
Das weitere ist das ich es nicht hinbekomme das MC über einen Instanznamen bei der Variante zu identifizieren. Bekomme immer einen Syntaxfehler.

Gruß
 
Wo besteht den der Unterschied drinnen wenn ich this.startDrag(true); oder das true weglasse?
Ein Blick in die Referenz hätte Dir verraten, dass es sich um das besagte "Snap-Flag" handelt: Ist es auf true gesetzt, springt der MC mit seinem Mittelpunkt genau an die Mausposition.

Aber dann springt mir das MC ja zur Stelle 550
Ist klar, wenn Du einen horizontalen Bereich von 550 bis 550 angibst. ;) Wenn Du das Ding horizontal verschieben willst, musst Du den gesamten Bühnenbereich angeben:
Code:
this.startDrag(true, 0, this._y, Stage.width, this._y);

Gruß
.
 
Hi,
ich hab in die Referenz geschaut. Nur stand da drinnen das es eben einen boolschen Wert gibt eben true und false aber übers weglassen stand da nichts. und bei mir passiert da eben das gleiche.
Nun mein Bühnenbereich ist ja 550 breit. Aber ich muß gestehen das ich noch nicht so ganz kapiert habe. Besagt die Zahl einen ganz bestimmten Punkt auf der Bühne? Also z.B vom Bühnenrand links sind 550 der rechte Rand. Oder ist das eine Größe?
Desweiteren funktioniert das
Code:
this.startDrag(true, 0, this._y, Stage.width, this._y);
bei mir nicht. Das NC sprint irgendwo ins Nirvana.
Genauso wird der MC anscheinend nicht mehr erkannt wenn ich das "this" durch den Instanznamen ersetze.
 
Hi,

die von Dir genannten Probleme können daraus resultieren, dass wir von unterschiedlichen Setups ausgegangen sind: Ich bin von einem MovieClip-Objekt ausgegangen, das auf der Hauptzeitleiste (_root) sitzt. Wenn es sich bei Deinem Objekt um ein Schaltflächensymbol handelt und/oder besagtes Objekt auf einer tiefer geschachtelten Zeitleiste sitzt, müsste man Syntax, Adressierung und Parameter ggf. anpassen.

Es ist daher immer ratsam, so viel (und so exakt wie möglich) von der jeweiligen Umgebung preiszugeben ... oder gleich die betreffende .fla mitzuschicken. ;)

Generell:
- die Positionierungsparameter dieser Methode sind "von"-"bis"-Werte. Gibst Du horizontal z.B. 0 und 550 an, so kann das Objekt auf der lokalen Zeitleiste von Position 0 bis 550 verschoben werden.​
- Wenn es sich bei Deinem Objekt um einen MovieClip handelt, bezieht sich "this" im Moment des Aufrufs auf die Zeitleiste dieses MC. Ein Objekt mit dem selben Instanznamen wird sich auf dieser Zeitleiste in den meisten Fällen nicht befinden.​

Gruß
.
 
Hi,
also ich hab nochmal alles neu angelegt udn anscheinend war das mal wieder so ein merkwürdiger Flashbug. Weil jetzt gehts.
Aber ich hab das MC jetzt mal verdoppelt und eins davon als Schaltfläche definiert und nun verschiebt die Schaltfläche beide MC wogegen das reine MC nur sich selbst verschiebt.
Aber nochmal eine direkte Frage: wie kann ich den ein MC direkt über den Instanznamen ansprechen? Den das this einfach durch den Instanznamen zu ersetzen klapp ja nicht.

Viele Grüße

PS: Ich weiß das sind alles Fragen die sich auf rudimentäres Wissen zu AS beziehen, nur finde ich da teilweise die Fragen zu auch nicht in meinem AS Buch und ich finde auf der anderen Seite auch nur bedingt Zeit mich mit AS zu beschäftigen. Desweiteren tue ich mich was Programiersprachen betrift auch sehr schwer und verstehe viele Dinge einfach nicht. Mein Kopf arbeitet da vielleicht etwas anders :) (Gestalter eben).
 
Hi,
  • Ansprechen eines MCs von der Zeitleiste aus, auf der dieser MC sitzt:
    Instanzname

  • Ansprechen eines MC von einer Ereignisfunktion auf der Instanz dieses MCs aus (z.B. "on(press)":
    this

  • Ansprechen einer Schaltfläche von der Zeitleiste aus, auf der diese Schaltfläche sitzt:
    Instanzname

  • Ansprechen einer Schaltfläche von einer Ereignisfunktion auf der Instanz dieser Schaltfläche aus (z.B. "on(press)":
    Instanzname
Da Schaltflächen in dem Sinne keine eigene Zeitleiste haben, landest Du auch innerhalb Ereignisfunktionen (allerdings nur in denen, die auf der Instanz sitzen) nicht auf der Schaltflächenzeitleiste, sondern auf der jeweils übergeordneten.

Dieses grade für Anfänger verwirrende Verhalten ist einer der Gründe, warum ich grundsätzlich empfehle, ganz auf die Verwendung von Schaltflächensymbolen zu verzichten und ausschließlich MovieClip zu verwenden (mit denen man das selbe und noch viel mehr machen kann ;)).

Gruß
.
 
Danke für die ausführliche Auflistung!
eigentlich müsste ich doch das dann so schreiben können wenn ich auf de nInstanznamen verweisen möchte:
Code:
on (press) {
mauer2.startDrag(false, 0, this._y, Stage.width, this._y);
}
on (release) {
stopDrag();
}

Zumindest habe ich sowas in der Referenz gefunden. Aber da bewegt sich dann nichts mehr auf der Bühne.
 

Neue Beiträge

Zurück