Avatar billede sigva Nybegynder
08. marts 2006 - 15:52

with() funktion i en klasse

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 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
Kurser inden for grundlæggende programmering

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