Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-02-2004, 14:42   #1 (permalink)
Work. Buy. Consume. Die.
 
Registriert seit: Feb 2003
Beiträge: 216
Histogramm: Viele Linien malen mit AS

Hallo zusammen,

ich habe also ein Array, das sagen wir mal Punkte aus verschiedenen Kategorien zählt, die ich graphisch darstellen will. Die Punkte dazu werden in Klasse eingeteilt, also jeweils die Summe aller Punkte aus den Fragen 1-10, dann die Fragen 11-20 usw. Diese Klassenbildung funktioniert soweit ganz gut, siehe auch hier: http://www.flashforum.de/forum/showt...771#post851771 Vielen Dank nochmal.

Jetzt will ich die Ergebnisse graphisch darstellen und für jede Klasse eine kleine Linie malen, etwa so:


Der Spieler hätte dann eine schöne Übersicht wo seine stärken und schwächen liegen.

Mein Ansatz (inkl. der Klassenbildung) ist so, wobei das Array hier testweise noch aus fast nur 1en besteht:

ActionScript:
  1. xxx = new Array();
  2.  
  3. for (i=1;i<=15;i++){
  4.     xxx[i]=1
  5. }
  6.  
  7. xxx[4]=9
  8.  
  9. trace("Array: "+xxx);
  10. trace("Length:"+xxx.length);
  11. trace("----------------------");
  12.  
  13. for(j=0;j<=10;j++){
  14.         klassej=0
  15.         k=0
  16.         i=0
  17.             for (i=1;i<=10;i++){
  18.                 k=(j*10)+i
  19.             //  trace(k)
  20.                 klassej=klassej+xxx[k]
  21.                
  22.                
  23.                 }
  24.         trace("Summe Klasse "+j+" (1-10) ="+klassej)
  25. [B]  
  26. _root.createEmptyMovieClip( "lines", 1 );
  27. with ( _root.lines )
  28.     {
  29.     lineStyle( 1, 0x000000, 100 );
  30.     moveTo(100, 100);
  31.     lineTo( 100,100-klassej );
  32.     }[/B]
  33. }

Geht aber nicht. Der Fehler muss irgendwo in dem fetten Teil liegen. Aber wo....

as
Arne_Schmidt ist offline   Mit Zitat antworten
Alt 25-02-2004, 14:51   #2 (permalink)
Neuer User
 
Benutzerbild von Kryz
 
Registriert seit: Oct 2001
Ort: Hamburg
Beiträge: 45
Vielleicht habe ich Dein Vorhaben noch nicht ganz durchschaut, aber falls doch, wirkt es auf mich zumindest ungünstig, dass Du bei jedem Schleifendurchlauf immer wieder einen MC in die Tiefenebene 1 Deiner Hauptzeitleiste setzt:

_root.createEmptyMovieClip( "lines", 1 );

Die 1 und der Name des erzeugten MC sollten also mE dynamisch sein ("lines"+variable, variable).

Auch die moveTo-Befehle sehen recht statisch aus...
__________________
Gruß
Kryz | WeBlog: http://www.christianscholz.com

Geändert von Kryz (25-02-2004 um 14:53 Uhr)
Kryz ist offline   Mit Zitat antworten
Alt 25-02-2004, 15:10   #3 (permalink)
Work. Buy. Consume. Die.
 
Registriert seit: Feb 2003
Beiträge: 216
Hast du eine Idee für eine cleverere Art, Linien zu zeichnen?

Ich habe das Problem hier nochmal als Diagramm verdeutlicht:


In einem Satz: Irgendwie muss ich bei jedem Durchlauf der Schleife eine Linie mit der Länge klassej aufmalen, immer 10 pixel weiter rechts als die letzte; die alten linien müssen dabei stehen bleiben, damit ich zum schluss ein diagramm mit den absoluten klassenhäufigkeiten habe.

as
Arne_Schmidt ist offline   Mit Zitat antworten
Alt 25-02-2004, 15:20   #4 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
hi,

irgendwie krieg ich dein gif nicht geladen.

Ich geb jetzt aber trotzdem meinen Senf dazu
ActionScript:
  1. xxx = new Array();
  2. for(var i = 0; i < 10; i++){
  3. xxx[i] = random(50);
  4. }
  5. var l = xxx.length;
  6.  
  7. this.createEmptyMovieClip("diagramm", 1);
  8. this.diagramm._x = 100;
  9.  
  10. this.diagramm.lineStyle(1, 0);
  11. for(var j = 0; j < l; j++){
  12. this.diagramm.moveTo(10 * j, 100);
  13. this.diagramm.lineTo(10 * j, 100 - xxx[j]);
  14. }
gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 25-02-2004, 15:29   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
'tschuldigung,

hatte die Klassenerstellung übersehen

2.Versuch
ActionScript:
  1. xxx = new Array();
  2. for(var i = 0; i < 10; i++){
  3.         xxx[i] = random(50);
  4. }
  5. var l = xxx.length;
  6.  
  7. this.createEmptyMovieClip("diagramm", 1);
  8. this.diagramm._x = 100;
  9. this.diagramm.lineStyle(1, 0);
  10.  
  11. for(var j = 0; j < l; j++){
  12.  klassej=0
  13.         k=0
  14.         i=0
  15.  for (i=1;i<=10;i++){
  16.                 k=(j*10)+i
  17.                 //  trace(k)
  18.                 klassej=klassej+xxx[k]
  19.                
  20.                
  21.         }
  22.        this.diagramm.moveTo(10 * j, 100);
  23.         this.diagramm.lineTo(10 * j, 100 - klassej);
  24. }
gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 25-02-2004, 19:58   #6 (permalink)
Work. Buy. Consume. Die.
 
Registriert seit: Feb 2003
Beiträge: 216
thx!

wo liegt nochmal der unterschied zwischen
ActionScript:
  1. y=5
und
ActionScript:
  1. var y = 5
?

as
Arne_Schmidt ist offline   Mit Zitat antworten
Alt 25-02-2004, 20:31   #7 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
hi Arne,

wenn du z.B. var bei der Deklaration von Variablen in Funktionen gebrauchst, ist die Variable nur lokal in der Funktion zugänglich und wird direkt nach dem Verlassen der Funktion wieder aus dem Speicher gelöscht.

Läßt du das var weg, ist die Variable nicht nur lokal in dieser Funktion vorhanden, sondern besteht außerhalb der Funktion in der Zeitleiste, in der die Funktion definiert wurde (auch nach dem Verlassen der Funktion, bis sie manuell über delete gelöscht wird).

(Irgendwie schreib ich heute verdammt komplizierte Sätze)

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 25-02-2004, 21:09   #8 (permalink)
Work. Buy. Consume. Die.
 
Registriert seit: Feb 2003
Beiträge: 216
Superbeautiful results

@romän: Danke für die Info!

Ich habe das AS ein bisschen modifiziert und erweitert und habe jetzt ein Histogramm von (noch zufälligen) 3100 Werten in Klassen mit 10er-Breite farblich kodiert von rot=wenig über gelb=mittel bis grün=viel und blau=100%.

http://www.wbcd.org/temp/histo_006.swf
ActionScript:
  1. xxx = new Array();
  2. for(var i = 0; i <= 3100; i++){
  3.        xxx[i] = random(10);
  4. //  xxx[i] = 10   
  5. }
  6. var l = xxx.length;
  7.  
  8. this.createEmptyMovieClip("diagramm", 1);
  9. this.diagramm._x = 100;
  10.  
  11.  
  12. for(var j = 0; j < ((l/10)-1); j++){
  13.  
  14.         klassej=0
  15.         k=0
  16.         i=0
  17.         for (i=1;i<=10;i++){
  18.                 k=(j*10)+i
  19.                 //  trace(k)
  20.                 klassej=klassej+xxx[k]
  21.                
  22.                
  23.         }
  24.  
  25. //farben start
  26.  
  27. fk=Math.round((klassej/10))
  28. trace(fk)
  29.  
  30. if (fk<=10){
  31. farbe="0x006699"};
  32.  
  33. if (fk<=9){
  34. farbe="0x339900"};
  35.  
  36. if (fk<=8){
  37. farbe="0x66CC33"};
  38.  
  39. if (fk<=7){
  40. farbe="0xCCFF33"};
  41.  
  42. if (fk<=6){
  43. farbe="0xFFFF66"};
  44.  
  45. if (fk<=5){
  46. farbe="0xFFCC66"};
  47.  
  48. if (fk<=4){
  49. farbe="0xFF9900"};
  50.  
  51. if (fk<=3){
  52. farbe="0xFF6600"};
  53.  
  54. if (fk<=2){
  55. farbe="0xFF0000"};
  56.  
  57. if (fk<=1){
  58. farbe="0xCC3333"};
  59.  
  60. this.diagramm.lineStyle(1, _level0.farbe);
  61. //farben ende
  62.  
  63.         this.diagramm.moveTo(1 * j, 100);
  64.         this.diagramm.lineTo(1 * j, 100 - (klassej/5));
  65.         kminuszehn=Number(k)-10
  66.         trace("Summe Klasse "+j+": ("+kminuszehn+"-"+k+") ="+klassej)
  67. }

Todolist:

# Die Farb-If-Abfragen sind noch ein bissel unelegant, vermutlich geht das mit else schneller.

as

Geändert von Arne_Schmidt (25-02-2004 um 21:30 Uhr)
Arne_Schmidt 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 16:16 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele