Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-04-2006, 20:38   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
Angry Drag & Drop

Hallo Ihr,

habe einen Button, der bei <click> einen Movie per attachMovieClip() und startDrag() an die Maus hängt:

Code:
on(press)
{
	_root.numberOfMovies = _root.numberOfMovies+1;
	i = _root.numberOfMovies;
	_root.attachMovie("mc_piece", "mcPiece" + i, i);
	path	= eval("_root.mcPiece" + i);
	path._x	= _root.mcGetANewPiece._x;
	path._y	= _root.mcGetANewPiece._y;
	path.startDrag();
}
Bei on(release) sollte nun eigentlich der neue Movieclip abgelegt werden. Klappt net. Auf dem Button liegt das Script

Code:
on(release)
{
	path.stopDrag();
}
und auch der neue Clip hat natürlich auch noch einen integrierten Button mit

Code:
on(press)
{
	_parent.startDrag();
}
on(release)
{
	_parent.stopDrag();
}
Eben, klappt net. Kann mir jemand sagen, was an meinem Ansatz verkehrt ist? Ich schmeiss gleich meinen Rechner aus dem Fenster!!!

Ich habe das ganze mal als fla angehängt, falls das hilft...
Angehängte Dateien
Dateityp: zip forum.zip (5,7 KB, 8x aufgerufen)

Geändert von olliX (06-04-2006 um 10:04 Uhr)
olliX ist offline   Mit Zitat antworten
Alt 06-04-2006, 12:30   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
das kommt mit deinem 2. drag in mc_piece in konflikt. deine programme löschen und das da in die hauptzeitleiste:
Code:
var numberOfMovies = 0;
//
mcGetANewPiece.onPress = function() {
	i = ++_root.numberOfMovies;
	path = _root.attachMovie("mc_piece", "mcPiece"+i, i);
	path._x = this._x;
	path._y = this._y;
	path.startDrag();
	this.onRelease = this.onReleaseOutside=function () {
		path.stopDrag();
		path.onPress = startDrag;
		path.onRelease = path.onReleaseOutside=stopDrag;
	};
};
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 07-04-2006, 10:23   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
DANKE :-)

Es funktioniert jetzt... Habe das alte Script zwar auf dem zu "dragenden" Movie lassen müssen, weil sonst nur noch der zuletzt hinzugefügte Movie verschiebbar war, aber das ist ja kein Problem, eben: es funzt!
olliX ist offline   Mit Zitat antworten
Alt 07-04-2006, 10:35   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
Na ja...

Jetzt klemmt es nur wo anders. Hing ein MC bisher an der Maus, ließ er sich mit den Pfeiltasten drehen. Das Script im _root:

Code:
checkTheKeys			= new Object();
checkTheKeys.onKeyDown 	= function ()
{
	if(_root.activeItem !== false)
	{
		if(Key.isDown(Key.RIGHT))
		{
			_root.activeItem.angle				= _root.activeItem.angle+5;
			_root.activeItem._rotation			= _root.activeItem.angle;
		}
		else if(Key.isDown(Key.LEFT))
		{
			_root.activeItem.angle				= _root.activeItem.angle-5;
			_root.activeItem._rotation			= _root.activeItem.angle;
		}
	}
}
Key.addListener(checkTheKeys);
Sobald ich aber nun eine Taste auf der Tastatur drücke, spricht die

Code:
this.onRelease = this.onReleaseOutside = function ()
Funktion drauf an und löst logischerweise den MC von der Maus, sprich, es ist auch kein weiteres Drehen mehr möglich. Habe jetzt x Möglichkeiten probiert(zum Beispiel eine Variable zu setzen, die true ist, wenn man ein Stück gedreht hat), dies auszuschliessen, aber es will net...

Hat jemand eine schnelle Idee, wie man das in den Griff bekommen könnte?
olliX ist offline   Mit Zitat antworten
Alt 07-04-2006, 11:20   #5 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
echt - tut sie das...

ein key.listener spricht auf einen btn.onPress event an???
pwdVergesser ist offline   Mit Zitat antworten
Alt 07-04-2006, 11:36   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
Sicher. Es sind keine anderen Scripte unterwegs, die sich da beissen könnten - bzw. ich habe es ganz konkret abgeprüft, bei gleichzeitig gedrückter Maustaste und dem Drücken einer Taste auf der Tastatur meldet sich ein trace() aus dem onRelease-Handler.
olliX ist offline   Mit Zitat antworten
Alt 07-04-2006, 12:25   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
wo und wann entscheidest du, wer _root.activeItem ist?


"..Sobald ich aber nun eine Taste auf der Tastatur drücke, spricht die
this.onRelease = this.onReleaseOutside = function ()
Funktion drauf an und löst logischerweise.."

das ist überhaupt nicht logisch, weil diese events von der maus und nicht von key's ausgelöst werden. wenn, dann hasst du irgend wo anderst einen kuttelmuddel eingebaut.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 07-04-2006, 13:14   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
OK,
"logischerweise" ist natürlich Quatsch, sonst hätte ich meine Probleme hier nicht.

Es werden jeweils Funktionen aufgerufen, z.B. die getNewItem(), welche dann _root.activeItem setzt (siehe unten). Genauso wird beim Release eine Funktion drop() aufgerufen, die _root.activeItem wieder auf false setzt. Diese Funktionen spielen aber eigentlich keine Rolle. Das an-die-Maus-hängen funktioniert, sobald die Pfeiltaste gedrückt wird, erhalte ich bereits das Tracing ("HALLO!!! Beim drücken der Pfeiltaste ausgelöst!").

Code:
_root.mcBtn.onPress = function() 
{
	code    = "item";
	path	= _root.getNewItem(code, this);
	
	this.onRelease = this.onReleaseOutside = function () 
	{
                trace("HALLO!!! Beim drücken der Pfeiltaste ausgelöst!");
		_root.drop(path);
	};
};

function getNewItem(code, path2Btn)
{
       k			= 1000 + _root.arrItems["x"].length;
        _root.attachMovie("mc_" + code, "mc" + code+ "-" + k, 1000 + k);
	path			= eval("_root.mc" + code + "-" + k);
       _root.activeItem	     = path;
        path._x			= path2Btn._x;
	path._y			= path2Btn._y;
	path.startDrag();
}
olliX ist offline   Mit Zitat antworten
Alt 07-04-2006, 13:31   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
Anbei noch mal die reduzierte Beispieldatei, ergänzt durch den Code. Ist vielleicht einfacher zu glauben, was da nicht geht...
Angehängte Dateien
Dateityp: zip forum 02.zip (6,1 KB, 4x aufgerufen)
olliX ist offline   Mit Zitat antworten
Alt 07-04-2006, 13:34   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..Das an-die-Maus-hängen funktioniert.."
wenn alles funktioniert, dann ist es ja gut ;-)
leider besagt das nur, das - onReleaseOutside - irgerndwo die maustaste losgelassen wurde.

lade doch bitte deine fla hoch und nicht irgendwelche programmschnipsel. wenn dein fehler daran liegen würde, dann hättest du ihn vermutlich selbst gefunden. folglich liegt er wo anderst.
Edit: ok, du warst schneller ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 07-04-2006, 13:59   #11 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
Code:
var numberOfMovies = 0;
var activeItem = null;
//
mcGetANewPiece.onPress = function() {
	i = ++_root.numberOfMovies;
	path = _root.attachMovie("mc_piece", "mcPiece"+i, i);
	path._x = this._x;
	path._y = this._y;
	path.onPress = function() {
		this.startDrag();
		activeItem = this;
	};
	path.onRelease = path.onReleaseOutside=function () {
		stopDrag();
		activeItem = null;
	};
	path.onPress();
	this.onRelease = this.onReleaseOutside=path.onRelease;
};
//
checkTheKeys = {};
checkTheKeys.onKeyDown = function() {
	if (activeItem) {
		if (Key.isDown(Key.RIGHT)) {
			activeItem._rotation += 5;
		} else if (Key.isDown(Key.LEFT)) {
			activeItem._rotation -= 5;
		}
	}
};
Key.addListener(checkTheKeys);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 08-04-2006, 12:42   #12 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
Ja... sorry... ich hatte da zu spät dran gedacht, dass das fla natürlich viel hilft. Bin aber immerhin selbst drauf gekommen. ;-)

Anyway,
habe den Code wie von Dir gepostet mal eingebaut - bei mir funzt es aber leider nicht. Nach dem ersten Tastendruck "löst" der onRelease-Handler aus, auch wenn der an der Maus hängende Clip hängen bleibt, sprich die stopDrag()-Funktion nicht wirkt. Auch seltsam.

Das aktuelle fla mit dem Code hängt noch mal dran.

Flash-Bug? - nur ein Event-Handler zur Zeit? Sprich Maus ODER Tastatur? :-(
Angehängte Dateien
Dateityp: zip forum 03.zip (5,6 KB, 9x aufgerufen)
olliX ist offline   Mit Zitat antworten
Alt 08-04-2006, 13:27   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
ditto sorry, habe dein letztes fla geladen:
- man kann kopien ziehen, es löst beim loslassen
- einen fläche anklicken und bei gedrückter maustaste via tastatur drehen

bei mir geht alles (auch mit flash7 getestet).
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 08-04-2006, 13:43   #14 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: south/west Germany :-)
Beiträge: 100
Habe es jetzt gerade selbst mal ausserhalb von Flash gestartet > also wohl mit aktuellerem Player, und siehe da, ES GEHT. Im Flash streikt es allerdings weiterhin. Aber gut, nicht wichtig.

Dir auf jeden Fall vielen vielen Dank für die Hilfe... :-)
olliX 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:50 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele