Martin Bommeli, 07.02.08

AS3: Button unter einem MovieClip nicht anklickbar

Zeitleiste

Ich habe einen MovieClip der in sich selber einen Button (Grün) und einen MovieClip (Rot, leicht transparent) hat. Der rote MovieClip ist auf einer eigenen Ebene oberhalb des grünen Buttons. Nun, in as2 war es bislang immer so das der Button wie eine art durchscheinte und man sozusagen durch die oberliegenden MovieClips durchklicken konnte. Hier ein AS2 Beispiel... klappt wunderbar.

AS2

bitte Flash Player installieren!

/* Test 1 */
var btntest1_mc = mc_holder.btn_mc;
btntest1_mc.onPress = function(){dragit(this,1);}
btntest1_mc.onRelease = function(){dragit(this,0);}

/* Test 2 */
var btntest2_mc = mc_holder2.btn_mc;
btntest2_mc.onPress = function(){dragit(this,1);}
btntest2_mc.onRelease = function(){dragit(this,0);}

/* Test 3 */
var btntest3_mc = mc_holder3.btn_mc;
btntest3_mc.onPress = function(){dragit(this,1);}
btntest3_mc.onRelease = function(){dragit(this,0);}

Wie man sieht klappt dies bei allen drei Test. Nun das selbe Beispiel in AS3:

AS3

bitte Flash Player installieren!

Test 1:
Die grüne Fläche kann nicht durch den roten MC angeklickt werden

var btntest1_mc:MovieClip = mc_holder.btn_mc;
btntest1_mc.buttonMode = true;
btntest1_mc.addEventListener(MouseEvent.MOUSE_DOWN, onmousedown);

Test 2:
Ich dachte mir, vielleicht klappt es wenn ich den roten MC "mouseEnabled = false;" setze. Das würde gehen, wenn es keine weiteren MovieClips darin hätte. In meinem Fall habe ich aber noch einen gelben MC der im roten ist.

var btntest2_mc:MovieClip = mc_holder2.btn_mc;
btntest2_mc.buttonMode = true;
btntest2_mc.addEventListener(MouseEvent.MOUSE_DOWN, onmousedown);
mc_holder2.top_mc.mouseEnabled = false;

Test 3:
Der Trick ist, man muss dem oberstgelegenen MC (in meinem Fall der rote) noch die Eigenschaft "mouseEnabled = false" geben...

var btntest3_mc:MovieClip = mc_holder3.btn_mc;
btntest3_mc.buttonMode = true;
btntest3_mc.addEventListener(MouseEvent.MOUSE_DOWN, onmousedown);
mc_holder3.top_mc.mouseEnabled = false;
mc_holder3.top_mc.mouseChildren = false;

Tataaaaaa... das Werk ist vollbracht.. naja. Bis auf das das halt startDrag in as3 nur noch ein Objekt mitdragt :-( (darum bleibt der Text stehen, obwohl er im gedragten MC ist). Das müsste man noch in eine onenterframe oder so packen und die x,y achse abfragen.. aber das war mir nach disen paar stunden, die ich für dieses Buttonproblem verschwendet habe, echt zu blöde.

Hier noch die FLA's mit den kompleten codes:
- AS3 File downloaden
- AS2 File downloaden

blog comments powered by Disqus