Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-05-2003, 19:05   #1 (permalink)
Phlasher
 
Benutzerbild von gerard
 
Registriert seit: Nov 2001
Ort: Unna-Königsborn (NRW)
Beiträge: 466
Zeichnen mit Kurve

hallo ,
Ich bin nicht so ein Starprogrammierer wie ihr OOP-spezialisten aber vieleicht habt ihr ideen dieser Ansatz zu verbesseren, es ist der Anfang für das Zeichnen von Formen mit Kurven

ActionScript:
  1. KL = new Object();
  2. KL.onKeyDown = function() {
  3.     if (Key.isDown(Key.SPACE)) {
  4.         if (_global.$DRAWING) {
  5.             _global.$DRAWING = false;
  6.         } else {
  7.             _global.$DRAWING = true;
  8.             newDrawing();
  9.         }
  10.     }
  11. };
  12. Key.addListener(KL);
  13. function drawing(mc) {
  14.     if ($d == undefined) {
  15.         _global.$d = 1000;
  16.     }
  17.     $d++;
  18.     var container = mc.createEmptyMovieClip("C"+$d, $d);
  19.     $d++;
  20.     this.points = new Array();
  21.     this.LStyle = new Object();
  22.     this.LStyle.pen = 1;
  23.     this.LStyle.clr = 0xff0000;
  24.     this.LStyle.alpha = 100;
  25.     this.addPoint = function(x, y) {
  26.         if (this.points.length>0) {
  27.             var point = new Object();
  28.             point.x = (x+this.points[this.points.length-1].x)/2;
  29.             point.y = (y+this.points[this.points.length-1].y)/2;
  30.             this.points.push(point);
  31.         }
  32.         var point = new Object();
  33.         point.x = x;
  34.         point.y = y;
  35.         this.points.push(point);
  36.         this.drawLines(this.LStyle);
  37.         this.createHandles();
  38.     };
  39.     this.drawLines = function(style) {
  40.         container.clear();
  41.         container.lineStyle(style.pen, style.clr, style.alpha);
  42.         container.beginFill(0xffff00, 50);
  43.         var SP = this.points[0];
  44.         container.moveTo(SP.x, SP.y);
  45.         for (var i = 0; i<this.points.length-2; i += 2) {
  46.             var begin = this.points[i];
  47.             var cp = this.points[i+1];
  48.             var end = this.points[i+2];
  49.             var controlX = (2*cp.x)-.5*(begin.x+end.x);
  50.             var controlY = (2*cp.y)-.5*(begin.y+end.y);
  51.             container.curveTo(controlX, controlY, end.x, end.y);
  52.         }
  53.         container.lineTo(SP.x, SP.y);
  54.     };
  55.     this.showLine = function() {
  56.         if (!$DRAWING) {
  57.             tmp.removeMovieClip();
  58.             return;
  59.         }
  60.         var lastPoint = this.points[this.points.length-1];
  61.         if (lastPoint != undefined) {
  62.             tmp = container.createEmptyMovieClip("TMP", 99999);
  63.             tmp.lineStyle(this.Lstyle.pen, this.LStyle.clr, this.LStyle.alpha);
  64.             tmp.moveTo(lastPoint.x, lastPoint.y);
  65.             tmp.lineTo(_root._xmouse, _root._ymouse);
  66.         }
  67.     };
  68.     this.createHandles = function() {
  69.         this.handles = mc.createEmptyMovieClip("HDLS", $d);
  70.         this.handles._visible = false;
  71.         for (var i = 0; i<this.points.length-1; i += 2) {
  72.             var H = this.createHandle(i);
  73.             H._x = this.points[i].x;
  74.             H._y = this.points[i].y;
  75.             //
  76.             var H = this.createHandle(i+1);
  77.             H._x = this.points[i+1].x;
  78.             H._y = this.points[i+1].y;
  79.             //
  80.             var H = this.createHandle(i+2);
  81.             H._x = this.points[i+2].x;
  82.             H._y = this.points[i+2].y;
  83.         }
  84.     };
  85.     this.createHandle = function(i) {
  86.         var H = this.handles.createEmptyMovieClip("H"+(i+2), (i+2));
  87.         H.linethis.Style(0.1, 0x000000, 100);
  88.         H.moveTo(-2, -2);
  89.         var n = i%2;
  90.         if (n == 0) {
  91.             var clr = 0xff0000;
  92.         } else {
  93.             var clr = 0x0000ff;
  94.         }
  95.         H.beginFill(clr, 100);
  96.         H.lineTo(2, -2);
  97.         H.lineTo(2, 2);
  98.         H.lineTo(-2, 2);
  99.         H.lineTo(-2, -2);
  100.         H.endFill();
  101.         H.LStyle = this.LStyle;
  102.         H.point = this.points[i];
  103.         H.points = this.points;
  104.         H.drawLines = this.drawLines;
  105.         H.onPress = function() {
  106.             this.LX = _root._xmouse;
  107.             this.LY = _root._ymouse;
  108.             this.onMouseMove = function() {
  109.                 this._x += (_root._xmouse-this.LX);
  110.                 this._y += (_root._ymouse-this.LY);
  111.                 this.point.x = this._x;
  112.                 this.point.y = this._y;
  113.                 this.drawLines(this.LStyle);
  114.                 updateAfterEvent();
  115.                 this.LX = _root._xmouse;
  116.                 this.LY = _root._ymouse;
  117.             };
  118.         };
  119.         H.onRelease = function() {
  120.             delete this.onMouseMove;
  121.         };
  122.         return H;
  123.     };
  124.     //Listner for showing the actual drawing
  125.     this.onMouseDown = function() {
  126.         delete this.onMouseMove;
  127.         if (this.stopped) {
  128.             if (!container.hitTest(_root._xmouse, _root._ymouse)) {
  129.                 this.handles._visible = false;
  130.             } else {
  131.                 this.handles._visible = true;
  132.             }
  133.             return;
  134.         }
  135.         if ($DRAWING) {
  136.             this.addPoint(_root._xmouse, _root._ymouse);
  137.             this.drawLines(this.LStyle);
  138.         } else {
  139.             this.stopped = true;
  140.             container.onPress = function() {
  141.                 this.handles._visible = true;
  142.                 this._parent.startDrag();
  143.             };
  144.             container.onRelease = function() {
  145.                 stopDrag();
  146.             };
  147.         }
  148.         tmp.removeMovieClip();
  149.     };
  150.     this.onMouseUp = function() {
  151.         if ($DRAWING) {
  152.             this.onMouseMove = this.showLine;
  153.         } else {
  154.             this.addPoint(this.points[0].x, this.points[0].y);
  155.             this.handles._visible = true;
  156.             delete this.onMouseUp;
  157.             tmp.removeMovieClip();
  158.         }
  159.     };
  160. }
  161. function newDrawing() {
  162.     d++;
  163.     var MC = _root.createEmptyMovieClip("D"+d, d);
  164.     draw = new drawing(MC);
  165.     Mouse.addListener(draw);
  166. }

Ich weiss dieser Kode is nocht nicht so sauber, kommt noch!
__________________
Keep on Flashing

Geändert von gerard (21-05-2003 um 19:11 Uhr)
gerard ist offline   Mit Zitat antworten
Alt 21-05-2003, 20:11   #2 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
Thumbs up

cewl

nochn bissel buggy, aber sonst schon schick.
das umschalten zwischen zeichnen und "draggen" funz noch recht haklig...

gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 21-05-2003, 21:08   #3 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
habs jetzt so spontan nicht zum laufen gebracht.
beim überfliegen hab ich nur gedacht: updateAfterEvent() in funktion showLine machts bestimmt geschmeidiger, wie es auch immer aussehen mag

gruß
micha
michael ist offline   Mit Zitat antworten
Alt 22-05-2003, 12:12   #4 (permalink)
Phlasher
 
Benutzerbild von gerard
 
Registriert seit: Nov 2001
Ort: Unna-Königsborn (NRW)
Beiträge: 466
Stimmt, muss da auch noch herein.
Das Starten einen zeichnung ist jetzt primitiev über einen Key.listener implementiert Leertaste started und stopt das zeichnen
__________________
Keep on Flashing
gerard ist offline   Mit Zitat antworten
Alt 22-05-2003, 12:19   #5 (permalink)
Phlasher
 
Benutzerbild von gerard
 
Registriert seit: Nov 2001
Ort: Unna-Königsborn (NRW)
Beiträge: 466
Hier ist das fla
Angehängte Dateien
Dateityp: zip drawii.zip (3,6 KB, 147x aufgerufen)
__________________
Keep on Flashing
gerard ist offline   Mit Zitat antworten
Alt 22-05-2003, 14:22   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Gefällt mit gut,
danke schön

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 22-05-2003, 14:45   #7 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
gerard - stellt dein Licht nicht in den Schatten. Schönes Beispiel - ich bin sicher die Jungs u. Mädels hier im Forum werden viel Freude damit haben.

live long and prosper...

Liebe Grüsse
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 22-05-2003, 14:50   #8 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
Thumbs up

wow das ist ja der hammer!!
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 22-05-2003, 15:34   #9 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
hmmm.... jetzt hab ich meinen Beitrag gerade gelöscht, weil ich dachte daß ich da wohl etwas danebengegriffen habe, aber offensichtlich war es doch richtig, statt:
ActionScript:
  1. H.onRelease = function() {
  2.             delete this.onMouseMove;
  3.         };
setzt mal folgendes ein:
ActionScript:
  1. H.onRelease =H.onReleaseOutside= function() {
  2.             delete this.onMouseMove;
  3.         };
...und schon passiert es nicht mehr, daß der Handler mal hängenbleibt....

...ach ja, insgesamt Spitzencode...

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 22-05-2003, 16:00   #10 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Sehr schön!

Die Funtionszuweisungen innerhalb des Konstruktors ist irgendwie gewöhnungsbedürftig, aber das ist Geschmackssache
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 22-05-2003, 16:03   #11 (permalink)
Phlasher
 
Benutzerbild von gerard
 
Registriert seit: Nov 2001
Ort: Unna-Königsborn (NRW)
Beiträge: 466
@Alois

Danke, gute Ergänzung Vergisse immer die onReleaseOutside!
@Alle

Ich wollte dieses Drawing Object ergänzen mit folgende Methoden:

drawCircel(radius) (centerpoint bestimmt durch Mouse)
drawStar (radius, points);
drawPoly(linewidth,points)
changeFill(color, alpha)
changeFillGrad(???)
changePen(thickness,color,alpha)

Fahre Morgen nach Griechenland aber nehme mein Laptop mit
Lasst euch überraschen

PS Auch Vorschlägen zu Verbesserung sind Willkommen

PPSS

die anpassung für controlpoints bei curveTo:
Danke an Robert Penner
__________________
Keep on Flashing

Geändert von gerard (22-05-2003 um 16:04 Uhr)
gerard 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:53 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele