onClipEvent Problem

ouagadugu

Mitglied
Hallo Zusammen,
habe auf einer _mc instanz folgendes script:
PHP:
onClipEvent (enterFrame) {
	if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
		this.menuname.textColor = 0xFFCC99;
	}
	else {
		this.menuname.textColor = 0x333333;
	}
}
onClipEvent (mouseDown) {
	this.menuname.textColor = 0xCC6600;
}
der erste Teil funktioniert einwandfrei, beim drüberrollen ändert sich die Schriftfarbe, beim rausrollen auf die im dyn.Textfeld(menuname) voreingestellte Farbe zurück, welche in der else Anweisung wiederkehrt. Leider passiert beim drücken gar nichts. Wie kann das sein?
gruß
michel
 
Probiers mal so:
PHP:
 onClipEvent (enterFrame) {
    if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
        this.menuname.textColor = 0xFFCC99;
    }
    else {
        this.menuname.textColor = 0x333333;
    }
	if ( down ) this.menuname.textColor = 0xCC6600; 
}
onClipEvent (mouseDown) {
	down = true
} 
onClipEvent (mouseUp) {
	down = false
}
bzw wahrscheinlich meintest du eher sowas:
PHP:
onClipEvent (enterFrame) {
    if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
        this.menuname.textColor = 0xFFCC99;
		if ( down ) this.menuname.textColor = 0xCC6600; 
    }
    else {
        this.menuname.textColor = 0x333333;
    }
	
}
onClipEvent (mouseDown) {
	down = true
} 
onClipEvent (mouseUp) {
	down = false
}
 
Danke erstmal, habe beides probiert und ich komme der Sache schon näher. Meine Idee war eigentlich, dass sich in der Menüsteuerung die Schriftfarbe ändert bei drüber.- und zurückgeht bei rausrollen. Soweit gehts. Beim anklicken, soll sich die Schrift nochmal in ne andere Farbe ändern,(bis dahin gehts dank deiner Hilfe nun auch) dann aber solls so bleiben, erst wenn man ein neues Menu mit anderem instance Name klickt, soll das ursprüngliche wieder zur alten Farbe. Glaube dafür brauch ich auch sowas wie delete this....
hast du da was auf lager?
 
Ist jetzt schäbig-schnell hingeschrieben, aber so geht´s
PHP:
  onClipEvent (enterFrame) {
    if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
       if ( _parent.activeMenu != this )  this.menuname.textColor = 0xFFCC99;
        if ( down ) 
		{
			if ( _parent.activeMenu != this ) 
			{
				_parent.activeMenu.menuname.textColor = 0x333333;
				_parent.activeMenu = this
			}
			this.menuname.textColor = 0xCC6600;
		}
    }
    else if ( _parent.activeMenu != this ) 
	{
        this.menuname.textColor = 0x333333;
    }
    
}
onClipEvent (mouseDown) {
    down = true
}
onClipEvent (mouseUp) {
    down = false
}

Wobei das eine ziemlich Performancevergeudung ist, dass jeder Knopf ein onEnterFrame hat, welches auch nie gelöscht wird nur um die Textfarbe zu ändern.
Das kann an auch mit Schaltflächen, bzw Movieclips die Schaltflächen beinhalten lösen, wo die Schaltfläche bei RollOver bzw RollOut dem MC sagt er soll an einen bestimmten Frame springen, bzw per Skript seine Textfarbe ändern.
Auch da kann man dann wieder das oben beschriebene Prinzip anwenden,
das der Rollout nicht stattfindet wenn er selber _parent.activeMenu ist,
und bei klick wird _parent.activeMenu auf den Ausgangszustand gesetzt
und er selber wird dann zu _parent.activeMenu.

Hab leider gerade feierabend und hunger, aber zu dem Thema gibt´s hier hunderte Einträge wo genau dieses Problem gelöst wurde.
Vielleicht einfach mal nach "Knopf aktiv" oder so suchen.
Ich meine Datic hätte da auch mal ein Tutorial zu gehabt zu so einem "MovieclipKnopf" ( der hieß allerdings sicherlich anders... )
 
Vielen Dank,
so funktionierts genau wie ich wollte. Muss nun erst mal noch andere Probleme mit der Seite in Griff bekommen, aber ich dachte auch schon, vielleicht wäre es einfacher gewesen eine SF in ein clip zu legen und durch springen in 2 Frames die Farben ändern zu lassen. Vielleicht bau ich später nochmal um. Was meinst du mit Performancvergeudung, heisst das dass es sich auf den flüssigen Ablauf auswirken kann?

Besten dank aber erstmal bis hier
michel
 
Hi,

nochmal als Zusatz eine Variante, die nur ereignisgesteuert funktioniert:
PHP:
onClipEvent(load) {
	if (_parent.over == undefined) {
		_parent.over = 0xFF0000;
		_parent.out = 0x666666;
		_parent.pressed = 0xFFFF33;
		_parent.active = 0x00FF00;
	}
	this.setColor = function(cl) {
		this.menuname.textColor = cl;
	}
}

on(rollOver) {
	if (_parent.menu_selected != this) {
		// RollOver-Textfarbe
		setColor(_parent.over);
	}
}

on(rollOut, releaseOutside) {
	if (_parent.menu_selected != this) {
		// RollOut-Textfarbe;
		setColor(_parent.out);
	}
}

on(press) {
	// Pressed-Textfarbe
	setColor(_parent.pressed);
}

on(release) {
	if (_parent.menu_selected != this) {
		// Aktiv-Button zurücksetzen:
		_parent.menu_selected.setColor(_parent.out);
		_parent.menu_selected = this;
		// Aktiv-Textfarbe
		setColor(_parent.active);
	} else {
		// RollOver-Textfarbe
		setColor(_parent.over);
		_parent.menu_selected = null;
	}
}

Gruß
.
 
Datic,
auch dir vielen Dank, habs ausprobiert und das Ergebniss ist völlig identisch mit dem von Chris. Für mich ist das interessant zum lernen, um zu sehen wie Herangehensweisen differieren. Was die Scripts jeweils machen ist mir auch klar, nur wo liegen denn nun die Vor.- und Nachteile, wenn so ne Datei mal im Netz steht? Oder spielt das auch keine Rolle?
michel
 
Hi,

der Unterschied ist eigentlich nur der, dass bei der ersten Variante für jeden Button die ganze Zeit ein onEnterFrame-Handler läuft, der den jeweiligen Button bei jedem Frameaufruf mit der Mausposition vergleicht (hitTest). Bei vielen Buttons und/oder sonstigen Rechenintensiven Operationen kann das schon etwas mehr auf die Performance gehen.

Ausserdem reagiert onClipEvent(mouseDown) auch, wenn sich die Maus überhaupt nicht über dem Objekt befindet - jeder Button empfängt also beim Drücken der Maus einen mouseDown-Event.

Gruß

P.S.: mein Vorschlag lässt sich natürlich auch noch weiter optimieren; z.B. durch die Implementierung der Funktionen im AS der Buttons selbst (wenn alle Buttons Instanzen des selben Objektes sind) und die Definition der nötigen Variablen direkt auf der Hauptzeitleiste.
.
 
Hi,
danke für die Antwort. Das mit nur einem Script auf dem button_mc hört sich gut an. In meinem Fall sind nämlich die buttons auf der Bühne alles Instanzen von diesem einem. In der Hauptzeitleiste habe ich eh schon die Funktion der Beschriftung für alle. Würde das aber gerne mal probieren, muss jetzt aber endlich mal mit der Seite weiterkommen + versuchs später dann mal. Brauchst mir nicht gleich ein Script zu schicken, aber für ein paar wichtige Hinweise in Form einer knappen Erläuterung der Vorgehensweise wäre ich sehr dankbar.
michel
eine andere Variante wies auch geht habe ich da gefunden:
http://www.tutorials.de/tutorials180043.html
 
Jupp, das ist genau das, was ich meinte:

Statt on(Ereignis) bzw. onClipEvent direkt auf die Zeitleiste des Buttons:
PHP:
this.onRollOver = function() {
;)

Spart Schreibarbeit.

Gruß
.
 
Zurück