Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-07-2006, 11:43   #1 (permalink)
n00b
 
Registriert seit: Dec 2004
Beiträge: 94
Fläche schraffieren

Hi!

Ich möchte eine Funktion schreiben, mit der ich ein Rechteck schraffieren kann, da ich nirgends etwas dergleichen gefunden habe.
Ich schaffe es jedoch leider nicht.

Mein momentaner Code sieht so aus:
Code:
//o = zielobjekt, f1 = hintergrundfarbe, f2 = schraffurfarbe, f3 = randfarbe
drawHatchedForm = function(o, x, y, w, h, f1, f2, f3)
{
	var abstand=10;
	with(o)
	{
		beginFill(f1);
		moveTo(x, y);
		lineTo(x+w, y);
		lineTo(x+w, y+h);
		lineTo(x, y+h);
		lineTo(x, y);
		endFill();
		
		lineStyle(3, f2);
		for(i=x; i<(x+w-h); i+=abstand)
		{
			// -1 und +1 damit nicht aus der fläche hinausgezeichnet wird 
			moveTo(i+1, y+h-1);
			lineTo(i+h+1, y+1);
		}
		
		lineStyle(2, f3);
		moveTo(x, y);
		lineTo(x+w, y);
		lineTo(x+w, y+h);
		lineTo(x, y+h);
		lineTo(x, y);
	}
}
Aufruf z.B. mit :
Code:
drawHatchedForm(_root.formen, 20, 20, 120, 40, 0xFF8080, 0x80FF80, 0xFFFF00);
Mit dem bisherigen Code wird die Fläche gezeichnet und mit der Schraffur begonnen. Es wird immer von links unten nach rechts oben (Winkel 45°) gezeichnet. Somit bleibt aber links und rechts jeweils ein kleines Dreieck (oder ein bisschen mehr) frei, und es gelingt mir einfach nicht dieses zu füllen. Die Linien werden nie parallel zu den bisherigen Linien, egal was ich versuche. Es soll natürlich nicht aus der Form hinausgezeichnet werden.


Ich bitte darum, dass mir jemand helfen kann, oder vielleicht sogar schon eine fertige Schraffur-Funktion hat.


Gruß
m0m0
_m0m0_ ist offline   Mit Zitat antworten
Alt 28-07-2006, 19:21   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..Somit bleibt aber links und rechts jeweils ein kleines Dreieck (oder ein bisschen mehr) frei.."
dann wirst du halt noch 2 for schleifen für diese dreiecke ergänzen müssen. und denke daran, dass ein rechteck auch höher als breit sein kann.

oder zieh ein rechteck als maske auf und maskiere deine schraffuren. so gehts auch mit anderen konturen als nur mit rechtecken.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (28-07-2006 um 19:22 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 28-07-2006, 19:57   #3 (permalink)
n00b
 
Registriert seit: Dec 2004
Beiträge: 94
Ich habs jetzt hinbekommen.
Ich habe immer + und - 1 überall stehen gehabt, damit die diagonalen Linien nicht über den Hintergrund hinausstehen, und deshalb hat es nicht funktioniert. Ohne den Korrekturen (und einfach mit einer dickeren Umrandungslinie) funktioniert es prima.
An die Möglichkeit mit einer Maske hab ich auch schon gedacht, allerdings wollte ich es ohne Maske lösen, also einfach nur mit simplen Zeichenoperationen.


Für diejenigen, die die Funktion brauchen können, hier ist sie:
Code:
//o = zielobjekt, f1 = hintergrundfarbe, f2 = schraffurfarbe, f3 = randfarbe
drawHatchedForm = function(o, x, y, w, h, f1, f2, f3)
{
	if(w < 0 || h < 0) return;
	var abstand=10;
	var breite=3;
	with(o)
	{
		beginFill(f1);
		moveTo(x, y);
		lineTo(x+w, y);
		lineTo(x+w, y+h);
		lineTo(x, y+h);
		lineTo(x, y);
		endFill();
		
		lineStyle(breite, f2);
		for(i=x-h; i<(x+w); i+=abstand)
		{
			var x1=i;
			var y1=y+h;
			var x2=i+h;
			var y2=y;
			
			if(i<x)
			{
				var diff = x-i;
				x1+=diff;
				y1-=diff;
			}
			if(i>(x+w-h))
			{
				diff = x+w-h-i;
				x2+=diff;
				y2-=diff;
			}
			moveTo(x1, y1);
			lineTo(x2, y2);
		}
		
		lineStyle(3, f3);
		moveTo(x, y);
		lineTo(x+w, y);
		lineTo(x+w, y+h);
		lineTo(x, y+h);
		lineTo(x, y);
	}
}
_m0m0_ 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 11:51 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele