Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-06-2005, 10:04   #1 (permalink)
@lf
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 8
ObjektPyramide, wie anfangen?

HAllo zusammen,

ich brauch ne kleine Starthilfe.

Stellt euch ne Pyramide vor. An der Spitze steht ein Objekt mit 3 Unterobjekten. Jedes Unterobjekt hat selbst wiederum 3 Unterobjekte. Es ergeben sich unendlich viele Ebenen.

siehe Skizze [py1.jpg]

Der Status (oder Wert) eines Objektes ändert sich, sobald die maximale Anzahl auf einer Ebene erreicht ist.
Jedes Unterobjekt ist also auch ein eigenständiges Spitzenobjekt (Pyramide).

Zu Beginn ist lediglich das oberste Objekt (mit Status s1) auf der Bühne.
Unterobjekte sollten dann per DragAndDrop eingegliedert werden und die Auswirkungen auf die oberen Objekte sichtbar werden, sprich: Status erhöht sich bei kompletter Ebene; Status verringert sich, wenn ein Objekt entfernt wird und nachfolgende rücken nach.

Für mich ist das Projekt ne ganze Menge Holz. Ich hab mich schon in Prototype und Vererbung eingelesen, verstehs aber (noch) nicht.
Falls mir jemand nen Anschub geben kann, oder ein Grundgerüst scribbelt, wär ich ihm/ihr sehr dankbar.
Angehängte Grafiken
Dateityp: jpg py1.jpg (12,1 KB, 41x aufgerufen)
@lf ist offline   Mit Zitat antworten
Alt 25-06-2005, 13:17   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
deine kennzeichnung ist sehr ungewöhnlich und extrem ungeeignet. markiere anders herum:
1 ...
1.1. 1.2. 1.3. ...
1.1.1. 1.1.2. 1.1.3. ...
so ist das überall üblich und bedarf keiner ständigen umänderung.

trenne daten und grafik. deine baumstruktur musst du zuerst in arrays bzw. objecte verwalten. eine grafische abbildung von diesem status ist dann eine andere sache.

Prototype und Vererbung sehe ich hier nicht. baumstrukturen sind eher eine sache von rekursionen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 25-06-2005, 14:00   #3 (permalink)
@lf
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 8
ja-nee, die sache ist etwas komplizierter, denn ein beliebiges Objekt kann ja selbst einen höheren Status (Wert) erreichen, als sein Oberobjekt, nämlich wenn sich unter ihm breite ausgefüllte Ebenen ansammeln.

Hoffe es wird ein wenig verständlicher.
Danke trotzdem.
@lf ist offline   Mit Zitat antworten
Alt 25-06-2005, 16:48   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..Objekt kann ja selbst einen höheren.."
'du' musst dann alles umnummerieren. ich nicht.
wenn z.b. dieser note
1 ...
1.1. 1.2. 1.3. ...
1.1.1. 1.1.2. 1.1.3. ...
in diesen eingebunden werden soll
3.2.4
dann ist das nur der davorstehende pfad:
3.2.4.1 ...
3.2.4.1.1. 3.2.4.1.2. 3.2.4.1.3. ...
3.2.4.1.1.1. 3.2.4.1.1.2. 3.2.4.1.1.3. ...
jeder note beinhaltet nur seine nummer (die letzte zahl). die komplette dezimalklassifizierung ergibt sich aus dem pfad zum note. die anzahl der zahlen die tiefe im pfad.
ActionScript:
  1. function fNote(t) {
  2.     var b = {s1:1, s2:2, s3:3};
  3.     if (t) {
  4.         for (var i in b) {
  5.             if (Math.random()<.3) {
  6.                 b[i] = fNote(t-1);
  7.             }
  8.         }
  9.     }
  10.     return b;
  11. }
  12. function fTrace(b, num) {
  13.     if (num) {
  14.         num += '.';
  15.     }
  16.     for (var i in b) {
  17.         if (typeof (b[i]) == 'object') {
  18.             fTrace(b[i], num+i.substr(1));
  19.         } else {
  20.             trace(num+i.substr(1));
  21.         }
  22.     }
  23.     return num;
  24. }
  25. //
  26. // erzeuge zufallsbaum
  27. var maxtiefe = 5;
  28. var baum = fNote(maxtiefe);
  29. //
  30. // baum ausgeben
  31. fTrace(baum, '');
Hoffe es wird ein wenig verständlicher ;-)

aber du kannst das ja nummerieren, wie immer du willst. du wolltest einen anschub und ich habe versucht dir einen zu geben. hab halt noch nie ein buch o.ä. gesehen, bei dem die nummerierung mit der grössten zahl beginnt.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 25-06-2005, 17:42   #5 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
was willst du

Kannst du das ganze vielleicht in einen Kontext setzen, damit man es sich konkret vorstellen kann?

ist es so richtig:
Pyramide aus Knotenpunkten
die Tiefe eines Knotenpunktes ist umgekehrtproportional zu seinem Wert
der Wert eines Knotes ist proportional zur Anzahl seiner Unterknoten
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 26-06-2005, 01:25   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ist das eine Schulaufgabe? Ganz schon schwierig!

Als erstes brauchst du mal eine Klasse für die Knoten, aus denen du den Baum aufbauen willst.
Wenn du einen Baum erzeugen kannst, kannst du Methoden hinzufügen, um den Baum zu durchlaufen und die Werte der einzelnen Knoten auszurechnen.
Wenn du soweit bist, kannst du dich ja nochmal melden.

@hgseib: Soweit ich das verstanden habe, geht es nicht um Numerierung der Knoten, sondern darum, den Wert eines Knotens dynamisch aus den Werten seiner Unterknoten zu bestimmen. Also kein Grund zur Sorge

mfg. r

Geändert von bokel (26-06-2005 um 01:28 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 26-06-2005, 16:23   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
@bokel: "..Ist das eine Schulaufgabe?.."
zumindestens mal eine frage, die nicht schon 1000mal gestellt wurde :-)

@lf wird wissen, was sein eigentliches ziel ist. und ob er jetzt die notes ansprechen will, oder wie auch immer deren "wert" bestimmt.
einen ansatz, eine baumstruktur zu durchpflügen, hat er schon mal bekommen.

schaun mehr mal
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-06-2005, 22:22   #8 (permalink)
@lf
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 8
ich komm auf keinen grünen ast mit diesem teil.
Werd jetzt mal konkreter, hätt ich besser gleich tun sollen!

Für ein Produkt soll die Vertriebsstruktur in verschiedenen Szenarien durchgespielt werden.
An der Spitze steht immer ein Händler, mit geringem Anfangsstatus(1).
Hat dieser 3 weitere akquiriert, die sein Produkt vertreiben, erhöht sich sein Status auf 2. Finden die drei Unterhändler wiederum jeweils 3 Unterhändler, erhöht sich ihr eigener Status (von 1 auf 2) und der des Obersten (von 2 auf 3).
Und so weiter und so fort.

Anzahl Händler auf den Ebenen:
1
3
9
27
81
243
729
...

Es gibt natürlich fleißige und weniger fleißige Akquisitöre, und so wird an manchen Stellen die Struktur nach unten wachsen, an anderen eher stagnieren.

Um das Wechselspiel zu verdeutlichen, erscheint oben links ein Punkt, der einen neuen Händler darstellt. Dieser sollte nun per DragAndDrop in die Struktur eingepflanzt werden (Bei nur 7 Ebenen sind das schon über 1000 HitAreas, das is dochn Unding, oder?). Ist derjenige der Dritte im Bunde erhöhen sich die entsprechenden Stati/Statusse (egal).

Ich kriegs nicht hin, bin aber auch kein Programmierer.
Mir qualmt die Omme, ich mag nich mehr.
@lf ist offline   Mit Zitat antworten
Alt 26-06-2005, 22:43   #9 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
Eine schöne Aufgabe

Die Berechnungen stelle ich mir
gar nicht so schwierig vor, aber
die Darstellung auf dem Monitor,
die macht dann schon eher nach-
denklich...

edit:
ja, die Darstellung scheint die größere
Herausforderung zu sein.
Zeichnen doch mal so einen 'Baum' bis
zur siebenten Stufe auf ein Blatt DIN A4!

Geändert von AAI (26-06-2005 um 22:57 Uhr)
AAI ist offline   Mit Zitat antworten
Alt 26-06-2005, 22:52   #10 (permalink)
@lf
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 8
wenn erst mal 3 oder 4 ebenen dargestellt werden, solls mir auch recht sein.
@lf ist offline   Mit Zitat antworten
Alt 27-06-2005, 00:05   #11 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..Ich kriegs nicht hin, bin aber auch kein Programmierer.."
und warum willst/musst du das dann machen, wenn man mal fragen darf?


will mich ja nicht aufträngen, aber hast du dir mal mein programm (oben das listing) angesehen?
das erstellt einen baum, so wie du ihn haben willst (im speicher).
und es hängt auch neue (meinetwegen) verkäufer drann. nicht per hand, sondern per zufall (war ja auch nur mal so zum testen):

// bei zufällig 30% werden welche angehängt
if (Math.random()<.3) {
// das hier wäre dann halt 'per hand' auszuführen
b[i] = fNote(t-1);
}


aber vielleicht liegt der tiefere sinn der aufgabe ja darin, jemandem klar zu machen, das 'schneeballsysteme' nicht funktionieren, weil die anzahl der mitwirkenden ins astronomische geht.
Angehängte Dateien
Dateityp: zip baum.zip (9,5 KB, 10x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (27-06-2005 um 02:38 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 27-06-2005, 08:46   #12 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Das Problem ist für einen Nichtprogrammierer nicht zu bewältigen, würde ich mal behaupten. Dieses Forum ist eher zur Selbsthilfe gedacht. Wenn du das System wirklich brauchst, würde ich es mal im Jobforum probieren.

mfg. r.
bokel ist offline   Mit Zitat antworten
Alt 27-06-2005, 13:06   #13 (permalink)
@lf
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 8
Jupp, ich schmeiß die Schaiße aus Fenster. Habs versucht.

Statt cooler Interaktion wirds dann halt wieder Tweening hin und Tweening her.
Danke für Eure Hilfe. Ich bleib bei meinen Leisten.
@lf ist offline   Mit Zitat antworten
Alt 27-06-2005, 22:45   #14 (permalink)
AAI
 
Benutzerbild von AAI
 
Registriert seit: May 2004
Beiträge: 327
nein, so darf das nicht enden!

Der lustige baum...

ActionScript:
  1. init_prog ()
  2.  
  3. // -----------------------------------------------------------
  4.  
  5. function init_prog () {
  6.     generations = 5
  7.     init_tree ()
  8.     };
  9.  
  10. // -----------------------------------------------------------
  11.  
  12. function init_tree () {
  13.     first_x = Stage.width/2
  14.     first_y = 100
  15.    
  16.     members=1
  17.     generation=1
  18.     member = new Array ()
  19.     t = 1
  20.     t2 = 1
  21.     while(generation<=generations) {
  22.        
  23.         member[generation] = new Array()
  24.         pos=0
  25.         nr = 0
  26.         while(pos<members) {
  27.            
  28.             member[generation][pos] = 0     // no member!
  29.            
  30.             mc_bu.duplicateMovieClip("mc_bu"+generation+"_"+pos,10000+t)
  31.             this["mc_bu"+generation+"_"+pos]._visible=0
  32.             this["mc_bu"+generation+"_"+pos]._x = lx = (first_x+pos*mc_bu._width*(generations-generation+1))-generation*(generation*16)
  33.             this["mc_bu"+generation+"_"+pos]._y = ly = first_y+(generation-1)*64
  34.             this["mc_bu"+generation+"_"+pos].generation = generation
  35.             this["mc_bu"+generation+"_"+pos].pos = pos
  36.             this["mc_bu"+generation+"_"+pos].nr = nr
  37.             this["mc_bu"+generation+"_"+pos].bu.onRollOver = function () {
  38.                 if (drag_mode == 1 and this._parent.generation<generations) {
  39.                    
  40.                     generation=this._parent.generation
  41.                     pos=this._parent.pos
  42.                     set_new_member ()
  43.                     drag_mode=0
  44.                     }
  45.                 }
  46.            
  47.             init_line ()
  48.             pos++
  49.             nr++
  50.             if(nr>2){
  51.                 nr=0
  52.                 };
  53.             t++
  54.             };
  55.         trace("generation:"+generation+"...members:"+members)
  56.         members*=3
  57.         generation++
  58.         };
  59.     init_boss ()
  60.     init_new_member ()
  61.    
  62.     };
  63.  
  64. // -----------------------------------------------------------
  65.  
  66. function init_line () {
  67.    
  68.     this.createEmptyMovieClip("line"+generation+"_"+pos,t2);
  69.     this["line"+generation+"_"+pos]._visible=0
  70.  
  71.    
  72.     this["line"+generation+"_"+pos].lineStyle(0,0x333333,100)
  73.     this["line"+generation+"_"+pos].moveTo(lx,ly)
  74.    
  75.  
  76.    
  77.     l2x = this["mc_bu"+(generation-1)+"_"+(pos-nr)/3]._x
  78.     l2y = this["mc_bu"+(generation-1)+"_"+(pos-nr)/3]._y
  79.    
  80.     this["line"+generation+"_"+pos].lineTo(l2x,l2y)
  81.     t2++
  82.     };
  83.  
  84. // -----------------------------------------------------------
  85.  
  86. function init_boss () {
  87.     generation=1
  88.     pos=0
  89.     this["mc_bu"+generation+"_"+pos]._visible=1
  90.     this["mc_bu"+generation+"_"+pos].gotoandstop(4)
  91.     member[generation][pos]=1
  92.     }
  93.  
  94. // -----------------------------------------------------------
  95.  
  96. function init_new_member () {
  97.     mc_bu._x = this["mc_bu"+generation+"_"+pos]._x
  98.     mc_bu._y = this["mc_bu"+generation+"_"+pos]._y-mc_bu._width*2
  99.    
  100.     mc_bu.duplicateMovieClip("mc_bu_new",20000)
  101.    
  102.     this.mc_bu_new.bu.onPress = function () {
  103.         this._parent.startDrag()
  104.         drag_mode=1
  105.         };
  106.     this.mc_bu_new.bu.onRelease = function () {
  107.         this._parent.stopDrag()
  108.         bugfix_int=setInterval(stop_drag_mode,100) // verzögerer für dm0-no action, falls Release outside
  109.         this._parent._x = this._parent._parent.mc_bu._x
  110.         this._parent._y = this._parent._parent.mc_bu._y
  111.         };
  112.     };
  113.    
  114.  
  115. function stop_drag_mode () {
  116.     drag_mode=0
  117.     clearInterval(bugfix_int)
  118.     };
  119.    
  120. // -----------------------------------------------------------
  121.  
  122. function set_new_member () {
  123.    
  124.     i=0
  125.     member_set=0 //member gesetzt
  126.     member_set_nr=-1
  127.     member_set_anzahl=0
  128.     while(i<3) {
  129.         generation_slave = generation+1
  130.         pos_slave = pos*3+i
  131.        
  132.         if(member[generation_slave][pos_slave]==0){
  133.             if(member_set==0){
  134.                 member_set=1
  135.                 member_set_nr=i
  136.                
  137.                 member[generation_slave][pos_slave]=1
  138.                 this["mc_bu"+generation_slave+"_"+pos_slave]._visible=1
  139.                 this["line"+generation_slave+"_"+pos_slave]._visible=1
  140.                 trace("member set")
  141.                 };
  142.             };
  143.         member_set_anzahl+=member[generation_slave][pos_slave]
  144.         i++
  145.         };
  146.     refresh_status ()
  147.    
  148.     };
  149.  
  150. // -----------------------------------------------------------
  151.  
  152. function refresh_status () {
  153.     trace(member_set_anzahl)
  154.     pos_slave = pos*3+member_set_nr
  155.     if (generation_slave==2) {
  156.         this["mc_bu"+generation_slave+"_"+pos_slave].gotoandstop(3)
  157.         }else{
  158.             this["mc_bu"+generation_slave+"_"+pos_slave].gotoandstop(2)
  159.             if(member_set_anzahl==3) {
  160.                 this["mc_bu"+generation+"_"+pos].gotoandstop(3)
  161.                 };
  162.            
  163.             };
  164.        
  165.    
  166.     };
  167.    
  168. // ---------------------------ENDE----------------------------
  169.  


...da fehlt noch die 'lösch-Funktion',
ansonsten läufts wahrscheinlich fehler-
frei - ohne Hittest!

...achso, ab generations>7 gibt Flash
dann auf - passt eh nicht auf m Monitor

hat Spaß gemacht
Angehängte Dateien
Dateityp: zip infinitum-tree.zip (5,4 KB, 17x aufgerufen)

Geändert von AAI (27-06-2005 um 22:52 Uhr)
AAI ist offline   Mit Zitat antworten
Alt 28-06-2005, 21:41   #15 (permalink)
@lf
Neuer User
 
Registriert seit: Oct 2003
Beiträge: 8
Absolut beneidenswert, Vielen Dank.
Jetzt wirds noch deutlicher, dass ich mich mit dem Teil völlig übernommen hab.

Hochachtungsvoll
@lf
@lf 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 23:08 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele