Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX 2004

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-08-2007, 13:52   #1 (permalink)
Grand Master Flash
 
Benutzerbild von Tiburon
 
Registriert seit: Dec 2003
Ort: Schweiz
Beiträge: 130
setMask() Problem

Hallo Flashfreunde

Über setMask wurde hier ja auch schon geschrieben und eigentlich sieht die Sache ja ganz einfach aus.

Ich lade dynamisch Movieclips, welche ich maskieren will, aber es will einfach nicht so richtig klappen.

Code:
_root.createEmptyMovieClip("maskMC", 3);

var action_mc :MovieClip = _root.createEmptyMovieClip("action_mc", 0);  // virtuell für enterFrame
var container1:MovieClip = _root.createEmptyMovieClip("container1", 2); // enthält bild
var container2:MovieClip = _root.createEmptyMovieClip("container2", 4); // enthält bild

_root.container1._x = 200;
_root.container1.loadMovie("images/background/image"+randRange(10,20)+".jpg");
_root.container1._alpha = 100;
_root.container1.setMask(_root.maskMC);
_root.maskMC.attachMovie("mask_mc", "m", 0, {_x:200} );
Der Clip mask_mc wird immer als Fläche und nicht als Maske dargestellt, resp. maskiert eben container1 nicht.

Kann mir jemand sagen, woran's liegt?
__________________
Gruss

}-^°>
Tiburon ist offline   Mit Zitat antworten
Alt 26-08-2007, 13:56   #2 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.864
Man kann die Maske erst zuweisen nachdem das Bild vollständig
geladen ist.

Also z.B. einen Preloader verwenden der dann setMask ausführt.
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 26-08-2007, 16:28   #3 (permalink)
Grand Master Flash
 
Benutzerbild von Tiburon
 
Registriert seit: Dec 2003
Ort: Schweiz
Beiträge: 130
Vielen Dank psyk!

Das war mir so nicht klar, ist aber ja auch irgendwie logisch.

Preloader sind nicht gerade meine Parade-Disziplin, gibt's da ein gutes Tutorial oder hat jemand für meinen Fall einen Tipp?
__________________
Gruss

}-^°>
Tiburon ist offline   Mit Zitat antworten
Alt 26-08-2007, 16:46   #4 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.864
PHP-Code:
var mcl:MovieClipLoader = new MovieClipLoader();// Preloaderklasse
var list:Object = new Object();// zuhoerer der Preloaders

// Methode zum aufrufen von Aktionen nachdem die Datei fertiggeladen ist
list.onLoadInit = function( ref:MovieClip ):Void
{
    
ref._alpha 100;
    
ref.setMask(_root.maskMC); // Maske dem Ziel-MC zuweisen
    
ref._x 200;
}

mcl.addListener( list ); // Zuhoerer beim Preloader anmelden
// Ladevorgang starten
mcl.loadClip"images/background/image"+randRange(10,20)+".jpg"_root.container1 ); 
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 27-08-2007, 10:05   #5 (permalink)
Grand Master Flash
 
Benutzerbild von Tiburon
 
Registriert seit: Dec 2003
Ort: Schweiz
Beiträge: 130
Super psyk, das haut voll hin! Vielen Dank!!!

Aber es gibt ein weiteres Problem...

Ich benutze zwei leere MovieClips (container1 und container2), welche gegenseitig ein- und ausgeblendet werden. Dies geschieht mit Actionscript und nicht per tween, da die Bilder dynamisch geladen werden. So kriege ich eine Art Slide-Show mit zufallsmässig geladenen Bilder.
Das Fade-Script habe ich als prototyp der MovieClip Klasse angehängt. Der Aufruf erfolgt mittels SetInterval.

Nun habe ich festgestellt, dass wenn sich der _alpha Wert ändert, die Maske nichts mehr Wert ist und nicht gezogen wird. Das heisst, sobald die Überblendung beginnt, wachsen die Bilder wieder auf volle Grösse an.

Ich habe nun versucht, den fade-Prototyp um eine setMask(mask) zu erweiteren, so dass bei jedem EnterFrame die Maske neu gesetzt wird. Hat aber nicht funktioniert

Code:
// MovieClip.fadeMask	Prototyp
// Parameter:					
// fadeIn:Boolean, true = Anstieg _alpha bis targetAlpha, false = Verringerung _alpha bis targetAlpha
// targetAlpha:Number, 	Zielwert von _alpha
// step:Number, Schrittlaenge der _alpha Veraenderung
// mask:MovieClip, Masken MC
// Rueckgabe keine

MovieClip.prototype.fade = function(	fadeIn:Boolean,
																			targetAlpha:Number,
																			step:Number,
																			mask:MovieClip) : void
{
	this.onEnterFrame = function() {
		with (this) {
			if(fadeIn) {
				if (_alpha < targetAlpha) {
					_alpha += step;
				}
				else {
					_alpha = targetAlpha;
					delete onEnterFrame;
				}
			}
			else {
				if (_alpha > targetAlpha) {
					_alpha -= step;
				}
				else {
					_alpha = targetAlpha;
					delete onEnterFrame;
				}
			}
			setMask(mask);
		}
	}
}
Funktioniert bisher nicht, aber ich habe auch noch nicht allzuviel Zeit investiert. Trotzdem, vielleicht hat jemand eine Idee.

Nochmals vielen Dank, psyk.
__________________
Gruss

}-^°>
Tiburon ist offline   Mit Zitat antworten
Alt 27-08-2007, 10:36   #6 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.864
Tweens allgemein kann man recht simpel mit der Tween-Klasse
umsetzen. (auch in MX'04)

bspw.
PHP-Code:
// import der Klassen
import mx.transitions.Tween;
import mx.transitions.easing.*; 

function 
fadeINref:MovieClipdur:Number ):Void
{
   new 
Tweenref'_alpha'Regular.easeOutref._alpha0durtrue );
}
function 
fadeOUTref:MovieClipdur:Number ):Void
{
   new 
Tweenref'_alpha'Regular.easeOutref._alpha100durtrue );

Solange die Maske außerhalb des Tween-MCs liegt, sollte es keine
Unterschiede geben ob man eine Skript oder es per Zeitleiste macht.
Das gilt aber eigentlich auch für den Fall, wenn die Maske innerhalb
des Tween-MCs liegt.
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 27-08-2007, 12:11   #7 (permalink)
Grand Master Flash
 
Benutzerbild von Tiburon
 
Registriert seit: Dec 2003
Ort: Schweiz
Beiträge: 130
Au Mann! Ich hatte ja keine Ahung

Das scheint wirklich um einiges simpler zu sein als mein Script, da die ganze Intervall-Geschichte wegfällt.

Das werde ich heute abend sofort ausprobieren! Ich hoffe nur, das ganze läuft auch mit Maske.

Vielen Dank für den Hinweis psyk!
__________________
Gruss

}-^°>
Tiburon ist offline   Mit Zitat antworten
Alt 03-09-2007, 10:41   #8 (permalink)
Grand Master Flash
 
Benutzerbild von Tiburon
 
Registriert seit: Dec 2003
Ort: Schweiz
Beiträge: 130
So, hat jetzt doch länger gedauert. War etwas stressig in letzter Zeit.

Also mit der Tween-Klasse konnte ich den Code wirklich stark vereinfachen und um ca. 75% verkleinern.

Getweent wird, aber wiederum ohne Berücksichtigung der Maske.

Ich werde noch ein bisschen daran basteln müssen.
__________________
Gruss

}-^°>
Tiburon ist offline   Mit Zitat antworten
Alt 04-09-2007, 08:35   #9 (permalink)
Grand Master Flash
 
Benutzerbild von Tiburon
 
Registriert seit: Dec 2003
Ort: Schweiz
Beiträge: 130
[gelöst] setMask() Problem

Es funktioniert jetzt!

Das Problem war, dass jeder container-MC seine eigene Maske (mask1 + mask2) braucht. Nach dieser Erweiterung funktioniert mein Script tadellos.

Danke nochmals an psyk, ohne Deine Hilfe wäre ich noch nicht weiter!
__________________
Gruss

}-^°>
Tiburon 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 07:19 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele