• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-03-2009, 17:45   #1 (permalink)
Padawan
 
Benutzerbild von Seebold
 
Registriert seit: Dec 2005
Ort: Hannover
Beiträge: 75
Mouse-Events stoppen

Hallo liebes Forum,

bei meinem Schießbuden-Spiel gibt es eine Uhr mit einem animierten Pendel. Trifft man das Pendel, so bekommt man einen Zeitbonus. Um es etwas schwieriger zu machen, befinden sich hinter dem Pendel Plüschtiere, die man nicht treffen sollte.

Ich haben ein Fadenkreuz, dessen Mitte ich als HitTest-Koordinate wähle. Aufruf bei Pendel und Plüschtier erfolgt so:
Code:
	function onMouseDown() {
		point = _root.mc_fadenkreuz.getGlobalLoc();
		if (this.hitTest(point.x, point.y, true)) {
			this.gotoAndPlay("getroffen");
		}
	}
Das klappt auch soweit ganz gut, nur dass die Schlagkraft meines Luftgewehrs das Pendel durchschlägt und trotzdem das Plüschtier trifft. Eigentlich müsste es so sein, dass mein "mouseDown"-Event vom vordersten MC abgefangen und ausgewertet werden sollte und dann nicht weitergeleitet wird. Bei Director z.B. ist dass automatisch so, wenn ich anderes will muss ich am Ende "pass" schreiben.

Gibt es eine Möglichkeit, die Weitergabe des Events zu stoppen? Es könnt u.U. auch helfen, festzustellen, ob sich vor einem Objekt ein anderes befindet. Das müsset aber auf die Form rücksicht nehmen und nicht den Begrenzungsrahmen zugrunde legen.

Hat jemand eine Idee?
Seebold ist offline   Mit Zitat antworten
Alt 05-03-2009, 17:57   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
events werden in AS2 nicht weiter gegeben:
_root.mc_bär_dahinter.onMouseDown = function() {..
_root.mc_pendel.onMouseDown = function() {..
wenn mc_pendel vor mc_bär_dahinter steht, dann bekommt der bär kein event mehr ab.

du benützt aber garkein maus-event, sondern testets mit hitTest.
dann bist du auch selbst dafür verantwortlich, was da passieren soll.
Code:
_root.mc_fadenkreuz.onMouseUp = function() {
  var point = this.getGlobalLoc();
  if (mc_pendel.hitTest(point.x, point.y, true)) {
    mc_pendel.gotoAndPlay("getroffen");
  } else if (mc_bär_dahinter.hitTest(point.x, point.y, true)) {
    //
  }
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (05-03-2009 um 18:02 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 06-03-2009, 10:34   #3 (permalink)
Padawan
 
Benutzerbild von Seebold
 
Registriert seit: Dec 2005
Ort: Hannover
Beiträge: 75
Ja stimmt und Nein... Wenn ich allen MC einen "onMouseDown"-Handler gebe und diesen etwas tracen lasse, dann reagieren alle und nicht nur der, auf dem ich die Maus klicke; also wird das Event doch weitergegeben.

Aber ansonsten hast Du recht. Ich machen einen HitTest, dieser wird in der Anordnung von oben nach unten abgearbeitet. Als letztes reagiert _root. Ich habe nun eine Variable eingeführt, die beim ersten "hit" auf false geschaltet wird. Eine Abfrage in allen MCs (resp. in der Klasse) verhindert, dass die Anweisung ausgeführt wird, wenn die Variable == false ist.

Die Variante lässt sich im Übrigen prima mit einem Delay vereinbaren, das dazu dient, dass man nicht wie mit einem Maschinengewehr schießen kann. Mit dem Umschalten der Variable wird ein Intervall gestartet, das nach 500 Millisekunden die Variable wieder auf true setzt. Zwei Aufgaben und eine Lösung

Danke und Grüße
Seebold ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
event, mouse, mousedown, pass, stoppen

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 23:07 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele