Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-02-2004, 09:40   #1 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Genauigkeit von lineStyle

Hi zusammen,
ich bastel grad an nem Movie und da ist mir mit drawapi was aufgefallen. Ich will einen Innenrand auf der Stage von genau 10 Pixel haben.
ActionScript:
  1. breite=Stage.width
  2. hoehe=Stage.height
  3.  
  4. rand=this.createEmptyMovieClip("border",0);
  5. rand.lineStyle (10, 0xFFFFFF, 100);
  6. rand.moveTo (0, 0);
  7. rand.lineTo (breite, 0);
  8. rand.lineTo (breite, hoehe);
  9. rand.lineTo (0, hoehe);
  10. rand.lineTo (0, 0);
Ist nicht so toll, da ja der Mittelpunkt vom Movieclip genommen wird. Also versuch ich es damit:
rand.lineStyle (20, 0xFFFFFF, 100);
Mach ich jetzt einen Screenshot und mess in Poposhop den rand aus, habe ich einen Unterschied von einem Pixel im Verhältnis zur Höhe.
Setzte ich die Breite und die Höhe jeweils bei:
rand.lineStyle (10, 0xFFFFFF, 100);
minus fünf, passt es zwar, nur ist die 10 pix dicke Linie an den Ecken abgerundet.
Komisch, komisch.
Hat einer von euch vielleicht ne Erklärung dafür?
Ich weiss, ein "gemaltes" Rect wär einfacher, aber gescriptet find ich es halt sauberer.

Greets, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 21-02-2004, 10:28   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
hi micha,

die Linienendpunkte sind in Flash immer abgerundet. Egal ob du sie mit der Drawing-API oder direkt auf der Bühne zeichnest.

Der Trick ist, ein Rechteck zeichnen zu lassen, dass die gesamte Breite der Bühne ausfüllt, und dann ein zweites kleineres in umgekehrter Richtung (also das erste z.B. im Uhrzeigersinn und das zweite gegen den Uhrzeigersinn). Dadurch schneidest du ein Loch in das große Rechteck.

Beispiel:
ActionScript:
  1. breite=Stage.width
  2. hoehe=Stage.height
  3.  
  4. rd = 10 // --> rahmendicke;
  5.  
  6. rand=this.createEmptyMovieClip("border",0);
  7. rand.beginFill(0);
  8. // großes Rechteck zeichnen (im Uhrzeigersinn)
  9. rand.moveTo (0, 0);
  10. rand.lineTo (breite, 0);
  11. rand.lineTo (breite, hoehe);
  12. rand.lineTo (0, hoehe);
  13. rand.lineTo (0, 0);
  14. // kleines Rechteck zeichnen (gegen den Uhrzeigersinn)
  15. rand.moveTo (rd, rd);
  16. rand.lineTo (rd, hoehe - rd);
  17. rand.lineTo (breite - rd, hoehe - rd);
  18. rand.lineTo (breite - rd, rd);
  19. rand.lineTo (rd, rd);
  20. rand.endFill();
Das ganze kannst du natürlich auch als Prototypen definieren und dann auf alle beliebigen Movieclips anwenden:
ActionScript:
  1. /**
  2. *   x = x-Position des Rahmens
  3. *   y = y-Position des Rahmens
  4. *   w = Breite des Rahmens
  5. *   h = Höhe des Rahmens
  6. *   t = Dicke des Rahmens
  7. *   c = Farbe des Rahmens
  8. *   a = Alphawert des Rahmens
  9. */
  10. MovieClip.prototype.drawBorder = function(x, y, w, h, t, c, a){
  11.     var wt  = w - t;  // hoehe - rahmendicke
  12.     var ht  = h - t;  // breite - rahmendicke
  13.     this.clear();
  14.     this.beginFill(c, a);
  15.     this.moveTo (x, y);
  16.     this.lineTo (w, y);
  17.     this.lineTo (w, h);
  18.     this.lineTo (x, h);
  19.     this.lineTo (x, y);
  20.     this.moveTo (t, t);
  21.     this.lineTo (t, ht);
  22.     this.lineTo (wt, ht);
  23.     this.lineTo (wt, t);
  24.     this.lineTo (t, t);
  25.     this.endFill();
  26. };
  27.  
  28. breite=Stage.width
  29. hoehe=Stage.height
  30.  
  31. rand=this.createEmptyMovieClip("border",0);
  32. rand.drawBorder(0, 0, breite, hoehe, 10, 0, 100);
gruß,
roman

<edit>
wenn schon als Prototype, dann auch mit Farb- und Alphaangaben. Ich hab's oben noch mal geändert
</edit>

Geändert von romän (21-02-2004 um 10:33 Uhr)
romän ist offline   Mit Zitat antworten
Alt 21-02-2004, 11:03   #3 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Hi Roman,
wow, coole Idee, das mit dem "links herüm un rächts herüm".

helau

Nee, ernsthaft. 1000 Dank.

Greets, Micha
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 21-02-2004, 11:06   #4 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
Opps,
noch was aufgefallen
In deinem Script definierst du "c" (=Farbe) mit dem Wert 0, d.h. der Rand wird schwarz.
Ich kenn es nur so, dass man die Color mit 0xFFFFFF etc. definieren kann.
Weisst du was, was ich nicht weiss?
Rand soll nämlich weiss werden.
__________________
Arbeit ist keine Lösung...
hugeinc ist offline   Mit Zitat antworten
Alt 21-02-2004, 11:22   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
hi,

klar kannst anstelle von 0 auch 0x000000 schreiben. Da beides aber definitiv 0 ist und ich ne faule Sau bin, spar ich mir dadurch immer etwas Tipparbeit .

Du kannst wie gewohnt 0xFFFFFF für weiß oder 0xFF0000 für rot angeben.

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 21-02-2004, 12:36   #6 (permalink)
#no.991 @ MM
 
Benutzerbild von hugeinc
 
Registriert seit: Apr 2003
Ort: München
Beiträge: 327
> faul
Geht mir genauso :-)

> color
Hätt ja sein können, dass da noch was undokumentiertes ist.
Na ja, nochmal 1000 Dank.

Micha
__________________
Arbeit ist keine Lösung...
hugeinc 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 14:20 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele