Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-03-2004, 08:25   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 89
zeichnungs-, dreh-, performanceproblem

guten morgen in die runde,

hab am wochenende zu hause an einem optischen experiment, einer benhamscheibe gebastelt. sie als stehendes objekt zu zeichnen, ist mir auch gelungen:
ActionScript:
  1. MovieClip.prototype.drawCircle = function(radius,sector,rotation) {
  2.         this.beginFill(0x000000,100);
  3.         this.lineStyle(1,0x000000,100);
  4.         for(var i=-rotation;i<=sector-rotation;i++)
  5.             this.lineTo((Math.sin(i*Math.PI/180)*radius), (Math.cos(i*Math.PI/180)*radius));
  6.         this.endFill();
  7. }
  8. drawCircle(80,360,270); // kleiner kreis macht problem mit zeichnung
  9. drawCircle(250,180,90);
  10.  
  11. MovieClip.prototype.drawCircle = function(radius, sector, rotation, linienstaerke) {
  12.     this.moveTo((Math.sin(rotation*Math.PI/180)*radius), (Math.cos(rotation*Math.PI/180)*radius));
  13.     this.lineStyle(linienstaerke, 0x000000, 80);
  14.     for(var i=rotation; i<=sector+rotation; i++)
  15.         this.lineTo((Math.sin(i*Math.PI/180)*radius), (Math.cos(i*Math.PI/180)*radius));
  16. };
  17. drawCircle ( 95, 60,210,3.5);   // 01
  18. drawCircle (100, 60,190,3.5);   // 02
  19. drawCircle (105, 60,170,3.5);   // 03
  20. drawCircle (110, 60,150,3.5);   // 04
  21. drawCircle (115, 60,130,3.5);   // 05
  22. drawCircle (120, 60,110,3.5);   // 05
  23. drawCircle (125, 60, 90,3.5);   // 07
  24. drawCircle (135, 60, 90,3.5);   // 08
  25. drawCircle (140, 60,110,3.5);   // 09
  26. drawCircle (145, 60,130,3.5);   // 10
  27. drawCircle (150, 60,150,3.5);   // 11
  28. drawCircle (155, 60,170,3.5);   // 12
  29. drawCircle (160, 60,190,3.5);   // 13
  30. drawCircle (165, 60,210,3.5);   // 14
  31. drawCircle (175, 60,210,3.5);   // 15
  32. drawCircle (180, 60,190,3.5);   // 16
  33. drawCircle (185, 60,170,3.5);   // 17
  34. drawCircle (190, 60,150,3.5);   // 18
  35. drawCircle (195, 60,130,3.5);   // 19
  36. drawCircle (200, 60,110,3.5);   // 20
  37. drawCircle (205, 60, 90,3.5);   // 21
  38. drawCircle (215, 60, 90,3.5);   // 22
  39. drawCircle (220, 60,110,3.5);   // 23
  40. drawCircle (225, 60,130,3.5);   // 24
  41. drawCircle (230, 60,150,3.5);   // 25
  42. drawCircle (235, 60,170,3.5);   // 26
  43. drawCircle (240, 60,190,3.5);   // 27
  44. drawCircle (245, 60,210,3.5);   // 28
  45. drawCircle (250,3600,1  );   // 29 aussenlinie
  46.  
die schwierigkeiten ergeben sich erst mit der drehung:
1. wie im code vermerkt, macht der kleine vollkreis probleme bei der darstellung. aus einem grund, den ich nicht nachvollziehen kann, erscheint rechts neben dem kreis ein rechteck, dass über die bühne hinausgeht.
2. mein rechner ist zu hause etwas langsamer. da habe ich festgestellt, dass sich die kreisbögen recht langsam aufbauen. hängt sicher mit der rechenleistung zusammen, die aufgebracht werden muss, um die bögen zu zeichnen. gibt es dafür eine lösung, dass es dem rechner einfacher gemacht wird?
3. die drehung wird folgendermaßen realisiert:

zeitleiste:
ActionScript:
  1. speed=0;
  2. rot=0;
bühne:
ActionScript:
  1. onClipEvent (enterFrame) {
  2.     if (_root.speed<420) {
  3.         _root.speed+=1.5;
  4.     }
  5.     _root.rot+=_root.speed;
  6.     _rotation=_root.rot;
  7. }
gebe ich hier bei _root.speed einen kleinen wert ein, dreht sich die scheibe normal. wähle ich einen größeren wert, ich glaube >400, dann dreht die scheibe ab einer bestimmten drehzahl rückwärts, stoppt und beginnt von neuem. ich kann aus dem code das verhalten aber nicht erkennen. fehlt mir wohl noch etwas erfahrung ;-)

soweit ersteinmal, hoffe es ist nicht zuviel für einen sonntag morgen.
die komplette fla hänge ich mal an, vielleicht findet ja jemand gefallen daran.
(mh, klappt nicht, wurde letztens eine begrenzung der größe auf 50.000 bytes eingeführt? also der code am anfang ist in einem extra mc - wer's nachbauen möchte.)

vielen dank!
oops ist offline   Mit Zitat antworten
Alt 08-03-2004, 11:17   #2 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 89
hab jetzt die fla im anhang.
Angehängte Dateien
Dateityp: zip benham-test.zip (2,8 KB, 19x aufgerufen)
oops ist offline   Mit Zitat antworten
Alt 08-03-2004, 12:58   #3 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Hallo,
...da hätte es aber auch eine vereinfachte fla getan....und ich denke beim Vereinfachen wärst Du auch auf die Ursache des Darstellungsproblems gestossen...ein einfaches 'this.moveTo(0,0);' am Anfang Deiner ersten drawCircle-Funktion löst das Problem.

Zur performance, man kann Kreise und Kreissegmente natürlich auch mit curveTo zeichnen und brauch dann wesentlich weniger Punkte...such mal hier im Forum nach '*drawArc*'.

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 08-03-2004, 13:07   #4 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 89
hallo Alois,

danke für den tip, hat problem 1 auch beseitigt.

was meinst du aber mit "vereinfachter" fla?

die variante mit curveTo hatte ich auch schon angedacht, nur werden die kreise dort nicht so schön rund. vielleicht trifft das aber nicht für kreissegmentlinien zu. werd's mal probieren.

danke!
oops ist offline   Mit Zitat antworten
Alt 08-03-2004, 14:23   #5 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Hallo nochmal,
zum Punkt 2 nochmal:
ich habe Dir den thread in dem die Funktion drawArc entwickelt wurde mal rausgesucht:
Teilkreis mit AS
zu'...die variante mit curveTo hatte ich auch schon angedacht, nur werden die kreise dort nicht so schön rund..' ein Auszug aus oben genatten thread:
Zitat:
..Ich würde sogar behaupten, dass meine Bögen runder sind als die, die man in der Flash-Umgebung mit dem Kreis-Tool zeichnen kann...
...der Performancegewinn liegt ja wohl auf der Hand: Während bei Deinem script ein Vollkreis aus 360 Einzelpunkten besteht ist sind es bei der drawArc Funktion 8 Kurvensegmente also 16 Punkte

zum Punkt 3:
...den hatte ich beim ersten mals überlesen...und die Frage ist etwas seltsam...weil es doch sowas von auf der Hand liegt:
eine komplette Drehung ist 360°...wenn Du jetzt Werte über 180° wählst dreht sich die Scheibe natürlich subjektiv in die andere Richtung und wenn _root.speed auf 360 steht ist das eine volle Drehung, das wirkt natürlich so als ob alles stehenbleibt....

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 09-03-2004, 08:28   #6 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 89
hallo Alois,

da in dem von dir angegebenen thread gar kein drawArc vorkommt, konnte ich mich ja dämlich suchen;-) , danke für den link. werd mir die geschichte gleich mal zu gemüte führen.

ok, muss mich korrigieren, da kommt doch ein drawArc vor. warum hat mir das nur die suche nicht ausgespuckt?

zum punkt 3 muss ich sagen, dass es sich hier leider nicht so offensichtlich um eine gradzahl handelt. meiner meinung nach ist es ein einfacher numerischer wert. gebe ich 360 ein, ändert sich nichts an meinen beobachtungen, auch bleibt die scheibe nicht stehen. probiers mal aus.

allerdings bin ich sowieso der meinung, dass mein experiment nicht in flash zu realisieren ist. hatte schon früher mal die frage nach einer homogenen ununterbrochenen drehung in den raum geworfen. gerade für wahrnehmungsexperimente gibt es zu viele faktoren am rechner, die es unmöglich machen. flash kann nur in seiner frameanzahl das bild wechseln, der rechner läuft auch nicht "rund", der monitor hat eine bildwiederholungsrate usw.

trotzdem vielen dank fürs mitmachen!

Geändert von oops (09-03-2004 um 08:39 Uhr)
oops ist offline   Mit Zitat antworten
Alt 09-03-2004, 08:41   #7 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Zitat:
Geschrieben von oops
hallo Alois,

da in dem von dir angegebenen thread gar kein drawArc vorkommt, konnte ich mich ja dämlich suchen;-) , ...[/as]
Zitat:
MovieClip.prototype.drawArc = function (x0,y0,radius,angle,startAngle)
....du solltest natürlich mit sternchen davor und dahinter suchen...
Zitat:
zum punkt 3 muss ich sagen, dass es sich hier leider nicht so offensichtlich um eine gradzahl handelt.
...doch....da brauch ich nix ausprobieren, schau doch mal einfach in die flash-Referenz

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (09-03-2004 um 08:43 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 09-03-2004, 08:52   #8 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 89
hallo Alois,

wo ist hier eine gradzahl?:
ActionScript:
  1. onClipEvent (enterFrame) {
  2.     if (_root.speed<420) {
  3.         _root.speed+=1.5;
  4.     }
  5.     _root.rot+=_root.speed;
  6.     _rotation=_root.rot;
  7. }
oops ist offline   Mit Zitat antworten
Alt 09-03-2004, 10:37   #9 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Zitat:
...schau doch mal einfach in die flash-Referenz
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois 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 15:28 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele