Toon posts:

[flash] grafiek maken

Pagina: 1
Acties:

Verwijderd

Topicstarter
sorry sorry sorry maar de titel ben ik vergeten...

stel ik heb in een database 2 getallen staan, laten we zeggen 198 en 56.

Nou wil ik in flash het volgende maken:

een grafiek waar twee punten in staan, ter hoogte van die waardes uit de db. En die twee punten moet verbonden worden door een lijn.

Heeft iemand hier tips voor? Of tut's? Hartstikke bedankt!

  • cjs
  • Registratie: Maart 2001
  • Niet online

cjs

Macromedian

Kwestie van ff zoeken:

flashkit search:graph
flashkit search:line

Hier staat genoeg tussen waar je wat mee kunt.

Gemiddelde Nederlanders zijn maar halve Nederlanders.


Verwijderd

Niet al te net, maar ik had dit al:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function loadtxt(filename){
    xmlbullsjit = new XML();
    xmlbullsjit.onLoad = doafterload;
    xmlbullsjit.load(filename);
}
function doafterload(){
    values = xmlbullsjit.toString();
      _root.values = values.split('|');
      make_graph();
}
movieclip.prototype.make_graph = function(){
    largeval = 0;
    numberof = _root.values.length;
    for(a=1; a<=numberof; a++){
        nowval = Number(values[a]);
        if(nowval>largeval){largeval = nowval}; 
    }   
    totscale = largeval + ((largeval/100)*10);
    xscale = 300/(numberof-1);
    yscale = 300/totscale;
    miny = 0;
    maxy = totscale;
    for(b=1; b<=numberof; b++){
        newx = ((b-1) * xscale)+25;
        newy = (300-(_root.values[b]*yscale))+25;
        add_point(newx, newy,_root.values[b]);
        if(oldy!=undefined){add_line(oldx, oldy, newx, newy)};
        oldx = newx;oldy = newy;
    }
    
}
movieclip.prototype.add_point = function(x,y,value){
    _root.cp++;
    _root.attachMovie( 'cp', 'cp_'+cp, _root.globd++);
    _root['cp_'+cp]._x = x;
    _root['cp_'+cp]._y = y;
    _root['cp_'+cp].value = value;
}
movieclip.prototype.add_line = function(x1, y1, x2, y2){
    line++; 
    xdist = x2-x1;
    ydist = y2-y1;
    dist = Math.sqrt((xdist*xdist)+(ydist*ydist));
    _root.attachMovie('line', 'l_' + line, _root.globd++);
    _root['l_' + line]._x = x1;
    _root['l_' + line]._y = y1;
    _root['l_' + line]._xscale = dist;
    _root['l_' + line]._alpha = 50;
    _root['l_' + line]._rotation = rad(Math.atan2(ydist, xdist));
}
movieclip.prototype.rad= function (degrees){
   return degrees / Math.PI *180;
}
loadtxt('values.txt');

Hij x/y scaled de grafiek afstanden automatisch naar de hoogste waarde, en naar het aantal items.

dit is het txt file wat word ingeladen:
code:
1
31|27|69|55|85|87|96|46|34|33|36|9|22|26|87|93|67|17|71|53|28|12|50|22|4|3|67|69|91|6|53|15|60|70|72|51|43|10|55|83

Dit dit kan dus elke lengte hebben, maar ik zou hem niet al te groot maken.
De delimiter tussen de values moet dus het pipe symbol zijn.

Zal ff kijken of ik strax tijd heb om de .fla en .swf online te zetten.

  • cjs
  • Registratie: Maart 2001
  • Niet online

cjs

Macromedian

Zoals oh,when al aan gaf in een andere topic, is het verstandig om een eigen custom split functie te maken:
Op donderdag 14 februari 2002 16:12 schreef oh,when in het topic [flash/actionscript] data uit file inladen: traag? het volgende:

[..]

dat komt omdat de built-in Split method van Flash 5 nogal traag is. Veel trager dan Flash 4 syntax. Er zijn complete rewrites van het String object in Flash 5. Zie hieronder. Daarnaast is het zowiezo handiger om eerst de data in te laden en daarna pas die te bewerken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
String.prototype.split = function(d){
    if (d != null){
        var r = new Array();
        var size = this.length;
        var c = 0;
        var n = 0;
        if (d != ""){
            for (var i=0; i<=size; ++i){
                if (substring(this, i+1, 1) == d){
                    r[n] = substring(this, c+1, i-c);
                    c = i+1;
                    ++n;
                }
            }
            if (c != i){
                r[n] = substring(this, c+1, i-c);
            }
        }else{
            for (var i=0; i<size; ++i){
                    r[i] = substring(this, i+1, 1);
            }       
        }
    }else{
        r = new Array(this.toString());
    }
    return (r);
}

gebruik deze method eens ( met dank aan Damien Morton )
[misschien enigszins offtopic]
Voor wie wil weten waarom veel van de functies in flash 5 zo traag zijn:
Flashplayer intern actionscript (Met toestemming van Macromedia trouwens)

Het komt er op neer dat alle ingebouwde functies en properties in de Flash5 player worden geïnitializeerd d.m.v. actionscript. Het overgrote deel van Array-, XML- en (Flash5)String-functies is bijvoorbeeld opgebouwd uit 'gewoon' (Flash4 type)actionscript.
[/misschien enigszins offtopic]

Gemiddelde Nederlanders zijn maar halve Nederlanders.


Verwijderd

Van beiden was ik op de hoogte, dat staat er ook; piece off bullsjit....staat ook in dat topic :)

  • cjs
  • Registratie: Maart 2001
  • Niet online

cjs

Macromedian

Op maandag 18 februari 2002 16:11 schreef B-Top het volgende:
Van beiden was ik op de hoogte, dat staat er ook; piece off bullsjit....staat ook in dat topic :)
Erm... even voor de duidelijkheid: Damien's stringsplit is dus wel degelijk sneller dan de ingebouwde versie. Niet te verwarren met het XML gerelateerde deel van de topic, waar blijkt dat XML-methodes om de data te laden sneller kunnen zijn...

In Flash 6 player(public beta) is het snelheidsprobleem gelukkig verleden tijd. :)

Gemiddelde Nederlanders zijn maar halve Nederlanders.


Verwijderd

weet ik, ik zeg toch ook nergens dat het trager is?

  • cjs
  • Registratie: Maart 2001
  • Niet online

cjs

Macromedian

Op maandag 18 februari 2002 16:27 schreef B-Top het volgende:
weet ik, ik zeg toch ook nergens dat het trager is?
Waarom reageer je dan met 'piece off bullsjit....' :?

Gemiddelde Nederlanders zijn maar halve Nederlanders.


Verwijderd

Dat staat op die pagina, ik doelde op de code :) misverstandje dus :)

  • cjs
  • Registratie: Maart 2001
  • Niet online

cjs

Macromedian

Op maandag 18 februari 2002 16:41 schreef B-Top het volgende:
Dat staat op die pagina, ik doelde op de code :) misverstandje dus :)
Je bedoelt zeker 'xmlbullsjit'? :)

Gemiddelde Nederlanders zijn maar halve Nederlanders.


Verwijderd

En dat de hele code niet zo goed is :)

Verwijderd

Maar ivy, heb je er wat aan?

Verwijderd

Topicstarter
excuses voor de late reactie, maar ik heb er zeker wat aan!!!

Zal het morgen downloaden, hoop dat het dan nog online staat.

Maar hartstikke tnX! Wanteen txt bestand inladen is ook prima! Tnx again.

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op maandag 18 februari 2002 16:09 schreef cjs het volgende:

[misschien enigszins offtopic]
Voor wie wil weten waarom veel van de functies in flash 5 zo traag zijn:
Flashplayer intern actionscript (Met toestemming van Macromedia trouwens)
kan ik eindelijk 1 + 1 optellen en zien dat cjs Casper is van Flashcoders...en ik maar denken...wie is hij toch :)

"You're only as good, as what you did last week."


Verwijderd

Op maandag 18 februari 2002 21:36 schreef ivy het volgende:
excuses voor de late reactie, maar ik heb er zeker wat aan!!!

Zal het morgen downloaden, hoop dat het dan nog online staat.

Maar hartstikke tnX! Wanteen txt bestand inladen is ook prima! Tnx again.
Tuurlijk....die blijft daar staan :)
Pagina: 1