dynamisches Baummenu

marian

Erfahrenes Mitglied
Hallo,
wollte ein Baummenu erstellen und scheiter an meiner unproffessionellen mathematischen- oder btw script- Lösung. Also der Script befindet sich noch in der Lösungssuche ;)

So zum Script:

PHP:
// :TreeSoundPlayer
loadXML("xml/soundlist.xml");
// :loadXML
function loadXML(nameXML) {
	myXML = new XML();
	myXML.ignoreWhite = true;
	myXML.load(nameXML);
	myXML.onLoad = function(status) {
		if (status) {
			var xlist = myXML.firstChild.childNodes;
			var anz = xlist.length;
			this.current = 0;
			pars(anz,xlist);
			aniFirst(anz);
		}
	};
};
// :pars XML
function pars(anz,xlist) {
	name = new Array();
	pfad = new Array();
	name = [];
	pfad = [];
	for (i=0; i<anz; i++) {
		name[i] = (xlist[i].attributes.name);
		pfad[i] = (xlist[i].attributes.pfad);
		if (i == anz-1) {
			setTree(anz);
			delete myXML
		}
	}
};
// :setTree
function setTree(anz) {
	// :config
	var astH = 100;
	var astB = 20;
	var gabel = 1;
	var kSpalte = 0;
	var kReihe = 0;
	var winkel_A = 20;
	var A_x = 0;
	var A_y = 0;
	var c_laenge = astH;
	var b_laenge = Math.sin(winkel_A)/c_laenge;
	var a_laenge = Math.cos(winkel_A)*c_laenge;
	var B_x = A_x+b_laenge;
	var B_y = A_y+a_laenge;

	posX = new Array();
	posY = new Array();
	posY =[];
	posX = [];
	knoten = [];
	posX[kReihe+""+kSpalte] = B_x
	posY[kReihe+""+kSpalte] = B_y
	this.createEmptyMovieClip("baum", 5);
	// :Berechne Baum Possy
	this.baum._x = (Stage.width/2);
	this.baum._y = (Stage.height/2);
	for (var i = 0; i<anz; i++) {
		var c_laenge = astH;
		knoten[i] = this.baum.attachMovie("ast", "ast"+i, i);
		knoten[i].sName = xlist[i].attributes.name;
		// :berechne Höhe und Breite für Äste
		knoten[i]._width = astB-(kSpalte*2);
		knoten[i]._height = astH-(kSpalte*2);
		// :switch Left/Right Winkel 
		if(R == true){
			var R = false;
			// :berechne Winkel
			knoten[i]._rotation =winkel_A
			// :berechne Possy
			b_laenge = Math.sin(winkel_A)/c_laenge;
			a_laenge = Math.cos(winkel_A)*c_laenge;
			B_x = A_x+b_laenge;
			B_y = A_y+a_laenge;
			// :declariere den Knoten
			posX[kReihe+""+kSpalte] = B_x
			posY[kReihe+""+kSpalte] = B_y
		}else{
			var R = true
			// :berechne den Winkel
			knoten[i]._rotation =winkel_A*-1
			// :berechne Possy
			b_laenge = Math.sin(winkel_A)/c_laenge;
			a_laenge = Math.cos(winkel_A)*c_laenge;
			posX[kReihe+""+kSpalte] = B_x
			posY[kReihe+""+kSpalte] = B_y
		}
		// :Auf Knoten Ausrichten (Knoten Possys abrufen auf dem der Clip anliegen soll)
		knoten[i]._x = posX[(-kReihe)+""+(Math.round(kSpalte/2))];
		knoten[i]._y = posY[(-kReihe)+""+(Math.round(kSpalte/2))];
		//
		//var A_x = 0; //muss nochin die Rechnung intigriert werden
		//var A_y = 0; //""
		// :setReihe
		kReihe++;
		// :setSpalte
		if(gabel == i){
			// :verdoppel die Gabelanzahl
			gabel = i+i;
			// :berechne reihen und spalten für Knoten
			kReihe = 0;
			kSpalte++;
		}
	}
};


// :loadFirst
function aniFirst(anz) {
	this.onEnterFrame = function() {
		if (pfad[0] != undefined) {
			aniNext(anz);
			delete this.onEnterFrame;
		}
	};
};
// :loadNext
function aniNext(anz) {
	if (current != anz) {
		knoten[current].ladeSound(knoten[current]);
		//knoten[current]._visible = 100;
		current++;
	}
}



Ich hab den Script nicht komplett abgearbeited, da die possyX/Y, die ich eweils in den einzelnen Knoten declariere, probleme bereiten!
Also das Problem ist, dass die Rückverfolgung von diesen possys[kReihe/kSpalte]. innerhalb der forschleife nicht exact ist. Diese Possitionierungen brauch ich da die neu attachten MovieClips, "ast" ja ihre "Knoten"-Austrichtung zugeteilt bekommen sollen. Die Rückverfolgung soll immer bis zum "unterknoten" gehn(auf dem die gabelung steckt). Die Äste werden Pyramiedenförmig aufgebaut. Wenn gabel "i" erreicht wird, wird eine Reihe dazu addiert,(// :setReihe/Spalte
erzeugt die Baumstruktur --> gabel = i+i; kReihe = 0; kSpalte++; )
wobei sich die anzahl der Äste verdoppeln sollen. // :switch soll die Astgabelung (Links/Rechts) Switchen, also den winkel für den Ast - oder + stellen.

Naja es ist wohl sehr schwer sich ein Überblick zu verschaffen.. evt hat ja jemand ein besseren Lösungsansatz?

Im Anhang ist die Visualizierung..

Gruß
 

Anhänge

  • prob.jpg
    prob.jpg
    25,3 KB · Aufrufe: 63
edit:

Die Lösung über eine Matrix (flash.geom.Matrix) habe ich auch schon in betracht gezogen nur übersteigt das leider meine Mathematischen fähigkeiten :D

PS: ich hab ne 4 in Mathe ;)
 
*nochmal was Hinzufügen *g

Hier hab ich ein guten Link über flash.geom.matrix (mehrzahl = Matrizen?) gefunden, nur brauch ich ein kleinen Denkanstoss um mein Vorhaben zu realisieren. Bin jeder mathematischen- oder auch script Lösung dankbar!

Hier der Link
 
Hi,

jetzt im Moment ists mir noch zu früh am Morgen, um da richtig einzusteigen, aber vielleicht könnte ich nachher etwas zu dem Thema posten. Allerdings wäre alles, was ich dazu beitragen könnte ebenfalls "selbsgebastelt" und würde nicht auf bewährten Strukturen basieren. Man würde also das Rad neu erfinden und das halt schlechter als das Original. ;) Daher würde ich Dir raten, das Thema vielleicht mal im Coders-Talk anzuschneiden, wo sich erfahrungsgemäß mehr "waschechte Coder" befinden als hier.

Gruß
.
 
Hallo Datic,

auf dich hab ich gewarted :)
Du musst mir nicht unbedingt ein Script posten, ein Lösungsansatz wäre auch schon sehr Hilfreich :)

Die Knoten werden mit a,b,c,d,... in meiner Visualizierung bezeichent. Im Script kSpalten
Die Reihen werden immer durchnummeriert. Im Script kReihen

Die Forschleife arbeited sich also von kSpalte[0] nach jeder kReihe nach oben (kSpalte++).

Was hällst du von dem Lösungsansatz
und von der zurückverfolgung auf den Unterknoten worauf jeweils der Ast ausgerichted werden soll?

Gruß und danke!
 

Anhänge

  • tree.jpg
    tree.jpg
    5,9 KB · Aufrufe: 49
Hi,

tja, ich weiß nicht, wie lange Du warten kannst - im Moment bin ich sehr knapp an Zeit, weil ich ein anderes Projekt fertigstellen muss.

Zum Wochenende könnte es sicher was werden, ein paar Stunden würde ich aber brauchen, um mir was zum Thema zu überlegen. ;)

Gruß´
.
 
mach dir kein stress, ist aber nett von dir :)

PS:
Ich werde das ganze mal in ein anderes Forum posten und dich benachrichtigen wenn ich Hilfe gefunden habe.

Greatz
 
Ok ich habe ein neuen Lösungsansatz!

Werd ihn morgen mal Posten, damit alle was davon haben :)


// :Greatz
 
Hi,
also bitte schlag mich jetzt nicht, aber nach der Zeichnung, die Du (im aller ersten Post) beigefügt hast, ist Deine Rechnung die da drunter steht auf jeden Fall falsch!?

Ich denke es müsste:

b_laenge=sin(winkel_A)*c_laenge;
a_laenge=cos(winkel_A)*c_laenge;


und

C_x=A_x+b_laenge;
C_y=A_y+a_laenge;


heißen.

Naja, vielleicht ist das mit Deinem neuen Lösungsansatz eh hinfällig.

Nichts für ungut!!
 
Danke für den Hinweis!

Ich brauch die Formel aber nicht mehr da ich ein völlig neuen Lösungsweg gefunden habe :)

Ich poste nacher mal den Anfang damit andere auch etwas davon haben!


Gruß
 
Zurück