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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-04-2008, 10:51   #1 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
Button

hallo zusammen,

meine flashkenntnisse halten sich in grenzen, daher hab ich folgende frage und hoffe, jemand kann helfen.

ich habe ein bildergalerie und einen button, nach dessen klick sich ein kleines rechteck öffnet auf dem ein paar infos in form von text stehen sollen. und genau hier ist die frage, wie bekomme ich das hin? beim klick soll dann eben nur dieses info-kästchen erscheinen ohne die bildergalerie.

vielen dank schon mal an alle!
momento ist offline   Mit Zitat antworten
Alt 02-04-2008, 10:58   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Gib dem Button einen Instanznamen im Eigenschaftenbedienfeld, klick das Schlüsselbild an und gib (als Ansatz) folgendes Script ins Aktionenbedienfeld:

PHP-Code:
meinButton.onRelease = function(){//nach dem Klick...
   
_root.createMovieClip("con",1);//...neuen MC erstellen...
   
_root.con.createTextField("meinText",1,0,0,200,50);//im MC ein Textfeld erstellen
   
_root.con.meinText.text "blafasel";//und dem Textfeld einen String zuweisen

Zum Formatieren des Textfeldinhalts kannst du bspw. die Textformat-Klasse nutzen. Schau es dir mal in der Flash-Hilfe an. Ein Rechteck kannst ggf. du in den MC unter das Textfeld mit der Flash-Zeichen-API zeichnen lassen, schau dir dazu in der Flash-Hilfe mal die Methoden moveTo, lineTo und beginFill an.

Geändert von agedoubleju (02-04-2008 um 10:59 Uhr)
  Mit Zitat antworten
Alt 02-04-2008, 11:14   #3 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
vielen dank schonmal!

hab das jetzt soweit gemacht. beim testen des films kommt folgende fehlermeldung:

**Fehler** Szene=Scene 1, Ebene=Button, Bild=1:Zeile 1: Anweisung muss innerhalb einer on-Prozedur vorliegen
meinButton.onRelease = function(){//nach dem Klick...

Anzahl der ActionScript-Fehler: 1 Gemeldete Fehler: 1

Geändert von momento (02-04-2008 um 12:13 Uhr)
momento ist offline   Mit Zitat antworten
Alt 02-04-2008, 13:56   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Lies dir noch mal meinen Beitrag durch, besonders das "klick das Schlüsselbild an". Du hast den Button angeklickt und dann Script eingegeben...
  Mit Zitat antworten
Alt 02-04-2008, 14:03   #5 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
Das versteh ich nicht ganz. Wenn ich das Schlüsselbild in der Ebene, wo der Button liegt anklicke, ist der Button selbst auch automatisch "angeklickt" (blau umrandet)...

habs nochmal probiert. fehlermeldung bleibt aus, aber beim klick auf den button passiert nichts.... mhhh

Geändert von momento (02-04-2008 um 16:35 Uhr)
momento ist offline   Mit Zitat antworten
Alt 02-04-2008, 17:14   #6 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Das versteh ich nicht ganz. Wenn ich das Schlüsselbild in der Ebene, wo der Button liegt anklicke, ist der Button selbst auch automatisch "angeklickt"
In Flash gibt es zwei verschiedene Arten von Scripten: die einen liegen auf einer Zeitleiste, die anderen auf den Buttons bzw. MCs.

Clipevents auf den Buttons/MCs haben den Vorteil, dass du bei Events keinen Instanznamen verwenden musst, weil der Player ja "weiß", auf welches Objekt oder welche Objektvariablen sich das Script bezieht. Nachteil: du hast deine Scripte über diverse Objekte verteilt. Clipevents sind aber veraltet und sind bspw. in AS3 nicht mehr zulässig.

Zeitleistenscripte benötigen ggf. Instanznamen, du kannst aber alle Scripte an einer Stelle sammeln.

Welches der beiden Systeme du nutzt, hängt davon ab, ob du vor Eingabe des Scripts die Zeitleiste bzw. ein Schlüsselbild geklickt hast oder ob du einen MC/Button geklickt hast. Das hat dann auch nichts mit der Umrandung zu tun...

Zitat:
Fehlermeldung bleibt aus, aber beim klick auf den button passiert nichts.
Setz mal einen trace in den Event und check im Testmodus, ob der Klick überhaupt ankommt:
PHP-Code:
meinButton.onRelease = function(){//nach dem Klick...
   
trace("Klick");
   
_root.createMovieClip("con",1);//...neuen MC erstellen...
   
_root.con.createTextField("meinText",1,0,0,200,50);//im MC ein Textfeld erstellen
   
_root.con.meinText.text "blafasel";//und dem Textfeld einen String zuweisen

Wenn im Ausgabefenster nichts steht, check noch mal den Instanznamen zum Button, bzw. den Objektpfad zum Button.
  Mit Zitat antworten
Alt 02-04-2008, 17:40   #7 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
Ah, okay, das mit den verschiedenen Aktionen wusste ich nicht.

Also beim Testen öffnet sich beim Klick ein Fenster wo "Klick" drin steht - das scheint schon mal zu funktionieren.

Aber wie bekomme ich es jetzt hin, dass der Inhalt nicht in einem neuen, separaten Fenster erscheint, sondern schon noch im gleichen. Ich habe links die Thumbs und rechts die Bilder in groß. Jetzt soll beim Klick auf den Button in genau diesem rechten Fenster, wo sonst die Bilder zu sehen sind, der Infotext erscheinen.

Hab hier mal was gefunden, so soll´s werden (siehe Klick auf "About" oder "Contact"): www.anneka.de
momento ist offline   Mit Zitat antworten
Alt 03-04-2008, 08:21   #8 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Ich habe links die Thumbs und rechts die Bilder in groß. Jetzt soll beim Klick auf den Button in genau diesem rechten Fenster, wo sonst die Bilder zu sehen sind, der Infotext erscheinen.
Dann erstell den entsprechenden MC in dem Bereich, wo du ihn haben willst. Oder erstell keinen neuen MC, sondern erstell das Textfeld in dem schon vorhandenen MC...
PHP-Code:
//bspw. in irgendeinem "rechten" Fenster
meinButton.onRelease = function(){//nach dem Klick...
   
trace("Klick");
   
_root.createMovieClip("con",1);//...neuen MC erstellen...
   
_root.con._x 100;
   
_root.con._y 50;//oder die Positionen des vorhandenen MCs nutzen

   
_root.con.createTextField("meinText",1,0,0,200,50);//im MC ein Textfeld erstellen
   
_root.con.meinText.text "blafasel";//und dem Textfeld einen String zuweisen

Oder wenn "rechts" schon eine MC-Instanz existiert:
PHP-Code:
meinButton.onRelease = function(){//nach dem Klick...
   
trace("Klick");
   
   
_root.meineInstanz.createTextField("meinText",1,0,0,200,50);//im MC ein Textfeld erstellen
   
_root.meineInstanz.meinText.text "blafasel";//und dem Textfeld einen String zuweisen

  Mit Zitat antworten
Alt 03-04-2008, 17:51   #9 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
Okay, die zweite Variante klappt. Der Text erscheint dann auf der Fläche, wo die Bilder zu sehen sind. Allerdings ist auch das jeweilige Bild selbst, welches gerade offen ist, noch sichtbar. Das soll möglichst noch verschwinden, um nur Text zu sehen.

Die erste Variante klappt noch nicht so ganz. Mir ist nicht ganz klar, ob Flash beim Befehl "create movieclip" tatsächlich völlig selbstständig einen MC erstellt ohne dass ich da noch was machen muss? Wo finde ich diesen MC? In der Bibliothek finde ich nichts. (Sorry, bin halt noch Anfängerin)

Ich hab´s folgendermaßen gemacht:

Ich habe meinen Button mit entsprechendem Instanzname versehen.

Auf dem Button selbst liegt kein Script.

Auf der Button-Ebene auf dem ersten Schlüsselbild liegt dein Script (das
obere)

"mein button" durch meinen Instanznamen ersetzt

Ich teste den Film:

Beim Klick erscheint das Ausgabefenster mit dem Wort "Klick"


Was habe ich falsch gemacht?
momento ist offline   Mit Zitat antworten
Alt 03-04-2008, 18:08   #10 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
Vielleicht hilft es ja, wenn ich mal mein Script zeige. Das ganze gab´s mal zum Download irgendwo. Dieses Script liegt auf meiner Fläche, in der die Bilder erscheinen:

PHP-Code:
var tnNr;
//abstand des rahmens zum bild
spacing 20;
container._alpha 0;
var 
curLength;
MovieClip.prototype.loadPic = function(picid) {
    
info.text "";
    
this._alpha 0;
    
this.loadMovie(pic);
    
temp this._parent.createEmptyMovieClip("temp2"998);
    
temp.onEnterFrame = function() {
        var 
container.getBytesTotal(), container.getBytesLoaded();
        if (
Math.round(l/t) == && container._width != && container._height != 0) {
            var 
container._width+spacingcontainer._height+spacing;
            
border.resizeMe(whid);
            
delete this.onEnterFrame;
        }
    };
};
MovieClip.prototype.resizeMe = function(whid) {
    var 
speed 4;  // geschwindigkeit des bildwechsels
    
container._alpha 0;
    
this.onEnterFrame = function() {
        
this._width += (w-this._width)/speed;
        
this._height += (h-this._height)/speed;
        if (
Math.abs(this._width-w)<&& Math.abs(this._height-h)<1) {
            
this._width w;
            
this._height h;
            
container._x this._x-this._width/2+spacing/2// position der bilder im rahmen
            
container._y this._y-this._height/2+spacing/2;
            
info._y Math.round(this._y+this._height/2+spacing/2);
            
container._alpha += 5;  //alphawert der bilder
            
if (container._alpha>90) {
                
info.text id;
                
container._alpha 100;  //alphawert der bilder nach erscheinen
                
delete this.onEnterFrame;
            }
        }
    };
};
function 
galleryChoice(q) {
    
pArray = new Array();
    
tArray = new Array();
    
iArray = new Array();
    
my_xml = new XML(); // xml-objekt erzeugen
    
for (var 0j<curLengthj++) {
        
this.th_nav["thmb"+j].removeMovieClip();
    }
    
my_xml.ignoreWhite true// störende Leerzeichen ignorieren
    
my_xml.onLoad = function(loaded) { // Überprüfen des Lesevorgangs
        
if (loaded) {
            
gallery this.firstChild.childNodes[q]; //Mit Hilfe der Eigenschaft firstChild und childNodes lassen sich die Strukturen des XML-Objekts verarbeiten. Die Variablenanzahl erhält die Anzahl der im XML-Objekt enthaltenen Einträge. Diese werden auch als Knoten (nodes) bezeichnet.
            
curLength gallery.childNodes.length;
            for (var 
0i<gallery.childNodes.lengthi++) {
                
pArray.push(gallery.childNodes[i].attributes.source);
                
tArray.push(gallery.childNodes[i].attributes.thumb);
                
iArray.push(gallery.childNodes[i].attributes.title);
            }
        }
        
delay setInterval(makeButtons50);
    };
    
my_xml.load("gallery.xml"); // xml-datei einlesen
}
function 
makeButtons() {
    
tnNr 0;  //gibt an, wieviele thumbs unsichtbar sein sollen
    
clearInterval(delay);
    for (var 
0i<tArray.lengthi++) {
        var 
thb th_nav.thmb.duplicateMovieClip("thmb"+i1000+i);
        
thb.id i;
        
thb._x i%    6*49//3 steht für die spaltenanzahl der thumbs; 50 für die abstände zw. den thumbs
        
thb._y Math.floor(i/6)*49;
    }
    
loadButtons();
}
function 
loadButtons() {
    var 
tbox th_nav["thmb"+tnNr].box;
    
tbox.loadMovie(tArray[tnNr]);
    
temp this.createEmptyMovieClip("tmp"+tnNr999);
    
temp.onEnterFrame = function() {
        
bt tbox.getBytesTotal();
        
bl tbox.getBytesLoaded();
        if (
bt == bl && bt>4) {
            
nextButton();
            
delete this.onEnterFrame;
        }
    };
}
function 
nextButton() {
    if (
tnNr<tArray.length-1) {
        
tnNr++;
        
loadButtons();
    } else {
        
activateButtons();
    }
}
function 
activateButtons() {
    
mainButtons();
    for (var 
0i<pArray.lengthi++) {
        var 
but th_nav["thmb"+i];
        
but.id i;
        
but.onRelease = function() {
            
container.loadPic(pArray[this.id], iArray[this.id]);
            
disButtons2(this.id);
        };
    }
    
container.loadPic(pArray[0], iArray[0]);
    
disButtons2(0);
}
butArray = new Array();
butArray = ["gal1_btn""gal2_btn""gal3_btn""gal4_btn"];
function 
mainButtons() {
    for (var 
0i<butArray.lengthi++) {
        
this[butArray[i]].id i;
        
this[butArray[i]].onRelease = function() {
            
galleryChoice(this.id);
            
disButtons(this.id);
        };
    }
}
function 
disButtons2(d) {
    for (var 
0i<tArray.lengthi++) {
        if (
!= d) {
            
this.th_nav["thmb"+i].enabled 1;
            
this.th_nav["thmb"+i].box._alpha 100//alphawert der thumbs im normalzustand
        
} else {
            
this.th_nav["thmb"+i].enabled 0;
            
this.th_nav["thmb"+i].box._alpha 30//alphawert der thumbs im gedrückten zustand
        
}
    }
}
function 
disButtons(d) {
    for (var 
0i<butArray.lengthi++) {
        if (
!= d) {
            
this[butArray[i]].enabled 1;
            
this[butArray[i]].gotoAndStop(1);
        } else {
            
this[butArray[i]].enabled 0;
            
this[butArray[i]].gotoAndStop(2);
        }
    }
}
disButtons(0);
galleryChoice(0); 



Dann habe ich noch eine separate Script-Ebene, im ersten Schlüsselbild liegt folgendes Script:

PHP-Code:
this.meinBtn.klick = -1;
this.meinBtn.onRelease = function(){
   
this.klick*=-1;//Softwareschalter wechselt zwischen -1 und +1
   
trace("this.klick="+this.klick);
   if(
this.klick==1){
      
_level0.createEmptyMovieClip("con",1);//leeren MC erstellen
      
_level0.con.loadMovie("infos1.swf");//und in diesen MC ein Bild nachladen
   
}
   else{
      
_level0.con.removeMovieClip();//MC löschen
   
}


Ich hoffe, das ist jetzt nicht zu kompliziert

Geändert von agedoubleju (03-04-2008 um 20:34 Uhr)
momento ist offline   Mit Zitat antworten
Alt 03-04-2008, 19:44   #11 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
ob Flash beim Befehl "create movieclip" tatsächlich völlig selbstständig einen MC erstellt ohne dass ich da noch was machen muss?
Flash erstellt tatsächlich völlig selbständig zur Laufzeit einen MC... Und damit ist deine andere Frage auch beantwortet: zur Laufzeit kannst du nicht in die Bibliothek schauen und ergo den MC auch nicht sehen.

Du kannst aber mit einem trace-Befehl im Testmodus seine Existenz überprüfen.

Nur, dein hier gepostetes Script solltest du mal etwas kommentieren. Und in PHP-Tags legen, damit man es besser lesen kann...
  Mit Zitat antworten
Alt 03-04-2008, 20:04   #12 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
Hm, okay, dass ich den MC selbst nicht sehe ist dann also richtig.
Aber warum sehe ich beim Testen die Schrift "blafasel" nicht? Bei der anderen Variante sehe ich sie ja.

Mein Script kann ich leider nicht vielmehr kommentieren, das ist das Problem, ich habe es nicht selbst geschrieben. Habe schon versucht mir das selbst alles verständlich zu machen, die Befehle deren Funktion ich rausgefunden habe, habe ich kommentiert. Aber für den Rest fehlen mir leider die Kenntnisse.
momento ist offline   Mit Zitat antworten
Alt 03-04-2008, 20:36   #13 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Aber warum sehe ich beim Testen die Schrift "blafasel" nicht? Bei der anderen Variante sehe ich sie ja.
Wo denn im Script?
  Mit Zitat antworten
Alt 03-04-2008, 21:07   #14 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 79
Ich meine die fett geschriebene Stelle in diesem Script, das auf der Button-Ebene liegt:


PHP-Code:

//bspw. in irgendeinem "rechten" Fenster
meinButton.onRelease = function(){//nach dem Klick...
trace("Klick");
_root.createMovieClip("con",1);//...neuen MC erstellen...
_root.con._x = 100;
_root.con._y = 50;//oder die Positionen des vorhandenen MCs nutzen

_root.con.createTextField("meinText",1,0,0,200,50) ;//im MC ein Textfeld erstellen
_root.con.meinText.text = "BLAFASEL";//und dem Textfeld einen String zuweisen
}


Beim Testen sehe ich den Text "Blafasel" nicht. Kann es sein, dass er hinter dem Bereich steht, in dem meine Bilder geladen werden und genau davon verdeckt wird? Hatte schon die Zahlenwerte für die Positionen geändert, aber auch das hat nicht geholfen.
momento ist offline   Mit Zitat antworten
Alt 03-04-2008, 21:20   #15 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Kann es sein, dass er hinter dem Bereich steht
Dann gib eine andere Tiefe für den MC an, bspw 1000 statt 1...
  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 00:46 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele