Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-02-2006, 21:07   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Unhappy Maske mit AS erstellen

Hallo,
kann man mit FlashMX Masken per Actionscript erstellen? Letztendlich hab ich ein großes Bild, dass man innerhalb eines sichtbaren bereiches (=Maske) herumdraggen können soll.

Im moment hab ich einen Container, in den das Bild geladen wird und dessen _x und _y werte ich onMouseDown verändere. Der Container wird ebenfalls dynamisch an einer best. Postion mit createEmptyMovieClip erstellt. Man soll das Bild aber nur in einem Bereich von sagen wir mal 200x400 Pixeln, gemessen von dem Start_x und Start_y des Containers aus sehen können.

Jeder Hinweis ist gut!!!!
Beezle-Bug ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:10   #2 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Hmmm... wenn nicht die Forensuche, so lieferte zumindest die Suche in Flash (F1 drücken) ne Menge hilfreicher Infos (wie Versionskompatibilität etc.)!

setMask ist das Zauberwort!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:14   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Hab ich auch schon probiert

PHP-Code:
_level0.createEmptyMovieClip("mask2"1070);
with (this.mask2) {
    
_x con._x+mainwidth+2;
    
_y 0;
    
_width 500;
    
_height 520;
}

_level0.createEmptyMovieClip("con2"1060);
with (this.con2) {
    
_x con._x+mainwidth+2;
    
_y 0;
    
this.onMouseDown = function() {
        
this.onEnterFrame = function() {
            
con2._x _xmouse;
            
con2._y _ymouse;
            
trace(con2._x);
        };
    };
    
this.onMouseUp = function() {
        
delete this.onEnterFrame;
    };
}
_level0.con2.setMask(_level0.mask2); 
Aber ich bezweifle, dass mir Flash mask2 in der angegebenen Größe erstellt, und maskieren tut sich da gar nichts! Sollen beide mcs in die Selbe Ebene?

Das mit dem rumziehen ist auch noch nicht so elegant, da _x natürlich bei jedem Klick wieder auf _xmouse zurückspringt, man aber eigentlich das bild mit mehrerern Bewegungen schieben können soll, aber das ist erstmal Nebensache
Beezle-Bug ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:15   #4 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.649
Ich bin auch noch Anfänger.
Aber ich würde es versuchen zu lösen in dem du eine Maskenebene erstellst,
und dann einen MC draufpackst.
Und dann mit AS die größe steuern kannst.
Z.B.
PHP-Code:
MC._width start_x+200
b.asile ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:21   #5 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Naja... die Maske müsste schon mit was gefüllt sein! Wenn du das ganze von Hand aufziehst, musst du ja auch mindestens ne Form als Maske angeben!
Da werden dir

beginFill()
moveTo()
lineTo()
und
endFill()

helfen!
Und wie genau meinst du das mit dem draggen?
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:24   #6 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Wie der Namen createEmptyMovieClip schon sag wird nur ein leeres
MovieClip erstellt. Man muß es also noch füllen, um es als Maske verwenden
zu können.

PHP-Code:
_level0.createEmptyMovieClip("mask2"1070);
with (this.mask2) {
    
_x con._x+mainwidth+2;
    
_y 0;
    
beginFill(0xff00ff)
    
moveTo(0,0)
    
lineTo(500,0)
    
lineTo(500,520)
    
lineTo(0,520)
    
lineTo(0,0)
    
endFill()

bamboocha war schneller.
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:30   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Ihr seid beide gut ;-)

befülle das teil gerade, maskieren tut der jetzt rote klotz aber immer noch nichts:

PHP-Code:
_level0.con2.setMask(_level0.mask2); 
Wie gesagt, ich hab FlashMX, Version6.0 aber jetzt sagt bitte nicht sowas wie: "das geht damit nicht", das wäre zu plump ;-)

Könnte es an den Ebenen liegen 1060, 1055? Wenn ich beides in 1060 packe, seh ich mask2 nicht mehr.

Geändert von Beezle-Bug (06-02-2006 um 21:35 Uhr)
Beezle-Bug ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:33   #8 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Es liegt ja auch nix in deine con2, oder wo lädst du was ein?
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:41   #9 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Und das mit dem Draggen war so gemeint.

Ich habe ja hoffentlich bald einen maskierten Bereich, durch den man auf ein recht großes, in den container "con2" dynamisch reingeladenes Bild blickt. Da man von diesem Bild nicht alles sieht, soll man es, wenn man es mit der Maus packt (also on Mouse Down) verschieben können. Das Bild ist aber so groß, dass man es 3mal ganz unten packen und nach oben schieben muss, um alles zu sehen. Irgendwie muss man also die momentane _x und _y Position speichern und dann wieder einen neuen dragg vorgang einleiten.

Wenn ich aber einfach nur con2._x+=_xmouse mach, dann saust mir das Bild recht schnell aus dem Rahmen raus, weil tausendmal hintereinander der x-Wert also, z.B. 500 dazugezählt wird...

Ich hoffe, das war einigermaßen verständlich, aber mir macht die Maske gerade größere Sorgen
Beezle-Bug ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:43   #10 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
startDrag()
stopDrag()

__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:50   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Wollte euch das an dieser Stelle eigentlich ersparen

Also.... Ich habe ganz viele Thumbnails (und dazu schon viel gepostet) und onPress laden die mir in "con" ein großes Bild und in "con2" ein riesiges Bild von sich, letzteres ist dann zum in der Maske rumschieben gedacht!

Die Thumbnails übermitteln ihre id/paktBild und actionscript sucht sich dann aus einer xml datei die passenden Bilder für con und con2 raus. con2 wird also auch dynamisch bestückt, ich hoffe das ist kein Problem für die Maske. Aber wenn man das ganze auch ganz anders lösen kann, ist das auch ok!!!

Hier also der Code:
PHP-Code:
function ladeBild(paktBild) {
    if (
paktBild<=9) {
        
nr "0"+paktBild;
    } else {
        
nr paktBild;
    }
    
//status_mc._visible = 1;
    
con1pic "pics/"+nr+"Bild.jpg";
    
con2pic "zoom/"+nr+"Bild.jpg";
    
bildname mein_xml.firstChild.childNodes[paktBild].attributes.name;
    
loadMovie(con1pic"con");
    
loadMovie(con2pic"con2");// Hier wird das Bild in con2 geladen!
    
con._alpha 0;
    
con2._alpha 0;
    
info.txt.text bildname;
    
this.loadcon1();
    
this.loadcon2();
    
MovieClip.prototype.loadcon2 = function() {
        
this.onEnterFrame = function() {
            var 
fin2 int(_level0.con2.getBytesLoaded()*100/_level0.con2.getBytesTotal());
            
trace("total con2: "+_level0.con2.getBytesTotal());
            
_level0.ladebalken2.laden(idfin2);
            if (
fin2>=100 && _level0.con2._width>&& _level0.con2._height>0) {
                
_level0.ladebalken2.fertig(idfin2);
                
delete this.onEnterFrame;
            }
        };
    };
    
MovieClip.prototype.loadcon1 = function() {
        
this.onEnterFrame = function() {
            
// Preloader, kontinuierliche Überprüfung des Ladevorgangs
            
var fin int(_level0.con.getBytesLoaded()*100/_level0.con.getBytesTotal());
            
trace("total con1: "+_level0.con.getBytesTotal());
            
// Prozentwerte berechnen
            
_level0.ladebalken.laden(idfin);
            
// Ladebalken starten
            
if (fin>=100 && _level0.con._width>&& _level0.con._height>0) {
                
// wenn alles geladen wurde...
                
_level0.ladebalken.fertig(idfin);
                
delete this.onEnterFrame;
                
//this.loadcon2();
            
}
        };
        
// dann den Event wieder löschen
    
};

Das Problem was ich bei der ganzen K*cke noch hab ist, dass natürlich das kleinere Bild schneller geladen ist und ich nehme mal an dessen "delete this.onEnterFrame" das weitere laden des 2. Containers unterbindet. Sollte so ablaufen, dass zuerst "con" bestückt wird, und wenn das bild da ist, das große detailbild geladen wird.

Naja, aber wir wollten ja über masken sprechen :-P
Beezle-Bug ist offline   Mit Zitat antworten
Alt 06-02-2006, 21:57   #12 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
ok, draggen ist gelöst. Hab das erst auch schon mit startDrag() probiert, aber das bild nicht mehr von der Maus losgekriegt, war wie eine Klette...
Aber so passts:

PHP-Code:

_level0
.createEmptyMovieClip("con2"1060);
with (this.con2) {
    
_x con._x+mainwidth+2;
    
_y 0;
    
this.onMouseDown = function() {
        
this.onEnterFrame = function() {
            
con2.startDrag();
            
trace(con2._x);
        };
    };
    
this.onMouseUp = function() {
        
delete this.onEnterFrame;
        
this.con2.stopDrag();
    };

Nur sollte man das Bild nur innerhalb der maske "mask2" sehen
Beezle-Bug ist offline   Mit Zitat antworten
Alt 06-02-2006, 22:15   #13 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Hier mal ein Drag-Beispiel.

Edit: Du mußt halt nur noch deinen Preloader zwischenschalten, der dem
con2 die Maske und Events zuweist, sobald das Bild geladen ist.


Edit: MX-Version angehängt
Angehängte Dateien
Dateityp: rar dragMask.rar (13,1 KB, 24x aufgerufen)
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::

Geändert von psyk (06-02-2006 um 23:09 Uhr)
psyk ist offline   Mit Zitat antworten
Alt 06-02-2006, 22:15   #14 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Unhappy

ok, tut mir Leid, ich sollte nicht zu viel auf einmal wollen.

Das Problem nochmal: Ich habe einen createEmptyMovieClip "con2" der dynamisch mit externen Bildern bestückt wird, diese aber nur innerhalb eines bestimmten sichtbaren Bereichs "mask2" darstellen soll.

?????????

Muss doch machbar sein

Vielleicht bau ich das setMask ja auch nur an einer falschen Stelle ein

------------------

Ups, sry, psyk war schneller. Kannst du mir bitte das ganze nochmal als FlashMX / Flash 6.0 abspeichern? Kann sonst die fla nicht öffnen.
An dieser Stelle möchte ich mich auch noch für deinen/euren Einsatz bedanken ;-) Danke!

Geändert von Beezle-Bug (06-02-2006 um 22:17 Uhr)
Beezle-Bug ist offline   Mit Zitat antworten
Alt 06-02-2006, 22:20   #15 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
So - mal ohne Garantie (konnte es leider nicht testen!):
PHP-Code:
function ladeBild(paktBild) {
    
MovieClip.prototype.loadcon = function(was) {
        
this.loadMovie(was);
        var 
watcher this._parent.createEmptyMovieClip("watcher"+this._namenr);
        
watcher.onEnterFrame = function() {
            var 
fin Math.floor(ziel.getBytesLoaded()*100/ziel.getBytesTotal());
            
trace("total "+ziel+": "+ziel.getBytesTotal());
            
ziel.laden(idfin);
            if (
fin>=100 && ziel._width>&& ziel._height>0) {
                
ziel._alpha 0;
                
ziel.fertig(idfin);
                
delete this.onEnterFrame;
                
this.removeMovieClip();
            }
        };
    };
    if (
paktBild<=9) {
        
nr "0"+paktBild;
    } else {
        
nr paktBild;
    }
    
//status_mc._visible = 1;
    
con1pic "pics/"+nr+"Bild.jpg";
    
con2pic "zoom/"+nr+"Bild.jpg";
    
bildname mein_xml.firstChild.childNodes[paktBild].attributes.name;
    
this.con.loadcon(con1pic);
    
this.con2.loadcon(con2pic);// Hier wird das Bild in con2 geladen!
    
info.txt.text bildname;

__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha 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 19:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele