Unbeschreibbarer Fehler

Dipsi

Mitglied
Hallo
Also. Ich habe ein Script erstellt, dass automatisch Buttons generiert.
Jetzt will ich noch für jeden Button eine RollOver und einen RollOut Effekt.
Habe ich auch hingebracht.. doch es läuft noch nicht "richtig".
Es ist schwierig zu erklären was falsch abläuft. Man muss den Code selber testen,
damit man sieht was das falsch ist.
Probiere es tortzdem zu erklären.
Z.B. Wenn ich auf denn Button1 gehe startet er die RollOver Funktion.
Wenn ich danach mit der Maus "direkt" auf Button2 gehe.. startet er die RollOut Funktion von Button1 nicht.
ABER
Wenn ich auf Button1 bin.. dann mit der Maus etwas nach links gehe, dann runter und noch anschliessend rechts auf Button2 führt er die RollOut Funktion von Button1 aus.
Kommt jemand nach was ich meine?:suspekt:

PHP:
var MC:MovieClip = this.createEmptyMovieClip ("MC", 0);

var rect:MovieClip = this.createEmptyMovieClip("rect", 1);

for (var nCount:Number = 1; nCount <= 7; nCount++)
{
  var btn:MovieClip = MC.createEmptyMovieClip ("btn_" + nCount, nCount);
  btn.nCount = nCount;
	
	btn.useHandCursor = false;
	
	var nPos:Number;
	
	with (btn)
  {
    nPos = 0;
    if (nCount > 1)
    {
      for (var n:Number = 0; n < nCount - 1; n++)
      {
        nPos = nPos + 20;
      }
    }
    var txtField:TextField = btn.createTextField ("txtField_" + nCount, nCount, 11, nPos - 2, 100, 20);
    txtField.text = "Home" + nCount;
    txtField.selectable = false;
    
		txtFormat = new TextFormat();
		txtFormat.font = "arial";
		txtFormat.color = "0xFFFFFF";
		
		txtField.setTextFormat(txtFormat);
		
		beginFill (0xFF0000, 60);
		btn._alpha = 0;
    moveTo (0, nPos);
    lineTo (104, nPos);
    lineTo (104, nPos + 15);
    lineTo (8, nPos + 15);
    lineTo (8, nPos);
    endFill ();
  }
	
	with(rect)
	{
    beginFill (0xFF0000, 100);
    moveTo (0, nPos);
    lineTo (4, nPos);
    lineTo (4, nPos + 15);
    lineTo (0, nPos + 15);
    lineTo (0, nPos);
    endFill ();
	}
	
  btn.onRelease = function()
  {
    this["txtField_" + this.nCount].text = "Button_" + (this.nCount);
	}
	
	btn.onRollOver = function()
	{
		nBtn = this.nCount;
		dir = 1;
	}
	
	btn.onRollOut = function()
	{
		nBtn = this.nCount;
    dir = -1;
	}
	
	btn.onEnterFrame = function()
	{
		var speed:Number;
		var temp:Number;
		speed = 2;
		temp = _root.MC["btn_"+nBtn]._alpha + speed * dir;
		_root.MC["btn_"+nBtn]._alpha = Math.min(100, Math.max(temp,0));
	}
}
stop();

Hilfe!!
 
Zuletzt bearbeitet:
Hallo,

du hast einen simplen Denkfehler gemacht:

Die onEnterFrame-Schlaufe kümmert sich um das EIn- bzw. Ausblenden ALLER MovieClips, bearbeitet aber nur einen aufs Mal. So wird der Ausblend-Effekt nicht ausgeführt, wenn die Referenz-Variable gleich wieder durch den onRollOver des nächsten Buttons gesetzt wird.

Ich hoffe, das war verständlich ;).

gruss
 
Thx.. :-)
Das heisst jetzt, ich muss pro Button die 3 Funktionen schreiben?

Wenn ich es so mache funktioniert auch der Rollout. (Aber natürlich nur bei Knopf 3).

PHP:
_root.MC.btn_3.onRollOver
_root.MC.btn_3.onRollOut
_root.MC.btn_3.onEnterFrame

Wie kann ich diese Funktionen in der For-Schleife erstellen?
PHP:
_root.MC["btn_"+this.nCount].onRollOver
_root.MC["btn_"+this.nCount].onRollOut
_root.MC["btn_"+this.nCount].onEnterFrame
Das funktioniert überhaupt nicht.
Wenn ich es so mache leuchten alle Buttons auf. :-S

Habe keine Ahnung von AS.
Das ist mein erstes Script :D
 
Hallo,

ich würd deinen Buttons gleich beim Erstellen als Member eine Funktion mitgeben, die den Fade-Effekt des jeweiligen Buttons übernimmt (die Textfeld-Erstellung hab ich mal weggelassen):

Code:
for (var nCount: Number = 1; nCount < 6; nCount++) {
   
   btn.speed = 2;
   btn.fade = function(alpha: Number)
   {
        var speed:Number = 2;
        var temp: Number;
        this.onEnterFrame = function () {
            temp = (alpha-this._alpha)/speed;
            this._alpha += temp;
        }
    }

   btn.onRelease = function()
   {
    this["txtField_" + this.nCount].text = "Button_" + (this.nCount);
    }
    
    btn.onRollOver = function()
    {
        this.fade(100);
    }
    
    btn.onRollOut = btn.onDragOut = function()
    {
        this.fade(0);
    }
}

Als Parameter geb ich den gewünschten Alpha-Wert mit.

gruss
 
boa.. klappt super!!
Ich hätte es viel komplizierter gemacht. (Status von Button in Array speichern usw..)
Vielen Dank!!
Toll;)
 
Zurück