Avatar billede sako Nybegynder
12. oktober 2004 - 09:41 Der er 9 kommentarer og
1 løsning

hvor meget "maske" er fjernet

Jeg har et banner hvor der er 2 mcèr som er en maske - de kan "skrabes" væk med musen - så man kan se billedet neden under. Er det muligt at opfange hvor meget af MCét der er skrabt væk ?? - skulle gerne bruge en funktion som sendte brugeren videre når 90-95 % af det samlet areal på de 2 MCèr er skrabt??
Avatar billede rohaje Nybegynder
12. oktober 2004 - 09:49 #1
Du bliver nok nød til at forklare lidt mere, evnt lidt "skrabe" - kode eller min. -metoden.
Avatar billede sako Nybegynder
12. oktober 2004 - 10:35 #2
der kommer lige et link her - http://www.testwebsite.dk/banner/banner.html
Avatar billede Slettet bruger
12. oktober 2004 - 21:17 #3
Kører begge mc'er på samme mask, eller hvordan er den scriptet?
Avatar billede sako Nybegynder
12. oktober 2004 - 21:31 #4
Scriptet ser ud som følgende:

    MovieClip.prototype.startScratch = function(width){
    var s = this.createEmptyMovieClip(this.i,++this.i);
    s.w = width/2;
    s.xLast = s._xmouse;
    s.yLast = s._ymouse;
    s.xPen = s.xLast;
    s.yPen = s.yLast;
    s.xPen2 = s.xPen;
    s.yPen2 = s.yPen;
    s.onMouseMove = doScratch;
  }
 
function doScratch(){

    if(Mouse.isDown()){
        var xCurr = this._xmouse;
        var yCurr = this._ymouse;
        var dxCurr = xCurr - this.xLast;
        var dyCurr = yCurr - this.yLast;
        this.xLast = xCurr;
        this.yLast = yCurr;

        var theta = -Math.atan2(dyCurr,dxCurr);
        var p1x = xCurr + this.w*Math.sin(theta);
        var p1y = yCurr + this.w*Math.cos(theta);
        var p2x = 2*xCurr - p1x;
        var p2y = 2*yCurr - p1y;
        this.beginFill(0);
        this.moveTo(this.xPen2,this.yPen2);
        this.lineTo(this.xPen,this.yPen);
        this.lineTo(p1x,p1y);
        this.lineTo(p2x,p2y);
        this.endFill();
        this.xPen = p1x;
        this.yPen = p1y;
        this.xPen2 = p2x;
        this.yPen2 = p2y;
    }else{
        this.endScratch();
    }
  }

    MovieClip.prototype.endScratch = function(){
    for(var p in this){
        if(typeof(this[p])!="movieclip"){
            delete(this[p]);
        }
    }
}

wax = this.createEmptyMovieClip("wax_mc",1);
wax.onMouseDown = function(){
    this.startScratch(6);
}
wax.onMouseUp = function(){

    this.i.endScratch();
}
Avatar billede Slettet bruger
13. oktober 2004 - 09:54 #5
Hmm ~ Jeg kan ikke få din kode til at virke...
- og jeg kan heller ikke se hvor masken bliver sat med mc.setMask(wax) ??
- men jeg kan se at det er en variation af Peter halls oprindelige kode.

Problemet (i dette tilfælde) med scriptet er at vi faktsik ikke fjerner et lag af felter, der ligger over objektet, men derimod sætter en mask, så objektet fremtræder - det betyder at vi faktisk ikke, ifølge koden, aner hvad der ligger under masken, og derfor heller ikke kan angive det synlige felt procentmæssigt.
Havde det blot været nogle felter vi fjernede, kunne man snildt indeksere dem i et array, og udregne procenten for det udviskede i forhold til objektet...

Jeg vil dog absolut ikke afvise at der findes nogle der snildt kan tilføje noget lækker kode, der sammenligner mængden af masken mod objektet...
- jeg kan bare ikke lige gennemskue det her og nu :/

Man skal vel lave et form for hitTEST på objektet, der opsamler x,y kooordinatet for masken, samt maskens definerede vidde og bredde, hvorefter man kan udregne arealet for masken mod arealet for objektet...
- prøver lige at sætte mig i tænkeboksen :)
Avatar billede Slettet bruger
13. oktober 2004 - 10:41 #6
Hov - Jeg kom lige til at tænke på en anden metode
- lidt hostler måske, men det kan bruges i nødstilfælde :)

Hvis du lægger et usynlig lag hen over dit objekt, der disables ved ved hitTEST samtidig med der skrabes, kan du nogenlunde detekte hvor meget af feltet der er synliggjort.


// Her smider jeg 100 felter hen over mit objekt
// 10 rækker med 10 brikker, der ligenøjagtigt dækker objektet
// Dette skal naturligvis tilrettes ift. maskens cursor bredde, vidde osv.
// Angivelsen af mc'er skal ligeså tilpasses...

onLoad = function(){
var nx=0   
var ny=0
for(i=0;i<100;i++){
this.symbols.attachMovie("hitter","h"+i,l++)
this.symbols["h"+i]._alpha=0
this.symbols["h"+i]._x=(nx)
this.symbols["h"+i]._y=(ny)
nx=nx+this.symbols["h"+i]._width
if(++c==10){
ny=ny+this.symbols["h"+i]._height
nx=0   
c=0
}
}
}

// Ved hit fjernes felterne en for en
// - og procentangivelsen er jo nem da vi har 100 brikker ;)
// dette kan man jo finjustere efter behov.

onMouseMove = function(){
    if(key.isDown(1)){ // <-- musens left knap er aktiveret
    for(var hit in this.symbols){
        if(this.symbols[hit].hitTEST(_root._xmouse, _root._ymouse)){
        count++
        this.symbols[hit].removeMovieClip();
        if(count>=90){
        trace("Så fik vi fjernet ca 90% af feltet, lad os komme videre...")
        }
        }
    }
    }
}

// Michae(:
Avatar billede sako Nybegynder
13. oktober 2004 - 17:19 #7
du får lige flaèn her http://www.testwebsite.dk/banner/banner.fla - hvis du har en genial ide` :-)
Avatar billede Slettet bruger
13. oktober 2004 - 19:51 #8
Som sagt - en hostler metode - men den virker ;)
Du kan selv lige finjustere procentangivelsen
- den er ikke nøjagtig, da hitfelterne ikke følger størrelsen af 'vaskekluden'

http://www.FlashFAQ.dk/eksperten/549401/banner.fla
Avatar billede sako Nybegynder
13. oktober 2004 - 19:56 #9
den er alt rigelig til det jeg skal bruge :-) takker for hjælpen
Avatar billede Slettet bruger
13. oktober 2004 - 20:02 #10
Det var så lidt :)
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