| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Aug 2001
Beiträge: 18
|
Hallo, habe versucht mal das tutorial xml-menu nachzubauen. es ist ein super menu und bitte nur als konstruktive kretik verstehen, es scheint ein tut von einem profi für profies zu sein, es ist leider zu wenig dokomentiert und somit verliert man das verständnis und es ist teilweise in verkürzter programmiertechnik geschrieben das einem nicht profi den rest gibt. habe nun wie erwähnt versucht das tut nachzubauen, mit für mich aussagekräftige variabel-namen und ausschreiben der verkürzten prog.-technik. leider ist mir dabei ein fehler passiert und wie gesagt ich verstehe halt den code immer noch nicht? 1) mein menu baut sich mit dem hauptmenu auf und die untermenu's fahren auch aus, aber es fehlen die teilweise die button's 2)es gibt einen licht effekt der die menu's kurz weiß hinterlegt (echt geil), aber ich finde keinerlei zusammenhang wie dieser effekt auf die bühne kommt??? Hier ein Link wie es aussehen sollte: So sieht das original Menu aus setze hier mal meinen code: Code: //Horizontalles Menue mit XML Datei erstellen
//
// Verwendete Fonts erstellen
//Arial
font1 = new TextFormat();
font1.font = "ARIAL";
font1.color = 0xFFFFFF;
font1.size = 10;
font1.bold = true;
//Tahoma
font2 = new TextFormat();
font2.font = "Tahoma";
font2.color = 0x000000;
// Definierte Variablen
startpos_x = 0;
startpos_y = 30;
ebene = 10000000;
abstand = 2;
// Textfeld erstellen
_root.createTextField("ausgabe", 0, 20, 5, 200, 20);
// Tests für Textfeld überprüfung
//ausgabe.text = ("Hallo");
//ausgabe.textColor = 0x123456;
//ausgabe.background = 0x222233;
//ausgabe.border = true;
//ausgabe.borderColor = 0x440066;
// Tests
//
// faxxen
warrantpos = 1000;
warrant.onEnterFrame = function() {
this._x = this._x+((-this._x+warrantpos)*.3);
};
// ende faxxen
// Menue Ausfahren - Funktion
ausfahren = function (name1, anzahl1, a) {
_root["control"+a].onEnterFrame = function() {
for (var i = 1; i<=anzahl1; i++) {
var mc1 = _root[name1+i];
// alle rausfahren
if (mc1._y != mc1.y+(mc1.id*hoch-hoch)) {
mc1._y = mc1._y+5;
} else {
0;
}
}
// wenn alle draußen sind wieder löschen
if (_root[name1+anzahl1]._y>=(_root[name1+anzahl1].y+(_root[name1+anzahl1].id*hoch-hoch))) {
delete this.onEnterFrame;
} else {
0;
}
};
};
// Menue Einfahren - Funktion
einfahren = function (name1, anzahl1, a, starty) {
_root["control"+a].onEnterFrame = function() {
for (var i = 1; i<=anzahl1; i++) {
// alle reinfahren
if (_root[name1+i]._y != starty) {
_root[name1+i]._y = (_root[name1+i]._y-5);
} else {
0;
}
}
// wenn alle wieder eingefahren sind - alle löschen
if (_root[name1+anzahl1]._y<=starty) {
_root.ausgabe.text = "";
delete this.onEnterFrame;
} else {
0;
}
};
};
// Erstellen
erstellen = function (a, name1, anzahl1, startx, starty, ebene) {
MovieClip.prototype.funktionen = function() {
with (this) {
// wenn du ein hauptmenuepunkt bist, dann lade dir den mc_hauptmenue aus der
// bibliothek und bringe den effekt mc (licht) nach vorn
if (this.id == 1) {
this.attachMovie("hauptmenue", "hauptmenuedummy", 0);
this.licht.swapDepths(0);
} else {
0;
}
// erstelle ein Textfeld für die Button Beschriftung
createTextField("textfeld", 1, 10, 2, 90, 18);
// damit der Cursor nicht zu Tabulator wird
textfeld.selectable = 0;
// Textfeld beschriften
if (this.id == 1) {
textfeld.text = name1;
} else {
textfeld.text = (_root["unterarray"+a][this.id-2]);
}
// schriftart zuweisen
if (this.id == 1) {
textfeld.setTextFormat(font1);
} else {
textfeld.setTextFormat(font2);
}
}
this.onPress = function() {
if (this.id != 1) {
warrantpos = this._x+50;
ausgabe._x = this._x+10;
ausgabe.text = this.textfeld.text;
ausgabe.setTextFormat(font1);
} else {
0;
}
};
this.onRollOut = function() {
// einfahren
einfahren(name1, anzahl1, a, startpos_y);
};
this.onRollOver = function() {
this.licht.play();
// ausfahren
ausfahren(name1, anzahl1, a);
};
};
//
// Das eigentliche erstellen der Buttons
//
for (var i = 1; i<=anzahl1; i++) {
var mc = _root.attachMovie("untermenue", name1+i, ebene-i);
_root.hoch = mc._height;
_root.breit = mc._width;
mc._x = startx;
mc._y = starty;
mc.y = mc._y;
mc.id = i;
// hier werden alle buttons in das array gepusht
// dient lediglich zum positionieren (siehe zeilen 75 und 136)
_root.rootarray.push(mc);
mc.funktionen();
}
};
los = function () {
// erstellung eines arrays zum einlesen aller erstellten buttons (wird wohl Zeile 94 gefüllt)
_root.rootarray = [];
// für jeden hauptmenuepunkt einen seperaten controller
// erstellen, der die onenterframe-funktion für das
// ein und ausfahren übernehmen wird (siehe zeile 15 und 24)
for (var i = 0; i<array.length; i++) {
_root.createEmptyMovieClip("control"+i, i+100000);
}
// aufrufen der erstellungsfunktion mit übergabe
// der namen für die einzelnen buttons etc. ( siehe ca. zeile 34)
for (var i = 0; i<array.length; i++) {
erstellen(i, array[i], _root["unterarray"+i].length+1, startpos_x, startpos_y, ebene);
// bei jedem schleifendurchlauf wird die _x-position und die tiefe verändert
startpos_x += _root.breit+abstand;
ebene -= _root["unterarray"+i].length+1;
}
};
menu = new XML();
menu.ignoreWhite = true;
menu.onLoad = function(ok) {
if (ok) {
// array für die hauptmenupunkte
_root.array = [];
// anzahl der hauptmenuepunkte
var anzahl_hauptmenuepunkte = this.firstChild.childNodes.length;
for (var i = 0; i<anzahl_hauptmenuepunkte; i++) {
//arrays für die Untermenuepunkte
_root["unterarray"+i] = [];
// hauptmenuepunkte in das array schieben
_root.array.push(this.firstChild.childNodes[i].nodeName);
// untermenuepunkte in die entsprechenden arrays schieben
for (k in this.firstChild.childNodes[i].attributes) {
_root["unterarray"+i].push(this.firstChild.childNodes[i].attributes[k]);
}
}
// positionierung Stage-mitte
//ermitteln des zuletzt zuzuweisenden buttontext
// zur überprüfungdes vorhandenseins auf der bühne
var letzter_button = _root["unterarray"+(anzahl_hauptmenuepunkte-1)][_root["unterarray"+(anzahl_hauptmenuepunkte-1)].length-1];
//
// den beobachter erstellen (watcher)
_root.createEmptyMovieClip("watcher", -1);
_root.watcher.onEnterFrame = function() {
// die lage peilen ....
for (var jj in _root) {
// wenn also der letzte text (last ) vergeben ist ...
if (eval(jj).textfeld.text == letzter_button) {
// beobachten einstellen
delete this.onEnterFrame;
// aus dem array mit den erstellten instanzen
// den am weitesten rechts (letzten) heraussuchen
var letzter_eintrag = _root.rootarray[_root.rootarray.length-1];
// tests
// dessen _x und _width zur ermittlung des verbleibenden
// platzes auf der stage benutzen
distance = (Stage.width-(letzter_eintrag._x+letzter_eintrag._width))/2;
// alle erstellten instanzen (die ja im array _root.rootarray
// liegen siehe ca. 75 und 68 um den betrag nach rechts schieben
for (var yy = 0; yy<_root.rootarray.length; yy++) {
_root.rootarray[yy]._x += distance;
}
}
}
};
// ende positionierung Stage-mitte
// startbefehl zum generieren (ca. 74)
los();
}
};
menu.load("menue.xml"); |
| | |
| | #3 (permalink) |
| _//\\#//\\_ Registriert seit: Jan 2003
Beiträge: 7.060
|
hmm...ist es nicht besser, du schmeißt deinen ersten versuch einfach mal in die tonne, nimmst das original nochmal vor und fragst dann ganz gezielt step by step die punkte ab, die du noch (!) nicht raffst ? ich denke, das ist sinnvoller, als daß sich jetzt jemand auf eine mühseelige fehlersuche begibt , zumindest für dein verständnis .grz |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Aug 2001
Beiträge: 18
|
Hallo warrantmaster, ist den dieses tut von dir??? Ich wäre dir wirklich dankbar wenn du mal meine fla downloads und einfach startest, vielleicht fällt dir ja gleich auf was das Prob. ist. Und was ich gar nicht verstehe, wie wird der Lichteffect aufgerufen ??? Erklär mir doch bitte wenigstens den Lichteffect! thx |
| | |
| | #6 (permalink) |
| _//\\#//\\_ Registriert seit: Jan 2003
Beiträge: 7.060
|
hab sie schon geladen gehabt, ist mir aber ehrlich gesagt zu müßig zwischen deinen veränderungen herumzustochern (nicht bös gemeint) .licht: this.licht.play() im rollover der mc's. dazu mußt du natürlich den 'licht' mc in deinem button-mc haben und auch den instanznamen 'licht' vergeben haben. btw, wenn du tatsächlich ein wenig lernen willst, dann mach es entweder wie vorgeschlagen, oder zieh dir den ganzen originalthread rein. btw nr. 2: wenn du das script hast, dann weißt du auch, von wem es ist. grz edit: licht ist erledigt |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Apr 2002 Ort: Flensburg
Beiträge: 12
| Hilfe - ich hab ein Problem mit deinem Submenu
Hallo warrantmaster ich habe deinen Flash Code für das XML Menu mit folgender XML Datei verwendet. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> - <xml_for_flash> - <menu> - <section level="1" name="Fohlen" id="2" link="index.php?id=2" target="bf_xml_for_flash" type="444"> <subsection level="2" name="Fohlen 1" id="9" link="index.php?id=9" target="bf_xml_for_flash" type="444" /> </section> <section level="1" name="Jungpferde" id="3" link="index.php?id=3" target="bf_xml_for_flash" type="444" /> <section level="1" name="Nachwuchs" id="4" link="index.php?id=4" target="bf_xml_for_flash" type="444" /> <section level="1" name="News" id="10" link="index.php?id=10" target="bf_xml_for_flash" type="444" /> <section level="1" name="Sport" id="5" link="index.php?id=5" target="bf_xml_for_flash" type="444" /> <section level="1" name="Zucht" id="6" link="index.php?id=6" target="bf_xml_for_flash" type="444" /> <section level="1" name="Leistungen" id="8" link="index.php?id=8" target="bf_xml_for_flash" type="444" /> <section level="1" name="Kontakt" id="7" link="index.php?id=7" target="bf_xml_for_flash" type="444" /> </menu> - <tt_content uid="5"> - <header> <text absatz="Eine ueberschrift" /> </header> - <bodytext> <text absatz="Schon wieder sind bei Autobombenanschlägen in Bagdad viele Menschen ums Leben gekommen. Innerhalb einer Stunde kam es in der irakischen Hauptstadt zu zwei verheerenden Explosionen. Auch nahe der Stadt Mossul starben fünf Menschen durch eine Autobombe." /> </bodytext> </tt_content> - <tt_content uid="6"> - <header> <text absatz="Text mit bild" /> </header> - <bodytext> <text absatz="Schon wieder sind bei Autobombenanschlägen in Bagdad viele Menschen ums Leben gekommen. Schon wieder sind bei Autobombenanschlägen in Bagdad viele Menschen ums Leben gekommen. Innerhalb einer Stunde kam es in der irakischen Hauptstadt zu zwei verheerenden Explosionen. Auch nahe der Stadt Mossul starben fünf Menschen durch eine Autobombe. Schon wieder sind bei Autobombenanschlägen in Bagdad viele Menschen ums Leben gekommen. Innerhalb einer Stunde kam es in der irakischen Hauptstadt zu zwei verheerenden Explosionen. Auch nahe der Stadt Mossul starben fünf Menschen durch eine Autobombe." /> </bodytext> - <image> <text absatz="Eichenblatt.jpg" /> </image> </tt_content> </xml_for_flash> Daraus habe ich das Menu ausgelesen, das Auslesen klappt auch alles, nur ein Problem gibts. Er zeigt mit die Untermenupunkte nicht an (die IDs liest er) hier der Code aus meiner Flash Datei: startx = 50;//<-----------sollte klar sein starty = 10; font1 = new TextFormat(); font1.size = 9; font1.color = 0x003366; font1.font = "ARIAL"; font2 = new TextFormat(); font2.size = 9; font2.color = 0xFFFFFF; font2.font = "ARIAL"; menue = []; count = 0; verzoegerung = 25; abstand = 1;//<---------höhenabstand zwischen den buttons // // hauptmenue make_menue = function () { var anz = menue.length; for (var i = 1; i<=anz; i++) { var mc = _root.attachMovie('mc2', 'm'+i, i+1000); mc.createTextField('txt', 1, 0, 0, 100, 15);// <--------textfeldparameter einstellen mc.txt.selectable = 0; mc._x = startx; mc._y = starty+i*(mc._height+abstand); mc.txt.text = " "+menue[i-1]; mc.txt.setTextFormat(font2);// <--------textformat auswählen mc._name = menue[i-1]+"1"; mc.xmlid = jxml_id[i-1]; mc.id = menue[i-1]; mc.onRollOver = function() { this.licht.play(); for (var c = 0; c<_root.menue.length; c++) { _root[menue[c]+"1"]._x = startx; } if (_root[this.id] != undefined) { this._x == startx ? this._x += 10 : 0; this.submenue(_root[this.id].length, this._x); } else { this.onPress = function() { _root.ausgabe.text = this._name;//<---buttonaktionen einfügen }; this.onRelease = function() { // getURL("http://marlene.flavor-games.de/heim/index.php?id="+this.xmlid, "_blank"); // //<--------------------------------buttonaktionen einfügen // }; } }; mc.onRollOut = function() { this.licht.gotoAndStop(1); if (_root[this.id] != undefined) { if (_root._xmouse<this._x+this._width) { this._x -= 10; _root.holder.removeMovieClip(); } } }; } }; //###################################### // untermenues // // erstellen MovieClip.prototype.submenue = function(subzahl, startxx) { _root.createEmptyMovieClip('holder', 1000); for (var i = 1; i<=subzahl; i++) { var mc1 = _root.holder.attachMovie('mc2', 'm'+i, i+1100); mc1.createTextField('txt', 1, 0, 0, 100, 15); mc1.txt.selectable = 0; mc1._x = startxx+this._width+2; mc1._y = this._y+(i-1)*(mc1._height+abstand); mc1.txt.text = " "+_root[this.id][i-1]; mc1.txt.setTextFormat(font2); mc1._name = _root[this.id][i-1]; mc1.onPress = function() { _root.ausgabe.text = this._name;//<----buttonaktionen einfügen }; mc1.onRelease=function(){ // ////<--------------------------------------buttonaktionen einfügen // } mc1.onRollOver = function() { this.licht.play(); count = 1; }; mc1.onRollOut = function() { this.licht.gotoAndStop(1); count = 0; xx = 0; this.onEnterFrame = function() { if (xx>verzoegerung && count == 0) { delete this.onEnterFrame; for (var c = 0; c<_root.menue.length; c++) { _root[menue[c]+"1"]._x = startx; } _root.holder.removeMovieClip(); } xx++; }; }; } }; // //###################################### // xml auslesen // System.useCodepage = true; var jxml = new XML(); jxml.ignoreWhite = true; jxml.onLoad = function(ok) { if (ok) { // submenuepunkte _root[jxml.firstChild.firstChild.childNodes[i].nodeName] // jxml_subid=[]; for (var i = 0; i<jxml.firstChild.firstChild.firstChild.childNodes .length; i++) { //menue.push(jxml.firstChild.firstChild.firstChild.c hildNodes[i].attributes.name); /*Was muß hier hin??!!*/menue.push(jxml.firstChild.firstChild.firstChild.c hildNodes[i].attributes.name); jxml_subid[i]=jxml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes.id; trace(jxml_subid[i]); } /*var j = this.firstChild.firstChild.childNodes[0].childNodes.length; for (var z = 0; z<j; z++) { // submenue-arrays erstellen _root[this.firstChild.firstChild.childNodes[0].childNodes[z].nodeName] = []; // // submenue-arrays füllen var a = Number(this.firstChild.firstChild.childNodes[0].childNodes[z].attributes.id); for (var k = 0; k<a; k++) { _root[this.firstChild.firstChild.childNodes[0].childNodes[z].nodeName].push(this.firstChild.firstChild.childNodes[0].childNodes[z].attributes.id); trace(this.firstChild.firstChild.childNodes[0].childNodes[z].attributes.id); } }*/ // hauptmenuepunkte // jxml_id=[]; for (var i = 0; i<jxml.firstChild.firstChild.childNodes.length; i++) { menue.push(jxml.firstChild.firstChild.childNodes[i].attributes.name); jxml_id[i]=jxml.childNodes[0].childNodes[0].childNodes[i].attributes.id; //trace(jxml_id[i]); } } make_menue(); }; jxml.load("http://marlene.flavor-games.de/heim/index.php?id=1&type=444"); Nach 6 Stundén des ewigen herumprobierens muß ich mir eingestehen, dass ich allein nicht weiter komme. Hast du vielleicht ne Idee warum er die Submenupunkte nicht anzeigt? Wäre dir für deine Hilfe sehr dankbar. |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |