Avatar billede sigva Nybegynder
08. marts 2006 - 16:24 Der er 3 kommentarer

Klasseproblem i ActionScript

Hej, første gang som jeg bruger dette her, håber jeg kommer til at forklare mit spørgsmål godt nok :-)

Jeg arbejder for første gang med "Object Orienteret Programmering" i Flash, og har prøvet at få en lille "skrabe-funktion" som jeg har tidligere lavet som "Procedural" til at virke. Kort sagt handler det om 2 billeder og et lille logo som skraber som sagt igennem den overste billede, så den nedenunder vises. Dette er del af specialiserings-projekt på min Multimediedesigner uddannelse - her følger koden (og jeg er vant til at kommentere koden på engelsk, håber det kommer til at gøre det sværere at læse igennem det hele :)

Mit spørgsmål er om det ikke er i orden at bruge with() funktionen i OOP? Jeg tror at fejlen ligger der og har derfor skrevet i koden de andre forsøg jeg har gjort.

Hilsen,
Sigva

// PROCEDURAL CODE THAT WORKS:

//CREATE THE "SQUARE" TO USE AS A MASK
_root.createEmptyMovieClip('square',0);

//SET WHICH MOVIECLIP IS THE MASK
_root.mc_maskee.setMask (_root.square)   

function drawSquare() {
    //SIZE OF THE SQUARE
    size = 15;
    x = _root._xmouse;
    y = _root._ymouse;
    with(_root.square) {
        moveTo(x-size,y-size);
        beginFill(0x000088);
        lineTo(x+size,y-size);
        lineTo(x+size,y+size);
        lineTo(x-size,y+size);
        endFill();
    };
    updateAfterEvent();
};

//#####################################

// MY VERSION OF THE SAME THING IN A CLASS...DOESN'T WORK

class MaskButton extends MovieClip {

    // variables############################################
    var mask_mc:MovieClip; // the movieclip that is "the mask" (_root.square_mc)
    var over_mc:MovieClip; // the movieclip that the masks scrapes of (_root.imageOver_mc)
    var under_mc:MovieClip; // the movieclip that the masks reveals (_root.imageUnder_mc)
    var size:Number; // to change the size of the mask "square_mc" (coordinates with draw function)
    var x:Number;
    var y:Number;
    var header_text:String; // text in the header of the application
    var bottom_text:String; // text in the bottom of the application
   
    // constructor#####################################################
    public function MaskButton() {
        onPress = doDraw; //method declared later
        onRelease = stopDraw; //method declared later

        // set defaults of the constructor method
       
        // create empty movieclip and set mask
        _root.createEmptyMovieClip('square_mc',0); // NOTE: Is levels causing problems?
        mask_mc = _root.square_mc;
        _root.imageOver_mc.setMask(_root.square_mc);
        over_mc = _root.imageOver_mc;
        under_mc = _root.imageUnder_mc;
       
        // default size of coordinates for draw function (see below)
        size = 15;
    }
   
    // methods#################################################
    private function doDraw():Void {
        this.startDrag(); // start dragging - extended from MoveClip class
        this._alpha = 50; // logo becomes 50% visible
        x = this._xmouse; // gives values for the draw function that comes later
        y = this._ymouse;
        // tracing to check, everything shows a value
        trace ("tracing doDraw - size: " + size);
        trace ("mask_mc: " + mask_mc);
        trace ("over_mc: " + over_mc);
        trace ("under_mc: " + under_mc);
        trace ("x: " + x);
        trace ("y: " + y);
   
        // THE PART THE DOESN'T WORK - CAN'T GET THE LOGO TO "SCRAPE" THE MASKING IMAGE
        with (mask_mc) { // have tried "_root.square_mc" and "_root.square_mc.moveTo..."
            moveTo(x-size, y-size); // have also tried to use "(this.x-size, this.y-size)"
            beginFill(0x000088);
            lineTo(x+size, y-size);
            lineTo(x+size, y+size);
            lineTo(x-size, y+size);
            endFill();
        }

    }

} // end class
Avatar billede barklund Nybegynder
08. marts 2006 - 16:41 #1
Doesn't work en en skidt fejl-betegnelse - hvad er fejlen, som du får? Compiler-fejl, ...?

Derudover bør man aldrig bruge _root og tilsvarende i sin klasser, men istedet lave alt, så det hænger korrekt sammen i klasserne og deres struktur. Smid alt ind i et movieclip, som har en klasse, så du har en bestemt klasse yderst, der kan håndtere de tre dele (knap, billede og maske) og hav igen en klasse til hver af disse dele.
Avatar billede sigva Nybegynder
08. marts 2006 - 18:19 #2
Tak for en hurtig besvarelse Morten,

Undskyld at jeg ikke var klar nok med fejlen men jeg får slet ikke nogen fejlmelding.
Funktionen virker bare ikke, dvs. knappen "masker" ikke billedet.

Mine "doDrag" og "stopDrag" metoder virker ellers, så jeg kan godt flytte knappen rundt...men som sagt sker der ingen ting med masken - men der opstår heller ikke nogen fejl.

Hilsen,
Sigva
Avatar billede barklund Nybegynder
09. marts 2006 - 10:45 #3
Jeg vil nu stadig henvise til, at det er noget rodet struktureret. At lave sit script OOP er andet og mere end at flytte sine funktioner ind i en klasse. Det er at tænke objekt-orienteret, så man har klasser med hver deres begrænsede og veldefinerede funktionalitet, som interagerer til at opnå det ønskede resultat.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester