Ich habe folgenden Code für meinen ersten Button (btn1) geschrieben, der auch wie gewünscht funktioniert. Da ich Anfänger bin, frage ich mich nun ob ich für jeden weiteren Button genau so viel Code benötige oder ob man da was zusammenfassen bzw. optimieren kann.
function btn1click(event:MouseEvent):void{
gotoAndStop(2)
}
function btn1over(event:MouseEvent):void{
MovieClip(button).gotoAndPlay(2)
}
function btn1out(event:MouseEvent):void{
MovieClip(button).gotoAndPlay(11)
}
function buttonFunctions(evt:MouseEvent):void {
switch(evt.type) {
case "mouseOver":
trace("Maus über dem Button");
break;
case "mouseOut":
trace("Maus neben dem Button");
break;
case "click":
trace("Button geklickt");
}
}
Wirklich kürzer ist das jedoch nicht - vielleicht etwas übersichtlicher.
Grüße
KerstinWer Rechtschreibfehler findet, darf sie gerne behalten.
function buttonFunctions(evt:MouseEvent):void {
switch(evt.type) {
case "mouseOver":
trace("Maus über dem Button");
break;
case "mouseOut":
trace("Maus neben dem Button");
break;
case "click":
if (evt.currentTarget == btn1) {
trace("btn1 geklickt");
} else if (evt.currentTarget == btn2) {
trace("btn2 geklickt");
}
}
}
statt der if-abfrage kann man denk ich auch wieder nen switch machen, kommt schöner.
War mir aber gerade nicht sicher obs dann auch so funktioniert.Zeitleisten-Programmierung ist böse! löst euch von der Zeitleiste -> benutzt Flashdevelop!
Antworten auf Flash AS3 Fragen. Flash Programmierer
Hallo, ich versuche gerade den Code von ashitaka in meiner fla-Datei anzuwenden. Bekomme aber in Zeile 23, 4, 5, 6 einen Fehler "Zugriff auf eine nicht definierte Eigenschaft btn2". Hier mal mein Versuch:
function buttonFunctions(evt:MouseEvent):void {
switch(evt.type) {
case "mouseOver":
MovieClip(button1).gotoAndPlay(2)
// trace("Maus über dem Button");
break;
case "mouseOut":
if(MovieClip(button1)) MovieClip(button1).gotoAndPlay(11)
// trace("Maus neben dem Button");
break;
case "click":
// trace("Button geklickt");
// gotoAndStop(2)
if (evt.currentTarget == btn1) {
trace("btn1 geklickt");
} else if (evt.currentTarget == btn2) {
trace("btn2 geklickt");
}
}
}
Kann mir da jemand weiterhelfen? Ich weiß auch nicht wie ich die Zeilen für btn3 und btn4 anlegen muss. Ich hänge die Datei mal dran.
ich frage mich warum überhaupt was funcktioniert und er nicht schon bei btn1 meckert.
Wo ist denn btn1?? hab den in der fla nicht gefunden!Zeitleisten-Programmierung ist böse! löst euch von der Zeitleiste -> benutzt Flashdevelop!
Antworten auf Flash AS3 Fragen. Flash Programmierer
Beiträge: 1769 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
Das ( if(MovieClip(button1)) MovieClip(button1).gotoAndPlay(11) ), ist ein wenig verwirrend,
was soll das vorstellen?
Und was möchtest Du bei klick erreichen ? Frames ansteuern auf der HTM ??Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake! "Wer tanzen will, muss erst gehen lernen"
Beim klicken auf btn1 möchte ich in der Hauptzeitleiste auf bild2 springen. Dabei verschwinden dann ja die Buttons und es wird ja mouse_out ausgelöst.
In z.b. btn1out() wird dann versucht auf
den button zuzugreifen, was aber nicht geht,
weil er nicht mehr auf der bühne ist.
Deshalb wird if (MovieClip(button1)) eingesetzt
Ich habe das so bei einem anderen Code angewendet, mit dem ich die gleiche Datei verlinkt habe. Dort funktioniert es. Leider bin ich mir auch nicht sicher ob das mit dieser Variante auch so geht.
Beiträge: 1769 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
HTM hätte eigentlich HTL heissen sollen, und bedeutet Haupttimeline, also die oberste Ebene Deines Movies.
Wenn der "btn1" nicht mehr existiert , dann macht das im zugewiesene Script auch keinen Sinn mehr, also das hier"if(MovieClip(button1)) MovieClip(button1).gotoAndPlay(11)", wird ja auch nicht mehr ausgeführt.Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake! "Wer tanzen will, muss erst gehen lernen"
Beiträge: 1769 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
Die Datei hilft mir nix, da rauscht mein CS5 ab !Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake! "Wer tanzen will, muss erst gehen lernen"
//Ausführung auf btn1
function btn1click(event:MouseEvent):void{
gotoAndStop(2)
}
function btn1over(event:MouseEvent):void{
MovieClip(button1).gotoAndPlay(2)
}
function btn1out(event:MouseEvent):void{
/* MovieClip(button1).gotoAndPlay(11)
so sah die Funktion ursprünglich aus
wenn man auf einen button clickt,
wird im hauptframe das Bild gewechselt.
Dadurch verschwindet der Button.
Dadurch wird ein MOUSE_OUT ausgelöst.
in z.b. btn1out() wird dann versucht auf
den button zuzugreifen, was aber nicht geht,
weil er nicht mehr auf der bühne ist :)
Deshalb wird if (MovieClip(button1)) eingesetzt
*/
if(MovieClip(button1)) MovieClip(button1).gotoAndPlay(11)
}
//Ausführung auf btn2
function btn2click(event:MouseEvent):void{
gotoAndStop(3)
}
function btn2over(event:MouseEvent):void{
MovieClip(button2).gotoAndPlay(2)
}
function btn2out(event:MouseEvent):void{
if(MovieClip(button2)) MovieClip(button2).gotoAndPlay(11)
}
//Ausführung auf btn3
function btn3click(event:MouseEvent):void{
gotoAndStop(4)
}
function btn3over(event:MouseEvent):void{
MovieClip(button3).gotoAndPlay(2)
}
function btn3out(event:MouseEvent):void{
if(MovieClip(button3)) MovieClip(button3).gotoAndPlay(11)
}
//Ausführung auf btn4
function btn4click(event:MouseEvent):void{
gotoAndStop(5)
}
function btn4over(event:MouseEvent):void{
MovieClip(button4).gotoAndPlay(2)
}
function btn4out(event:MouseEvent):void{
if(MovieClip(button4)) MovieClip(button4).gotoAndPlay(11)
}
Beiträge: 1769 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
Hab es mir auf einem anderen Rechner anschauen können.
Jetzt versteh ich auch das hier,
***************
if(MovieClip(button1)) MovieClip(button1).gotoAndPlay(11)
***************
das ist aber eigentlich nicht nötig, wenn man das Menue respt. die Buttons einfacher gestalten würde.
Ich überlege mir was.Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake! "Wer tanzen will, muss erst gehen lernen"
ich hab mal den lösungsansatz mit den arrays von RustyCake aufgegriffen und was gebaut mit weniger Zeitleistenkram, dafür Tween per AS.
Ausserdem spart man sich so noch den code in den pages.
Grundsätzlich ist es übersichtlicher, den ganzen code in einem zu haben, anstatt in vielen MC´s versteckt.
Besser sind natürlich eh externe as-files und OOP.
Die Button MouseOvers haben noch nen bug ... sorry ;)
for ( i =0; i<pagesArray.length; i++)
{
pagesArray[i].btn_back.addEventListener(MouseEvent.CLICK, toMainMenu);
pagesArray[i].ID = i;
pagesArray[i].y = 80;
}
//
function clickHandler (e:MouseEvent):void
{
setButtonsVisible(false); // main menu verstecken
var page:MovieClip = pagesArray[e.currentTarget.ID]; // die page, die angezeigt werden soll aus dem array holen
var myTween:Tween = new Tween(page, "x", Strong.easeOut, 550, 290, 1.5, true);
}
//
function overHandler (e:MouseEvent):void
{
if (memo != e.currentTarget)
{
e.currentTarget.gotoAndPlay ("over");
}
}
//
function outHandler (e:MouseEvent):void
{
e.currentTarget.gotoAndPlay ("out");
}
function toMainMenu(e:MouseEvent):void {
var page:MovieClip = pagesArray[e.currentTarget.parent.ID]; // parent vom button ist die page
var myTween:Tween = new Tween(page, "x", Strong.easeOut, page.x, 550, 1.5, true);
setButtonsVisible(true);
}
//////////////
function setButtonsVisible(val:Boolean):void { // den visible-wert aller buttons setzen
for (var i:uint =0; i<btnArray.length; i++) {
btnArray[i].visible = val;
}
}
Zeitleisten-Programmierung ist böse! löst euch von der Zeitleiste -> benutzt Flashdevelop!
Antworten auf Flash AS3 Fragen. Flash Programmierer
Beiträge: 1769 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
Servus nochmal.
Hab jetzt das Ding nach gebaut, so kann ich das anderen auch geben, ohne Photos etc. von Dir zu verwenden.
Bin zum Teil bei meinem Array-Konzept geblieben, aber nur um die Handler, nicht für jeden Button einzeln schreiben zu müssen.
Hab auch die Button vereinfacht, weil mir das mit den einzelnen Textfeldern, den Schaltflächen und den Backgrounds (mit den Fades) nicht eingeleuchtet hat.
Das ist jetzt alles in einem MovieClip zusammen gefasst.
Die Pages werden über ein Array gesteuert, dadurch spart man sich das if-else-Zeug, in der switch-case-Nummer.
Die Hover-Animation hab ich auch ein wenig angepasst, da kann man ohne Bezeichner arbeiten.
** Script von Frame 1 == Start_page**
stop();
//
import flash.display.MovieClip;
//
var btnArray:Array = [btn1,btn2,btn3];
var clickZielArray:Array =["page_1","page_2","page_3"];
//
for (var i:uint =0; i<btnArray.length; i++)
{
btnArray[i].buttonMode = true;
btnArray[i].ID = i;// jeder Button bekommt eine ID, die ID geht von 0-2, also btn1 bekommt ID 0
// btn2 bekommt ID 1 und btn3 bekommt ID 2, was dem Array-Index von clickZielArray entspricht.
// clickZielArray sind die Frame-Bezeichner "page_1 bis page_3" gespeichert.
btnArray[i].addEventListener (MouseEvent.CLICK, btnHandlerStart);
btnArray[i].addEventListener (MouseEvent.MOUSE_OVER, btnHandlerStart);
btnArray[i].addEventListener (MouseEvent.MOUSE_OUT, btnHandlerStart);
}
//
function btnHandlerStart (e:MouseEvent):void
{
switch(e.type) {
case "mouseOver":
e.currentTarget.play();
break;
case "mouseOut":
e.currentTarget.gotoAndPlay(e.currentTarget.totalFrames-e.currentTarget.currentFrame);
break;
case "click":
gotoAndStop (clickZielArray[e.currentTarget.ID]);// hier werden die Einträge aus dem,
// clickZielArray übergeben, bei btn1 zb. ist das der Eintrag "page_1"
}
}
**Script von Frame 2**
Bis auf die Instanznamen unterscheiden sich die Scripte in den Frames 2-4 nicht.
ActionScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
page1_mc.back_btn.buttonMode = true;
page1_mc.back_btn.mouseChildren = false;
page1_mc.back_btn.addEventListener (MouseEvent.CLICK, btnHandlerBack1);
page1_mc.back_btn.addEventListener (MouseEvent.MOUSE_OVER, btnHandlerBack1);
page1_mc.back_btn.addEventListener (MouseEvent.MOUSE_OUT, btnHandlerBack1);
//
function btnHandlerBack1 (e:MouseEvent):void
{
switch(e.type) {
case "mouseOver":
e.currentTarget.play();
break;
case "mouseOut":
e.currentTarget.gotoAndPlay(e.currentTarget.totalFrames-e.currentTarget.currentFrame);
break;
case "click":
gotoAndStop ("start_page");
}
}
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake! "Wer tanzen will, muss erst gehen lernen"