Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-11-2003, 16:09   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
Dynamisches Menü mit Bildern (Klick-Problem)

hi!

ich möchte ein dynamisches menü aus dem inhalt einer txt-datei erzeugen lassen. ich habe nun alles so weit hinbekommen, dass die variablen ausgelesen und in ein array gepackt werden. danach wird für jeden button ein mc erstellt und dort ein bild reingepackt. diese vielen bilder werden nun nebeneinander plaziert.
so weit klappt ja auch alles. ich schaffe es aber nicht, diesen movieclips einen befehl zuzuweisen, der ausgeführt wird, sobald man diese anklickt.

wie mach ich das?

hier mal der wichtige teil des codes:

ActionScript:
  1. for(var npic=0; npic<anzahl; npic++)
  2.     {
  3.   _root.filmstreifen.mc_alle.createEmptyMovieClip("prepic"+npic, 10+npic);
  4.       with (_root.filmstreifen.mc_alle["prepic"+npic])
  5.       {
  6.         // setzen der eigenschaften fuer die einzelnen bilder
  7.         //_x =  u.s.w.
  8.         loadMovie(item_bild[npic]);
  9.         _y=5;//Abstand nach oben
  10.         _x=(bildbreite+abstand)*npic;//position der bilder nebeneinander
  11.     }
  12. }

bei jedem schleifendurchlauf werden die eigenschaften des jeweiligen bildes festgelegt (also zB _x)
nun möchte ich, dass diese generierten movieclips klickbar sind. das ereignis möchte ich jeweils vorgeben können.
wie bring ich das da rein?


vielen dank!!
Codex ist offline   Mit Zitat antworten
Alt 08-11-2003, 16:31   #2 (permalink)
Revived @ Sunday
 
Benutzerbild von MacEvil
 
Registriert seit: Apr 2003
Ort: Nowhereland
Beiträge: 3.244
Hi, soviel ich weiss musst du das von Hand machen, sonst sind die Event Handler nur während der Laufzeit der Schleife gültig !
MacEvil ist offline   Mit Zitat antworten
Alt 08-11-2003, 16:34   #3 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
so vielleicht!
ActionScript:
  1. for (var npic = 0; npic<anzahl; npic++) {
  2.     _root.filmstreifen.mc_alle.createEmptyMovieClip("prepic"+npic, 10+npic);
  3.     with (_root.filmstreifen.mc_alle["prepic"+npic]) {
  4.         // setzen der eigenschaften fuer die einzelnen bilder
  5.         //_x =  u.s.w.
  6.         loadMovie(item_bild[npic]);
  7.         _y = 5;
  8.         //Abstand nach oben
  9.         _x = (bildbreite+abstand)*npic;
  10.         //position der bilder nebeneinander
  11.     }
  12.     _root.filmstreifen.mc_alle["prepic"+npic].onPress = function() {
  13.         //was willst den auslösen!!
  14.     };
  15. }
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 08-11-2003, 16:51   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
leider nicht. ich hab das auch schon so ähnlich probiert.
sie sind trotzdem nicht klickbar (also mauszeiger verädnert sich beim drüber fahren nicht, und die funktion wird dementsprechend auch nicht ausgeführt)

Zitat:
Hi, soviel ich weiss musst du das von Hand machen, sonst sind die Event Handler nur während der Laufzeit der Schleife gültig !
wie meinste von hand? und wieso sollten die nur wärend der laufzeit gültig sein? wenn die klickeigenschaften erstmal vergeben wurden, sollten die doch bleiben!? die position bleibt ja auch.
Codex ist offline   Mit Zitat antworten
Alt 08-11-2003, 17:28   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
hab das jetzt mal mit dem debuger durchlaufen lassen.

der kommt bei der folgenden zeile zwar an, springt aber nicht rein
"_root.filmstreifen.mc_alle["prepic"+npic].onPress = function() {"

da muss also noch irgendwas falsch dran sein. der nachfolgende code in den {} ist also erstmal ganz egal, weil er da gar nicht erst rein geht.
woran könnts denn liegen?
Codex ist offline   Mit Zitat antworten
Alt 08-11-2003, 21:28   #6 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
du überschreibst mit dem load alle eigenschaften des
containers.

du brauchst einen beobachter, der die function zuweist,
wenn fertig geladen ist:

ActionScript:
  1. for (var i = 1; i<=10; i++) {
  2.     mc1 = _root.createEmptyMovieClip('holder'+i, i+100);
  3.     mc1._x = (i-1)*100;
  4.     mc1.loadMovie('miniaturen/pic'+i+".jpg", 1);
  5.     var mc = _root.createEmptyMovieClip('watcher'+i, i);
  6.     mc.id = i;
  7.     mc.onEnterFrame = function() {
  8.         if (_root['holder'+this.id]._width>1) {
  9.             _root['holder'+this.id].onPress = function() {
  10.                 trace(this);
  11.             };
  12.              this.removeMovieClip()
  13.         }
  14.     };
  15. }



hi@rusty
warrantmaster ist offline   Mit Zitat antworten
Alt 09-11-2003, 00:20   #7 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
ich verstehe zwar nicht ganz, wieso das so kompliziert geschehen muss, aber ich weiß nun, dass es so in der richtung sein muss. leider funktioniert dein code trotzdem nicht ganz korrekt.
das problem ist, dass _width erst einen wert bekommt, wenn die bilde rgeladen sind, und diese sind erst am schluss geladen, wenn der code schon abgearbeitet wurde. (das hat das ausprobieren ergeben)

ich habe das ganze so versucht:

ActionScript:
  1. for (var npic = 0; npic<anzahl; npic++) {
  2.         _root.filmstreifen.mc_alle.createEmptyMovieClip("prepic"+npic, 10+npic);
  3.         with (_root.filmstreifen.mc_alle["prepic"+npic]) {
  4.                 // setzen der eigenschaften fuer die einzelnen bilder
  5.                 //_x =  u.s.w.
  6.                 loadMovie(item_bild[npic]);
  7.                 _y = 5;
  8.                 //Abstand nach oben
  9.                 _x = (bildbreite+abstand)*npic;
  10.                 _root.filmstreifen.mc_alle["prepic"+npic].nummer=npic;
  11.                 //position der bilder nebeneinander
  12.         }
  13.         var mc = _root.filmstreifen.mc_alle.createEmptyMovieClip('watcher'+i, i);
  14.         mc.id = i;
  15.         mc.onEnterFrame = function() {
  16.                 if (_root.filmstreifen.mc_alle.prepic1._width>1) {
  17.                     //zweite schleife, die die prepics nochmals durchgeht und ihnen
  18.                     //die onPress eigenschaft zuweist
  19.                     for (var mpic = 0; mpic<anzahl; mpic++) {   
  20.                         _root.filmstreifen.mc_alle['prepic'+mpic].onPress = function() {
  21.                                 trace(this);
  22.                                 infotext.text="Nummer: "+mpic;
  23.                         };//ende onpress
  24.                         this.removeMovieClip()
  25.                     }// ende mpic-schleife
  26.                 }//ende if (..._width)
  27.             }//ende on enterframe
  28. }

immerhin sind jetzt alle buttons klickbar. das problem ist, dass alle buttons das selbe ereignis auslösen, aus irgendeinem grund ergibt "infotext.text="Nummer: "+mpic;" bei allen die ausgabe: "Nummer: 6" (ich habe im moment 6 bilder zum testen).
ich dachte, dass meine innere schlfe bewirken würde, dass jedem button eine andere ausgabe zugewiesen wird.
was ist jetzt noch falsch?
Codex ist offline   Mit Zitat antworten
Alt 09-11-2003, 01:16   #8 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
die aufgabe ist schon "unterschiedlich"(siehe trace(this)), nur die variable (mpic) ist in dem moment "gleich".

ActionScript:
  1. for (var mpic = 0; mpic<anzahl; mpic++) {
  2.     _root.filmstreifen.mc_alle['prepic'+mpic].id = mpic;
  3.     _root.filmstreifen.mc_alle['prepic'+mpic].onPress = function() {
  4.         trace(this);
  5.         infotext.text = "Nummer: "+this.id;
  6.     };
  7.     this.removeMovieClip();
  8. }

grz
warrantmaster ist offline   Mit Zitat antworten
Alt 09-11-2003, 16:59   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
klasse!!!

es funktioniert jetzt alles so wie ich das möchte.
ich freu mich echt riesig. hatte mir schon tagelang den kopf darüber zerbrochen und nun hab ich das mit deiner hilfe hinbekommen.

big thx @ warrantmaster!

*mit-honigkuchen-um-die-wette-strahl*
Codex ist offline   Mit Zitat antworten
Alt 09-11-2003, 18:44   #10 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
Zitat:
Geschrieben von Codex
klasse!!!

*mit-honigkuchen-um-die-wette-strahl*

hähä...
warrantmaster ist offline   Mit Zitat antworten
Alt 11-11-2003, 18:50   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
ochmann. jetzt hab ich mich so gefreut, weil alles geht, dann mal testweise hochgeladen, und es geht doch nicht. naja, das gesamte menü wird nicht geladen auf der festplatte geht aber alles ohne probleme.
es hat zwar nichts mehr mit dem ursprünglichen problem zu tun, aber ich poste das trotzdem mal hier, weil mir hier schon so gut geholfen wurde

hier der code. was ist daran denn noch falsch (wenns doch auf der ferstplatte geht)
ps: ja die dateien sind alle im selben verzeichnis, und alle hochgeladen. also das sollte schon alles stimmen)

ActionScript:
  1. on(press){
  2.     _root.infotext.htmlText="<b>Games</b>\nkleine Spielchen für Zwischendurch.";
  3.     loadVariablesNum("inhalt.txt", 0);
  4.     onData = function() {//anfang ondata
  5.         if(dummy == null) return;
  6.         item_bild = new Array();
  7.         item_bild = gamepic.split("\r\n");
  8.        
  9.         item_text = new Array();
  10.         item_text = gamenfo.split("\r\n");
  11.        
  12.         item_url = new Array();
  13.         item_url = gameurl.split("\r\n");
  14.        
  15.         // var fuer die anzahl der bilder
  16.         _global.anzahl=item_bild.length;
  17.         _global.bildbreite = 107;
  18.         _global.abstand = 10;
  19.  
  20.  
  21.  // dieser mc enthaelt alle einzuladenden bilder
  22. _root.filmstreifen.createEmptyMovieClip("mc_alle", 1);
  23. //schleife, die die bilder nebeneinander erzeugt
  24. for (var npic = 0; npic<anzahl; npic++) {
  25.         _root.filmstreifen.mc_alle.createEmptyMovieClip("prepic"+npic, 10+npic);
  26.         with (_root.filmstreifen.mc_alle["prepic"+npic]) {
  27.                 // setzen der eigenschaften fuer die einzelnen bilder
  28.                 //_x =  u.s.w.
  29.                 loadMovie(item_bild[npic]);
  30.                 _y = 5;
  31.                 //Abstand nach oben
  32.                 _x = (bildbreite+abstand)*npic;
  33.                 _root.filmstreifen.mc_alle["prepic"+npic].nummer=npic;
  34.                 //position der bilder nebeneinander
  35.         }
  36.         var mc = _root.filmstreifen.mc_alle.createEmptyMovieClip('watcher'+i, i);
  37.         mc.id = i;
  38.         mc.onEnterFrame = function() {
  39.                 if (_root.filmstreifen.mc_alle.prepic1._width>1) {
  40.                     //zweite schleife, die die prepics nochmals durchgeht und ihnen
  41.                     //die onPress eigenschaft zuweist
  42.                     for (var mpic = 0; mpic<anzahl; mpic++) {
  43.                         _root.filmstreifen.mc_alle['prepic'+mpic].id = mpic;
  44.                         _root.filmstreifen.mc_alle['prepic'+mpic].onPress = function() {
  45.                                 trace(this);
  46.                                 infobild.loadMovie("www-"+item_bild[this.id]);
  47.                                 infobild.url = "http://www.bla.de";//geht irgendwie auch nicht : (
  48.                                 infotext.htmlText=item_text[this.id];
  49.                         };//ende onpress
  50.                         this.removeMovieClip()
  51.                     }// ende mpic-schleife
  52.                 }//ende if (..._width)
  53.             }//ende on enterframe
  54. }
  55.    
  56.     //anfang des blocks aus dem onload teil
  57.     _global.rechts = _root.filmstreifen._x+((bildbreite+abstand)*anzahl);
  58.     _global.links = _root.filmstreifen._x;
  59.     _global.speed = 8;
  60.     _global.left = false;
  61.     _global.right = false;
  62.    
  63. }//ende ondata anweisung
  64. }
Codex ist offline   Mit Zitat antworten
Alt 11-11-2003, 20:38   #12 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
wo liegt das onpress ?
hast du mal das ondata überprüft ?
kommen denn die daten aus deiner txt da an ?

btw,

item_bild = new Array();//<-------ist über
item_bild = gamepic.split("\r\n");//<------weil "split" ein array erzeugt

nochmals btw:

warum nutz du nicht loadvars, ist m.m. nach die bessere variante
zum laden von daten.
warrantmaster ist offline   Mit Zitat antworten
Alt 11-11-2003, 20:54   #13 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
das onpress liegt auf einem button, wenn ich den drück, soll das alles eingelesen und angezeigt werden.
"_root.infotext.htmlText="<b>Games</b>\nkleine Spielchen für Zwischendurch.";"
funktioniert, also liegts nicht an dem onpress.

wie überprüf ich, ob die daten aus der txt datei ankommen, wenn alles auf dem server liegt? auf der festplatte gehts ja. die gleiche textdatei liegt auch im web gleichen verzeichnis.

die txtdatei sieht so aus:

Code:
gameurl=http://www.bla1.htm
http://www.bla2.htm
http://www.bla3.htm&dummy=

&gamepic=game01.jpg
game02.jpg
kurs_bild3.jpg&dummy=

&gamenfo=Information1
<b>bla2</b>
test3
wie gesagt: auf der festplatte gehts. habe ich das ondata vielleicht irgendwie falsch verwendet? das ist das einzige, was mir einleuchten würde, was einen unterschied von lokal zu web machen würde.

Zitat:
item_bild = new Array();//<-------ist über
item_bild = gamepic.split("\r\n");//<------weil "split" ein array erzeugt
k, wusst ich nicht.

Zitat:
warum nutz du nicht loadvars, ist m.m. nach die bessere variante
zum laden von daten.
kanns nicht anders ... ... was würde das denn für einen unterschied machen? schneller? einfacher?
Codex ist offline   Mit Zitat antworten
Alt 11-11-2003, 21:53   #14 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
versuch mal (ohne test immer blöde )

frame 1 auf root:

ActionScript:
  1. make_menue = function () {
  2.     _root.infotext.htmlText = "<b>Games</b>\nkleine Spielchen für Zwischendurch.";
  3.     m = new LoadVars();
  4.     m.onLoad = function(ok) {
  5.         if (ok) {
  6.             item_bild = this.gamepic.split("|");
  7.             item_text = this.gamenfo.split("|");
  8.             item_url = this.gameurl.split("|");
  9.             _global.anzahl = item_bild.length;
  10.             _global.bildbreite = 107;
  11.             _global.abstand = 10;
  12.             _root.filmstreifen.createEmptyMovieClip("mc_alle", 1);
  13.             for (var npic = 0; npic<anzahl; npic++) {
  14.                 _root.filmstreifen.mc_alle.createEmptyMovieClip("prepic"+npic, 10+npic);
  15.                 with (_root.filmstreifen.mc_alle["prepic"+npic]) {
  16.                     loadMovie(item_bild[npic]);
  17.                     _y = 5;
  18.                     _x = (bildbreite+abstand)*npic;
  19.                     _root.filmstreifen.mc_alle["prepic"+npic].nummer = npic;
  20.                 }
  21.                 var mc = _root.filmstreifen.mc_alle.createEmptyMovieClip('watcher'+i, i);
  22.                 mc.id = i;
  23.                 mc.onEnterFrame = function() {
  24.                     if (_root.filmstreifen.mc_alle.prepic1._width>1) {
  25.                         for (var mpic = 0; mpic<anzahl; mpic++) {
  26.                             _root.filmstreifen.mc_alle['prepic'+mpic].id = mpic;
  27.                             _root.filmstreifen.mc_alle['prepic'+mpic].onPress = function() {
  28.                                 trace(this);
  29.                                 infobild.loadMovie("www-"+item_bild[this.id]);//<-----die bilder müssen also "www-game01.jpg" z.b. heißen
  30.                                 infobild.url = "http://www.bla.de";//<------verstehe ich überhaupt nicht ???
  31.                                 infotext.htmlText = item_text[this.id];//<-------sollten jetzt die texte stehen("Information1" z.b)
  32.                             };
  33.                             this.removeMovieClip();
  34.                         }
  35.                     }
  36.                 };
  37.             }
  38.             _global.rechts = _root.filmstreifen._x+((bildbreite+abstand)*anzahl);
  39.             _global.links = _root.filmstreifen._x;
  40.             _global.speed = 8;
  41.             _global.left = false;
  42.             _global.right = false;
  43.         }
  44.     };
  45.     m.load("inhalt.txt");
  46. };


auf deinen button:
ActionScript:
  1. on (press) {
  2.     _root.make_menue();
  3. }


und in die txt :


&gameurl=http://www.bla1.htm|http://www.bla2.htm|http://www.bla3.htm&
&gamepic=game01.jpg|game02.jpg|kurs_bild3.jpg&
&gamenfo=Information1|<b>bla2</b>|test3&
warrantmaster ist offline   Mit Zitat antworten
Alt 11-11-2003, 23:00   #15 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 15
ja tatsächlich
warum nur nicht schon vorher!?

also du bist echt genial

damit du auch weißt, wobei du mir eigentlich hilfst: klick
das meiste am design ist vorübergehend.
funktionsweise: man wählt eine kategorie über die unteren buttons, oben erscheinen kleine vorschaubilder, wenn man diese anklickt komm ein text und ein großes bild daneben, das beim klicken eine webseite aufrufen soll.
(deshalb auch dieses ominöse
"infobild.url = "http://www.bla.de";//<------verstehe ich überhaupt nicht ???". ich hab aber schon gemerkt, dass das eh nicht funktioniert. och männo : (. wie denn sonst?)
soll übrigens ein fun-portal mit regelmäßigen updates werden (die ich in die txt-datei eintragen will und nicht jedesmal die swf ändern.)
wenn das endlich ALLES so funktioniert, wie ich das will, wird das design gemacht. : )

jedenfalls kann ich jetzt ruhig schlafen können, weil das menü jetzt doch funktioniert.

danke.
Codex ist offline   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 05:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele