| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| | ||[ PIXON ] || Registriert seit: Apr 2002
Beiträge: 364
| stagelistener reagiert auf movieclip click
Hallo! Ich habe ein kleines großes Problem ![]() Ich erstelle gerade eine Navigation in AS3 und sie will nicht so wie ich es will… Die Navigation ist wie folgt aufgebaut: Wenn ich mit der Maus über einen transparenten Movieclip fahre, wird dieser eingeblendet. In diesem Movieclip liegen 5 andere Movieclips, die „Buttons“. Wenn ich nun auf einen der Buttons klicke sollte ein Movieclip mit mehreren Bildern geladen werden, in denen man mit einem click auf die stage blättern kann. Die besagt stage click Funktion wird aber bereits beim click auf den Button ausgeführt. Beim 5 ten Button wird eine externe swf geladen. Das klappt auch irgendwie nicht ![]() Hier der Code: Code: package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.transitions.Tween;
import fl.transitions.easing.*;
public class IndexAs extends MovieClip
{
public var thumbgrid:MovieClip;
public function IndexAs()
{
thumbgrid.alpha = 0;
thumbgrid.addEventListener(MouseEvent.ROLL_OVER, mOver);
thumbgrid.addEventListener(MouseEvent.ROLL_OUT, mOut);
thumbgrid.addEventListener(MouseEvent.CLICK, clicked);
stage.addEventListener(MouseEvent.CLICK, sClick);
}
function clicked(e:MouseEvent):void
{
switch (e.target.name)
{
case "instance14" :
trace("1");
mOut();
break;
case "instance12" :
trace("2");
break;
case "instance10" :
trace("3");
break;
case "instance8" :
trace("4");
break;
case "instance3" :
loadAni();
break;
}
}
function mOver(e:MouseEvent):void
{
var tIn:Tween = new Tween(e.currentTarget,"alpha",Strong.easeOut,0,1,0.5,true);
}
function mOut(e:MouseEvent):void
{
var tOut:Tween = new Tween(e.currentTarget,"alpha",Strong.easeOut,1,0,0.5,true);
}
function loadAni(e:MouseEvent):void
{
trace("****");
}
function loadInit(e:Event):void
{
e.currentTarget.removeEventListener(Event.COMPLETE,loadInit);
if (currentContent)
{
removeChild(currentContent);
}
currentContent = DisplayObject(e.currentTarget.content);
addChild(currentContent);
}
function sClick(e:MouseEvent):void
{
trace("CLICK");
}
}
} Ich wäre für jede Hilfe sehr dankbar. |
| | |
| | #2 (permalink) |
| whatever Registriert seit: May 2008
Beiträge: 419
|
das müsste dir eigentlich einen ganzen haufen an fehlermeldungen entgegenballern weil da doch so einiges im argen ist. ich tippe mal darauf das du die flash gui nutzt ![]() bin mir nicht sicher ob ich das problem so richtig verstanden hab aber das problem kannst du eigentlich lösen wenn du als erste zeile in die clicked funktion folgendes einträgst... ActionScript:
überleg dir mal die gui zu wechseln, flashdevelop ist kostenlos und lässt flash verdammt alt aussehen was das programmieren angeht |
| | |
| | #3 (permalink) |
| | ||[ PIXON ] || Registriert seit: Apr 2002
Beiträge: 364
|
danke für die Antwort! ja ist die flash GUI möchte mich aber ungern in eine neue GUI reinfrickeln, weil die Präsentation schon am Freitag stehen muss. gibt es flashdevelop auch für mac?habe deinen vorschlag befolgt, jetzt funktionieren leider die cases nicht? |
| | |
| | #4 (permalink) |
| whatever Registriert seit: May 2008
Beiträge: 419
|
mmh, ja. versteh den ganzen sinn dahinter jetzt nicht so recht aber entfern die zeile mal wieder und änder den switch in e.currentTarget.name, vllt. geht das. ansonsten legt man normalerweise die listener direkt auf die buttons, mit dem stagelistener erspart man sich zwar ein haufen listener aber dafür wirds irgendwann ein ziemliches gefrickel. udn sauber is anderns |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Oct 2007
Beiträge: 434
|
Also warum der stage Listener reagiert, obwohl du deinen MovieClip anclickst ist nur logisch. Das ganze nennt sich Bubbling, sprich der Event wandert ausgehend vom auslösendem Objekt durch die komplette DisplayListe. Da gibts zwei Wege dies zu umgehen: 1. Du sorgst dafür, dass deine Listener nur dann aktiv sind, wenn sie es auch sein sollen. Es gibt in deinem Beispiel kein Grund, warum der stage Listener von Anfang an da sein muss, den kannst du ja auch erst dann hinzufügen, wenn er wirklich gebraucht wird, sprich in der Listener Funktion deines MovieClips. Es empfiehlt sich zusätzlich generell darauf zu achten, dass man Listener auch immer wieder entfernt, wenn sie nicht mehr gebraucht werden, ist vielleicht etwas mehr Arbeit, spart aber wahnsinnig viel Zeit bei der Fehlersuche insbesondere bei größeren Projekten. 2. Um das Event zu stoppen gibt es stopPropagation. target und currentTarget Vergleiche sind da nicht unbedingt zielführend, weil fehleranfällig. |
| | |
| | #6 (permalink) |
| | ||[ PIXON ] || Registriert seit: Apr 2002
Beiträge: 364
|
ich denke mal ich werde für jeden button einen eventlistener erstellen. das problem mit der stage habe ich gelöst, indem ich eine große fläche als movieclip in den hintergrund gelegt habe. mein code sieht jetzt so aus: Code: package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.transitions.Tween;
import fl.transitions.easing.*;
public class IndexAs extends MovieClip
{
public var menu:MovieClip;
public var ff:MovieClip;
public var punktemc:MovieClip = new punkte_mc();
public function IndexAs()
{
menu.alpha = 0;
menu.addEventListener(MouseEvent.ROLL_OVER, mOver);
menu.addEventListener(MouseEvent.ROLL_OUT, mOut);
menu.addEventListener(MouseEvent.CLICK, clicked);
ff.addEventListener(MouseEvent.CLICK, sClick);
}
function clicked(e:MouseEvent):void
{
addChild(punkte_mc);
}
function mOver(e:MouseEvent):void
{
var tIn:Tween = new Tween(e.currentTarget,"alpha",Strong.easeOut,0,1,0.5,true);
}
function mOut(e:MouseEvent):void
{
var tOut:Tween = new Tween(e.currentTarget,"alpha",Strong.easeOut,1,0,0.5,true);
}
function sClick(e:MouseEvent):void
{
trace("CLICK");
}
}
} Code: TypeError: Error #1034: Typumwandlung fehlgeschlagen: punkte_mc$ kann nicht in flash.display.DisplayObject umgewandelt werden. at IndexAs/clicked() |
| | |
| | #7 (permalink) |
| whatever Registriert seit: May 2008
Beiträge: 419
| PHP-Code: und menu (ehemals datagrid) und ff sind beides null objekte obwohl du im konstruktor bereits mit ihnen arbeitest, ist auch ein fehler. Geändert von ING (10-02-2011 um 20:18 Uhr) |
| | |
| | #8 (permalink) |
| | ||[ PIXON ] || Registriert seit: Apr 2002
Beiträge: 364
| Code: public var menu:MovieClip = new MovieClip(); public var ff:MovieClip = new MovieClip(); public var punkte_mc:MovieClip = new MovieClip(); jetzt kommt zwar kein error, aber es passiert auch nichts beim klick. also der movieclip wird nicht aus der library geladen. Geändert von pixon (10-02-2011 um 20:48 Uhr) |
| | |
| | #9 (permalink) |
| whatever Registriert seit: May 2008
Beiträge: 419
|
ach so, punkte_mc ist in der libary, war etwas irritierend weils klein geschrieben ist, dann war das richtig. der fehler war in der clicked funktion, da hast du den variablen namen mit unterstrich geschrieben. also ActionScript:
ActionScript:
|
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| MouseEvent.CLICK reagiert nicht in I.E. 8 | McKenna23 | ActionScript 3 | 3 | 25-11-2010 15:30 |
| MovieClip reagiert nicht auf onPress | ronnydrechsler | ActionScript 2 | 8 | 06-04-2008 14:31 |
| Movieclip und on(click)-Anweisung | Nuern | Flash 8 | 3 | 25-01-2006 18:27 |
| Movieclip per Click vor- oder zurück abspielen, Movieclip laden | SYSmark23 | Flash MX 2004 | 2 | 02-11-2005 15:58 |
| button reagiert auf mac nur jeden zweiten click? | jens3 | Flash 4 und Flash 5 | 0 | 04-07-2002 17:32 |