Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-09-2004, 08:48   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2001
Beiträge: 18
Question Probleme mit dem Tutorial XML-Menu mit Flash

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");
habe mich echt bemüht diesen code zu verstehen, aber nach nun 3 tagen gebe ich auf und hoffe das mir jemand weiterhelfen kann!
Angehängte Dateien
Dateityp: zip xml.zip (9,1 KB, 13x aufgerufen)
neuland ist offline   Mit Zitat antworten
Alt 22-09-2004, 19:50   #2 (permalink)
Neuer User
 
Registriert seit: Aug 2001
Beiträge: 18
Hallo kann den mal keiner weiter helfen

bin echt hilflos...
bitte, bitte, helft mir doch weiter
neuland ist offline   Mit Zitat antworten
Alt 22-09-2004, 20:05   #3 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
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
warrantmaster ist offline   Mit Zitat antworten
Alt 22-09-2004, 20:44   #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
neuland ist offline   Mit Zitat antworten
Alt 22-09-2004, 21:26   #5 (permalink)
Neuer User
 
Registriert seit: Aug 2001
Beiträge: 18
Okey,

habe den Lichteffekt gefunden hast ihn in den Button gelegt und mit dem Instanznamen licht versehen.
neuland ist offline   Mit Zitat antworten
Alt 22-09-2004, 21:27   #6 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
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
warrantmaster ist offline   Mit Zitat antworten
Alt 22-09-2004, 22:30   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2001
Beiträge: 18
leider nicht sehr hilfreich, ich weiß nicht mal was du mit btw meinst?
neuland ist offline   Mit Zitat antworten
Alt 07-10-2004, 12:23   #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.
Toledowski 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 02:43 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele