Wir sind schon recht amüsant und ab und zu auch
ein bischen gemein. Wir sind Feinheit. Danke!

Blog

07.02.08, Martin Bommeli

AS3: Button unter einem MovieClip nicht anklickbar

3 Kommentare

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

06.02.08, Martin Bommeli

AS3: Mehrere Methoden über ExternalInterface übergeben

0 Kommentare

Nehmen wir mal an, wir wollen eine JavaScript-Funktion die im html eingebettet ist, aus flash aufrufen.

function meineFunktion(arg1,arg2){
	alert("test: "+arg1+" "+arg2);
}

Früher haben wir dazu einen getURL-Aufruf gemacht. Z.b:

getURL("javascrip:meineFunktion('77','blabla');","_self");

Seit Flash8 gibt es jedoch die Möglichkeit von JavaScript zu Flash und zurück zu kommunizieren. Hier ein Beispiel wie man eine JS-Funktion aufruft:

//import flash.external.ExternalInterface;
ExternalInterface.call("meineFunktion");

Die Argumente können jedoch nicht einfach Komma getrennt mitgegeben werden. Man benötigt jeweils noch einen "escape"..

//import flash.external.ExternalInterface;
var arg1:String = "77";
var erg2:String = "blabla";
ExternalInterface.call("meineFunktion",escape(arg1), escape(erg2));

25.01.08, Martin Bommeli

AS3: Bildbearbeitung in Flash

0 Kommentare

Wir sind momentan an einem grösseren Projekt für einen Kunden der unter anderem Serviettenbeutel herstellt. Im "AdminTool" kann der Kunde selber die "Muster" der Serviettenbeutel Hochladen. Hier ein kleiner Einblick hinter die Kulissen.

1Der Kunde kann mit einem Klick sein Bild browsen und auswählen (AS3: FileReference Funktion).

1-2 Sobald der Kunde sein Bild ausgewählt hat wird es per FileReference.upload() auf den Server geladen.

2Auf dem Server bekommt das Bild einen Namen und wird temporär gespeichert.

2-3Das temporär gespeicherte Bild wird ins Flash eingelesen (AS3: normaler URLRequest loader).

3Das Bild wird in Flash abmaskiert und bekommt die Funktionalitäten um es zu bearbeiten. (AS3: bitmapData umwandlung).

3-4Das bearbeitete bild wird in flash per BitmapData und einem jpgEncoder in einen ByteArray umgewandelt und an den Server gesendet.

4Der Server empfängt die Daten (Raw post data) und Speichert dies auf dem Server.

- Image exporter prototyp ansehen
- JPEG Encoder Sources
- Splashup (Online Bildbearbeitung a la Photoshop)