helligkeit statt _alpha verändern?

harrry

Erfahrenes Mitglied
Hallo,

es geht noch mal um Datics sehr praktisches Ein- und Ausfade-Menü, da wird doch das Faden mit Veränderung des alpha-Wertes erreicht.

Mein Problem: Wenn im hinzugeladenen Film Transparenzen verwendet werden, scheinen diese beim Weg- bzw. Hinzufaden durch. Deshalb würde ich gerne statt des Alpha-Werts die Helligkeit verändern, also allmählich bis Schwarz und wieder zurück.

Muss man die nun über eine Funktion definieren, ähnlich wie eine Farbveränderung? Oder gibts in AS.2 schon die Möglichkeit, sowas wie "brightness" als Eigenschaft anzugeben?
 
Hi,

ja, schau einmal nach dem Color-Objekt und seiner setTransform-Methode.

Beispiel zum "Fading" zu schwarz:
Code:
var cl = new Color(this);
var tr = cl.getTransform();
this.onEnterFrame = function() {
    tr.rb += (-255 - tr.rb) / 5;
    tr.gb += (-255 - tr.gb) / 5;
    tr.bb += (-255 - tr.bb) / 5;
    cl.setTransform(tr);
    if (Math.abs(-255 - tr.rb) < 1) {
        tr.rb = tr.gb = tr.bb = -255;
        delete this.onEnterFrame;
    }
}

Gruß
.
 
Ja, toll, aber aber aber... das sieht doch so aus in Deinem Script:
PHP:
function switchContent(nc) {
   	current_content = 0;
   	// Auf Null setzen, damit neue Inhalte schnell angezeigt werden können
   	this.onEnterFrame = function() {
   		container._alpha += (0-container._alpha)/2;
   		// Container ausblenden
   		if (container._alpha<1) {
   			container._alpha = 0;
   			if (nc>0) {
   				loadContent(nc);
   				// Neuen Inhalt laden, 
   			} else {
   				delete this.onEnterFrame;
 				// oder anhalten, wenn kein Inhalt
   			}
   		}
   	};
   }
   function loadContent(nc) {
   	var stime = getTimer();
   	// Zeitstempel merken
   	loader.loadContent(container, getContentName(nc));
   	// Inhalt laden lassen
   	this.onEnterFrame = function() {
   		container._alpha = 0;
   		if (loader.isloaded == true) {
   			// Wenn geladen:
   			current_content = nc;
   			// Aktuellen Inhalt setzen
   			appearContent();
   			// Inhalt anzeigen
   		}
   		if (getTimer()-stime>8000) {
   			// Timeout beim Laden:
   			current_content = 0;
   			// Auf Null setzen
   			container._alpha = 0;
   			delete this.onEnterFrame;
   		}
   	};
   }
   function appearContent() {
   	this.onEnterFrame = function() {
   		container._alpha += (100-container._alpha)/6;
   		// Inhalt einblenden
   		if (container._alpha>99) {
   			container._alpha = 100;
   			delete this.onEnterFrame;
   			// Anhalten
   		}
   	};
   }
Wie kann ich das mit diesem set.Transform verbinden? Bin zu blöd, bitte hilf!
 
Hi,

na Du ersetzt einfach alla Alpha-Operationen mit ihren Color-Objekt Pendants.

z.B. statt:
Code:
bla._alpha += (0 - bla._alpha) / 4;
das hier:
Code:
    tr.rb += (-255 - tr.rb) / 5;
    tr.gb += (-255 - tr.gb) / 5;
    tr.bb += (-255 - tr.bb) / 5;
    cl.setTransform(tr);
(-255 entspricht ganz ausgeblendet; 0 entspricht keiner Transformation)

Gruß
.
 
Hallo,
musste weihnachtsbedingt ein paar Tage ohne Computer verbringen und antworte daher erst jetzt - leider schaff ich es immer noch nicht, den oben zitierten Code zu adaptieren. Was mach ich denn etwa mit Angaben wie "
PHP:
if (container._alpha<1) {
    			container._alpha = 0;
    			if (nc>0) {
 			 loadContent(nc);
und so weiter... Wäre es sehr unverschämt, Dich zu ersuchen, die am 31. 12. gepostete Passage mit dem "colour-object" zu veredeln?
 
Wenn Du Dir durchgelesen hast, wie die setTransform-Methode arbeitet, solltest Du das eigentlich selbst können. ;) Statt den Alphawert auf (fast) 0 abzufragen, fragst Du eine der Farbwerteigenschaften des Transform-Objektes auf einen Wert nahe -255 ab:
Code:
if (Math.abs(-255 - tr.rb) < 1) {
    tr.rb = tr.gb = tr.bb = 0;
    cl.setTransform(tr);
Da alle drei Werte (rot, grün und blau) synchron geändert werden, genügt die Überprüfung eines Wertes. Bei komplexeren Farb-"Fadings" müsstest Du alle drei abfragen.

Gruß
.
 
Vielen Dank, aber es übersteigt meine Möglichkeiten. Habe da jetzt folgendes zusammengeschmiert:
PHP:
var currentContent = 0;
  // Aktueller Inhalt (0 = keiner)
  function setContent(bname) {
  	var new_content = parseInt(bname.substr(bname.length-2, 2), 10);
  	// Nummer holen
  	if (new_content>0 && new_content != current_content) {
  		if (current_content != 0) {
  			switchContent(new_content);
  			// Inhalt wechseln
  		} else {
  			loadContent(new_content);
  			// Inhalt direkt laden
  		}
  	} else {
  		switchContent(0);
  		// Inhalt ausblenden
  		current_content = 0;
  	}
  }
  function switchContent(nc) {
  	current_content = 0;
  	// Auf Null setzen, damit neue Inhalte schnell angezeigt werden können
  	this.onEnterFrame = function() {
  		tr.rb += (-255-tr.rb)/9;
  		tr.gb += (-255-tr.gb)/9;
  		tr.bb += (-255-tr.bb)/9;
  		cl.setTransform(tr);
  		// Container ausblenden
  		if (Math.abs(0-tr.rb)<255) {
  			tr.rb = tr.gb=tr.bb=255;
  			if (nc>0) {
  				loadContent(nc);
  				// Neuen Inhalt laden, 
  			} else {
  				delete this.onEnterFrame;
 				// oder anhalten, wenn kein Inhalt
  			}
  		}
  	};
  }
  function loadContent(nc) {
  	var stime = getTimer();
  	// Zeitstempel merken
  	loader.loadContent(container, getContentName(nc));
  	// Inhalt laden lassen
  	this.onEnterFrame = function() {
  		tr.rb = tr.gb=tr.bb=0;
  		if (loader.isloaded == true) {
  			// Wenn geladen:
  			current_content = nc;
  			// Aktuellen Inhalt setzen
  			appearContent();
  			// Inhalt anzeigen
  		}
  		if (getTimer()-stime>8000) {
  			// Timeout beim Laden:
  			current_content = 0;
  			// Auf Null setzen
  			tr.rb = tr.gb=tr.bb=0;
  			delete this.onEnterFrame;
  		}
  	};
  }
  function appearContent() {
  	this.onEnterFrame = function() {
  		tr.rb += (0-tr.rb)/5;
  		tr.gb += (0-tr.gb)/5;
  		tr.bb += (0-tr.bb)/5;
  		cl.setTransform(tr);
  		// Inhalt einblenden
  		if (Math.abs(0-tr.rb)<1) {
  			tr.rb = tr.gb=tr.bb=0;
  			delete this.onEnterFrame;
  			// Anhalten
  		}
  	};
 }
...aber es ist natürlich alles falsch, nur das Einblenden klappt, das Ausblenden aber nicht - und außerdem reagiert das Graffel (österr. für Glumpert) nur noch bei jedem zweiten Mausklick. Bin deprimiert.
 
Hi,

ich sehe nirgends, dass Du das Color-Objekt und das Transform-Objekt instanzierst.

Zudem fehlt a) nach
Code:
tr.rb = tr.gb=tr.bb=255;
die Zuweisung zum Color-Object ( cl.setTransform(tr) ) und b) muss es hier:
Code:
if (Math.abs(0-tr.rb)<255) {
-255 statt 255 lauten.

Gruß
.
 
Also, soweit bin ich jetzt:
PHP:
var cl = new Color(this);
  var tr = cl.getTransform();
  var currentContent = 0;
  // Aktueller Inhalt (0 = keiner)
  function setContent(bname) {
  	var new_content = parseInt(bname.substr(bname.length-2, 2), 10);
  	// Nummer holen
  	if (new_content>0 && new_content != current_content) {
  		if (current_content != 0) {
  			switchContent(new_content);
  			// Inhalt wechseln
  		} else {
  			loadContent(new_content);
  			// Inhalt direkt laden
  		}
  	} else {
  		switchContent(0);
  		// Inhalt ausblenden
  		current_content = 0;
  	}
  }
  function switchContent(nc) {
  	current_content = 0;
  	// Auf Null setzen, damit neue Inhalte schnell angezeigt werden können
  	this.onEnterFrame = function() {
  		tr.rb += (-255-tr.rb)/6;
  		tr.gb += (-255-tr.gb)/6;
  		tr.bb += (-255-tr.bb)/6;
  		cl.setTransform(tr);
  		// Container ausblenden
  		if (Math.abs(0-tr.rb)<-255) {
  			tr.rb = tr.gb=tr.bb=255;
  			cl.setTransform(tr);
  			if (nc>0) {
  				loadContent(nc);
  				// Neuen Inhalt laden, 
  			} else {
  				delete this.onEnterFrame;
 				// oder anhalten, wenn kein Inhalt
  			}
  		}
  	};
  }
  function loadContent(nc) {
  	var stime = getTimer();
  	// Zeitstempel merken
  	loader.loadContent(container, getContentName(nc));
  	// Inhalt laden lassen
  	this.onEnterFrame = function() {
  		tr.rb = tr.gb=tr.bb=0;
  		if (loader.isloaded == true) {
  			// Wenn geladen:
  			current_content = nc;
  			// Aktuellen Inhalt setzen
  			appearContent();
  			// Inhalt anzeigen
  		}
  		if (getTimer()-stime>8000) {
  			// Timeout beim Laden:
  			current_content = 0;
  			// Auf Null setzen
  			tr.rb = tr.gb=tr.bb=0;
  			delete this.onEnterFrame;
  		}
  	};
  }
  function appearContent() {
  	this.onEnterFrame = function() {
  		tr.rb += (0-tr.rb)/5;
  		tr.gb += (0-tr.gb)/5;
  		tr.bb += (0-tr.bb)/5;
  		cl.setTransform(tr);
  		// Inhalt einblenden
  		if (Math.abs(0-tr.rb)<1) {
  			tr.rb = tr.gb=tr.bb=0;
  			delete this.onEnterFrame;
  			// Anhalten
  		}
  	};
 }
Leider wirkt sich nun aber das Schwarzfading auf alle MCs auf meiner Bühne aus und nicht nur auf den Ladecontainer. Und Wegfaden und Einfaden auf einen Klick klappt auch nicht. Magst Du mir nicht noch weiter helfen?
 
Hi,

Du musst das Color-Objekt für den MC instanzieren, der geändert werden soll:
Code:
var cl = new Color(container);
... das hätte Dir die Referenz zum Thema "Color-Klasse" aber auch verraten. ;)

Gruß
.
 
Zurück