Avatar billede kalaharikid Nybegynder
24. november 2004 - 18:42 Der er 3 kommentarer og
1 løsning

Zoom på movieklip vender pludseligt billedet på hovedet ?

Jeg har et movieclip med et dk-kort som der skal zoomes på ...:

Problemet er at koden nogen gange vender billedet i movieklippet (zoom_this) på hovedet ? altså en slags bug ?

denne kode er på et lup ikon...(også movieklip)

onClipEvent (mouseDown) {
    if (i>0) {
        return;
    }
   
    zoom = true;
    dir == 1 ? (dir=-1) : (dir=1);
    if (dir == 1) {
        pt = {x:_root.zoom_this._xmouse, y:_root.zoom_this._ymouse};
       
    }
}
onClipEvent (enterFrame) {
    if (!zoom) {
        return;
    }
    if (_root.yessir==1){
    _root.zoom_this._xscale += dir*i*100/8;
    _root.zoom_this._yscale += dir*i*100/8;
    var pt2 = {x:pt.x, y:pt.y};
    _root.zoom_this.localToGlobal(pt2);
    _root.zoom_this._x -= (pt2.x-pt.x);
    _root.zoom_this._y -= (pt2.y-pt.y);
    i++;
    }
    if (i == 10) {
        zoom = false;
        _root.yessir=0;
    i = 0;

       
       
    }
}

og inde på knapper på kortet er denne kode :

on (press) {
   
    _root.yessir=1;
}

det er noget med negative værdier for zoom faktor der pludselig bliver vendt ?


jeg kan lægge en .fla fil ud om nødvendigt?

MVH Kalaharikid
Avatar billede paal_dk Nybegynder
25. november 2004 - 11:00 #1
Et movieclip bliver spejlvendt (vandret eller lodret) når du sætter _xscale eller _yscale til noget negativt. Du må sørge for at dette ikke kan ske, så ryd op i din kode. Her er et forslag i pseudokode.

onMouseDown:
  if (zoom) zoomIn();
  else zoomOut();

zoomIn:
  if (isZooming) return;
  isZooming = true;
  do onEnterFrame
    zoomCloser();
  until close enough
  zoom = !zoom;
  isZooming  = false;

zoomOut er tilsvarende bortset fra at den kalder zoomFarther() (eller hvad du ville kalde den).


Håber du kan se forskellen på denne kode og din egen. Der er en opslitning i to funktioner (zoomIn og zoomOut) som gør den mere læselig, samt anvendelig via scripting fra andre objekter og der er indsat en form for semafor der sørger for at uanset hvad du piller ved kan du ikke forstyrre zoomprocessen når den er i gang. Hvis du laver det på denne måde garanterer jeg for at det virker.

Mvh,
Pål
Avatar billede paal_dk Nybegynder
25. november 2004 - 11:05 #2
de to sidste linjer zoom=!zoom og isZooming = false skal selvfølgelig først kaldes efter at onEnterFrame loopet er kørt....
Avatar billede kalaharikid Nybegynder
25. november 2004 - 13:18 #3
shit, kan du ikke hjælpe mig med hvordan det ville se ud i ovenstående kode ?
Avatar billede paal_dk Nybegynder
25. november 2004 - 14:32 #4
Desværre, det er for meget at bede om at lave hele programmet for dig :-) Alternativt kan du debugge din egen kode ved at lave en trace der udskriver dine variable før og efter linjen
_root.zoom_this._yscale += dir*i*100/8;
når _yscale er negativ, så du kan se hvornår og hvorfor det sker.
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