Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-02-2011, 11:02   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 240
ränder von überlappenden rechtecken zeichnen

hallo zusammen

ich erstelle per drawRect Methode sagen wir mal 5 Rechtecke, die sich überschneiden. gibt es eine möglichkeit jetzt von diesen 5 "verschmolzenen" rechtecken nur den rand anzeigen zu lassen?

irgendwie mit union und intersect...hatte aber nicht wirklich erfolg.

besten dank und grüsse
StayFrosty ist offline   Mit Zitat antworten
Alt 02-02-2011, 11:55   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
eine einfache lösung:
H.G.Seib -> Glibber
Eine glibbrige Fläche

rein mathematisch ist das zusammenfügen von polygonen eine anspruchsvolle sache.
d.h. eigentlich ganz einfach:
man geht alle kanten rechtsherum durch und bei jedem schnittpunkt nach rechts abbiegen.
das ergebnis kann allerdings aus mehreren polygonen bestehen. z.b. wenn die objekte ein loch bilden ...
such dazu mal im internet nach:
mathe polygon schnittmenge
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (02-02-2011 um 15:23 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 02-02-2011, 14:46   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 240
danke hgseib für den tipp. ich suche mal dannach. ich dachte eben irgendwie es gäbe da schon einige befehle in as3 - aber da irre ich mich wahrscheinlich.

gruss
StayFrosty ist offline   Mit Zitat antworten
Alt 02-02-2011, 15:27   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
das mit der beispiel-fla (Glibber) hast du verstanden?

bei dir wäre das dann:
- 5 mc's die den rand darstellen
- darüber die 'normalen' 5 mc's

damit ist das nicht wirklich 'verschmolzen' aber es sieht so aus.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (02-02-2011 um 15:28 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 02-02-2011, 17:17   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 240
nein sorry verstehe ich nicht. bin nicht so fit in as2. du hast nicht eventuell ein vereinfachtes beispiel mit 2 quadraten oder so in as3? bisschen viel verlangt ich weiss...
habe vorhin etwas von drawPath gelesen....wäre das in as3 evtl. eine einfachere lösung?
StayFrosty ist offline   Mit Zitat antworten
Alt 02-02-2011, 18:13   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
zwei anstatt einem mc zu verschieben, das hat doch mit AS2 nichts zu tun.
hast du dir das beispiel das swf mal angesehen?
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 02-02-2011, 20:39   #7 (permalink)
I'M A CYBORG
 
Registriert seit: Apr 2007
Ort: ---------
Beiträge: 372
meinst du DisplayObject.blendMode ?
ActionScript:
  1. import flash.display.BlendMode;
mfg

Geändert von speedhost (02-02-2011 um 20:51 Uhr)
speedhost ist offline   Mit Zitat antworten
Alt 03-02-2011, 10:17   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
siehe anhang
Angehängte Dateien
Dateityp: fla rahmen.fla (7,7 KB, 5x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 08-02-2011, 16:51   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 240
hallo hgseib

danke dir für die einfache lösung
eigentlich sollte ich damit zufrieden sein. nur ich möchte nur den rand - also durchsichtig. wenn ich dein prinzip in diesem beispiel richtig verstanden habe, dann kann es so glaube ich nicht funktionieren, oder?

EDIT: vielleicht klappt deine lösung im zusammenhang mit den layer-modes, alpha oder erase..? hmm..mal ausprobieren.

danke dir.

grüsse
StayFrosty ist offline   Mit Zitat antworten
Alt 08-02-2011, 18:39   #10 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Hier mal fix:
PHP-Code:
package 
{
    
import flash.display.Bitmap;
    
import flash.display.BitmapData;
    
import flash.display.BlendMode;
    
import flash.display.Sprite;
    
import flash.events.Event;
    
    
/**
     * wie unmoralisch: Rechtecke nur auf ihre Umrandung zu reduzieren
     * @author milchreis
     */
    
public class Main extends Sprite 
    
{
        
        
        public function 
Main():void 
        
{
            if (
stageinit();
            else 
addEventListener(Event.ADDED_TO_STAGEinit);
        }
        
        private function 
init(e:Event null):void 
        
{
            
removeEventListener(Event.ADDED_TO_STAGEinit);
            
// entry point
            
            
var rechtEckig:Array = new Array();
            var 
bmd:BitmapData = new BitmapData(stage.stageWidthstage.stageHeight);
            
addChild(new Bitmap(bmd));
    
            
            
//5 Rechtecke erzeugen und zeichnen
            
for (var i:int 05i++)
            {
                var 
r:Rect = new Rect(Math.random() * 100 100Math.random() * 100 100);
                
                
r.Math.random() * 100 stage.stageWidth/2;
                
r.Math.random() * 100 stage.stageHeight 2;
                
                
bmd.draw(rr.transform.matrix);
                
                
rechtEckig.push(r);
            }
            
            
//verkleinerte versionen wieder rausradieren
            
for (05i++)
            {
                
rechtEckig[i];
                
                
r.scaleX r.scaleY .9//nicht schön, aber selten
                
                
bmd.draw(rr.transform.matrixnullBlendMode.ERASE);
            }
            
        }
        
    }
    

//mit
PHP-Code:
package  
{
    
import flash.display.Shape;
    
    
/**
     * 'n Reschtäck
     * @author milchreis
     */
    
public class Rect extends Shape
    
{
        public function 
Rect(a:Numberb:Number
        {
            
super();
            
            
graphics.beginFill(0);
            
graphics.drawRect( -2, -2ab);
            
graphics.endFill();
            
        }
        
    }


Dadurch das die Rechtecke skaliert werden, ist die resultierende Dicke der Linie nicht konstant.
Man müsste die Rechtecke in Höhe und Breite unterschiedlich ändern, dazu bin ich aber gerade zu faul.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 09-02-2011, 06:22   #11 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Post

Zitat:
Zitat von milchreis Beitrag anzeigen
Man müsste die Rechtecke in Höhe und Breite unterschiedlich ändern, dazu bin ich aber gerade zu faul.
PHP-Code:
var lineWidth:Number 1;
//...

for (rechtEckig.lengthi--; ){
    
rechtEckig[i];
    
r.width -= lineWidth 2;
    
r.height -= lineWidth 2;
    
bmd.draw(rr.transform.matrixnullBlendMode.ERASE);

    
//und wieder zurücksetzen
    
r.width += lineWidth 2;
    
r.height += lineWidth 2;


alternative über fillRect:
PHP-Code:
var rechtEckig:Array = new Array();
var 
bmd:BitmapData = new BitmapData(stage.stageWidthstage.stageHeight);
addChild(new Bitmap(bmd));
    
var 
lineWidth:Number 1;
var 
color:uint 0xFF00FF;

for (var 
i:int 05i++)
{
    var 
r:Rectangle = new Rectangle(0,0,Math.random() * 100 100Math.random() * 100 100);
        
r.Math.random() * 100 bmd.width r.width/2;
        
r.Math.random() * 100 bmd.height r.height/2;
    
bmd.fillRect(r0xFF000000 color);
    
rechtEckig.push(r);
}

for (
rechtEckig.lengthi--; )
{
    
rechtEckig[i].clone();
    
r.inflate(-lineWidth, -lineWidth);
    
bmd.fillRect(r0x00000000);

- schneller als BitmapData.draw
- arbeitet pixelgenau also keine Kantenglättung, keine halben Pixel, und funktioniert somit nur mit ganzen Liniendicken korrekt.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 09-02-2011, 16:42   #12 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Soll nur Addition stattfinden oder auch Subtraktion?

Also wenn ein Rechteck vollständig einen anderem liegt, wird es dann als Loch erwartet?
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 09-02-2011, 17:15   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
es führen immer viele wege zum ziel
Code:
var rahmer:Sprite = new Sprite();
rahmer.addEventListener(MouseEvent.MOUSE_DOWN,eventDown);
rahmer.addEventListener(MouseEvent.MOUSE_UP,eventUp);
addChild(rahmer);
//
var lineColor:Number = 0;
var lineSize:int=2;
var glowFilter:GlowFilter=new GlowFilter(lineColor,1,lineSize,lineSize,8,2,false,false);
rahmer.filters=[glowFilter];
//
for (var i:int=0; i<8; i++) {
	var mc:Sprite = new Sprite();
	mc.graphics.beginFill(0x99ff99);
	mc.graphics.drawEllipse(0,0,120,80);
	mc.x=Math.random()*400+60;
	mc.y=Math.random()*300+40;
	rahmer.addChild(mc);
}
//
function eventDown(evt:MouseEvent) : void {
	evt.target.startDrag();
}
function eventUp(evt:MouseEvent) : void {
	evt.target.stopDrag();
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 11-02-2011, 17:25   #14 (permalink)
Neuer User
 
Registriert seit: Nov 2003
Beiträge: 240
besten dank allen für die feedbacks....

...tur mir leid. irgendwie bring ich das teil nicht zum laufen. comiler meldet fehler von wegen ibitmap interfaces etc...
StayFrosty ist offline   Mit Zitat antworten
Alt 11-02-2011, 18:18   #15 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von StayFrosty Beitrag anzeigen
...tur mir leid. irgendwie bring ich das teil nicht zum laufen. comiler meldet fehler von wegen ibitmap interfaces etc...

Meine Kristallkugel sagt: "poste den Code der den Fehler verursacht".
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Schnittmenge von 2 Rechtecken hildebruns Flash CS3 Professional 2 23-07-2008 19:03
ContextMenu bei 2 überlappenden mcs Dennis Flash 8 0 22-05-2007 13:33
abfedern von Rechtecken bike Flash 8 3 05-01-2006 09:15
Wie kann ich die Ränder eines Films direkt an die Ränder des Browserfensters setzen? BigO HTML und CSS 2 22-01-2005 12:57
hitTest bei überlappenden MC´s Franko Singh ActionScript 1 5 06-10-2004 17:19


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele