Problème pageflip_v2

Utilisateur anonyme - 12 nov. 2008 à 14:42
cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009 - 13 nov. 2008 à 13:22
Bonsoir,
j'ai télécharger le fichier pageflip_v2.fla et l'ai personnalisé pour un livret en 883px par 635px et pour 21 pagesseulement il semble y avoir un problème (dans le flip et il manque des pages)
voici mon code :

//pageflip version 2.02 (200405031400)
//
//(for the latest version, always check at http://www.iparigrafika.hu/pageflip)
//
//this code is written by Macc 2004.05.03
//abel@iparigrafika.hu
//
//this code is opensource
//
//free use!
//but a small credit would be nice:)

trace(this);
trace(_root);

//these values can be changed: -------------------------------------------------------------------------

pw = 635;            //page width in pixel
ph = 883;            //page height in pixel

//page data... (export names/tearing flag)
pageOrder =  new Array("page0","page1","page2","page3","page4","page5","page6","page7","page8","page9","page10","page11","page12","page13","page14","page15","page16","page17","page18","page19","page20","page21");
pageCanTear = new Array(false,  false,  false,  false,  false,  false,  false,  false,  false,  false,  false,   true,    true,    false,   false,   false,   false,   false,   false,    false,   false,   false);    //pages TEAROFF function!

page=0;                //first page (normally it is 0 = the page before the cover = blank page)
maxpage=21;            //last page (back cover, should be even number)

hcover = true;        //hard cover on/off

clickarea = 80;        //pixel width of the click sensitive area at the edges..
afa = 56;            //width of the autoflip starter square.

gs = 2;                //goto page flip speed
ps = 5;                //mouse pursuit speed
es = 3;                //flip speed after mouse btn release

canflip = true;        //page flipping enabled

//do not change these values:  ---------------------------------------------------------------------------------------------------------------------

_global.mcnt = 0;    //counter (used on a page where is an animation)
gpage = 0;            //gotoPage No
gflip = false;        //gotoPage flip
gdir = 0;            //goto direction...

aflip = false;        //auto flip
flip = false;        //pageflip
flipOff = false;    //terminateflip
flipOK = false;        //good flip
hflip = false;        //hardflip (the cover of the book)
rotz = -30;            //hardflip max y difference

preflip = false;    //corner flip status
ctear = false;        //actual page status
tear = false;
teard = 0;
tlimit = 80;
removedPages = new Array();    //list of removed pages!
mpx 0, mpy 0;    //mousepos at click
sx sy 0;    //startpoint when flipping

x = 0;    //mouse x,y
y = 0;
ax = 0;    //auto x,y
ay = 0;
acnt = 0;
aadd = 0;
aamp = 0;

AM = Math.PI/180;

stop();

_quality = "BEST";
Stage.scaleMode = "noScale";

function reset() {                    //initializing pages... ---------------------------------------------------------------------------------------
    pages.p0.page._x = -pw;
    pages.p0._x = 0;
    pages.p1.page._x = -pw;
    pages.p1._x = 0;

    pages.flip.p2.page._x = -pw;
    pages.flip.p2._x = pw;
    pages.flip.p3.page._x = -pw;
    pages.flip.p3._x = 0;

    pages.p4.page._x = -pw;
    pages.p4._x = pw;
    pages.p5.page._x = -pw;
    pages.p5._x = pw;
        pages.pgrad._visible pages.mask._visible pages.flip._visible = false;    pages.flip.p3mask._width pages.pgmask._width pw*2;    pages.center._height pages.flip.p3mask._height pages.pgmask._height = ph;
    pages.flip.fmask.page.pf._width = pw;
    pages.center._width = 6;
    pages.flip.fmask.page.pf._height = ph;
    
    pageNumber = new Array();
    for(i=0;i<=(maxPage+1);i++) pageNumber[i] = i;
}

mousecontroll = new Object();        //initializing mouse click handler ---------------------------------------------------------------------------
mousecontroll.onMouseDown = function() {
    if(flip &amp;&amp; !aflip) {//  &amp;&amp; !preflip) {
        flipOK = false;    
        if(sx<0 &amp;&amp; pages._xmouse>0) flipOK = true;
        if(sx>0 &amp;&amp; pages._xmouse<0) flipOK = true;
        flipOff = true;
        flip = false;
    } else if((flipoff || aflip || !canflip) &amp;&amp; !preflip) {
        trace("donothing");
    } else {
        var oox = ox;
        var ooy = oy;
        var osx = sx;
        var osy = sy;
        var hit = hittest();        //hittest
        if(hit) {
            anim._visible = false;
            flip = true;
            flipOff = false;
            tear = false;            //not tearing yet...            ox sx hit*pw;
            if(preflip) {                aflip preflip false;                ox oox, oy ooy;                sx osx, sy osy;
            }
            pages.flip.setMask(pages.mask);            mpx pages._xmouse, mpy pages._ymouse;
            //_quality = "MEDIUM";    //it is the place to degrade image quality while turning pages if the performance is too low.
        }
    }
}
mousecontroll.onMouseUp = function() {
    if(flip &amp;&amp; !tear) {
        if((Math.abs(pages._xmouse)>(pw-afa) &amp;&amp; Math.abs(pages._ymouse)>(ph/2-afa) &amp;&amp; Math.abs(pages._xmouse-mpx)0) flipOK = true;
            if(sx>0 &amp;&amp; pages._xmouse<0) flipOK = true;
            flipOff = true;
            flip = false;
        }
    }
}

function hittest() {    //hittest at mouse clicks, if click is over the book -> determining turning direction ------------------------------------
    var x=pages._xmouse;
    var y=pages._ymouse;
    var pmh = ph/2;
    
    if(y<=pmh &amp;&amp; y>=-pmh &amp;&amp; x<=pw &amp;&amp; x>=-pw) {    //ha a megadott intervallumban klikkelunk, akkor lapozhatunk
        var r = Math.sqrt(x*x+y*y);
        var a = Math.asin(y/r);
        var y = Math.tan(a)*pw;
        if(y>0 &amp;&amp; y>ph/2) y = ph/2;
        if(y<0 &amp;&amp; y<-ph/2) y = - ph/2;        oy sy y;
        r0 = Math.sqrt((sy+ph/2)*(sy+ph/2)+pw*pw);
        r1 = Math.sqrt((ph/2-sy)*(ph/2-sy)+pw*pw);
        
        pageN = eval("pages.flip.p2.page");
        pageO = eval("pages.flip.p3");
        offs = -pw;
        pages.flip.fmask._x = pw;
        
        if(x<-(pw-clickarea) &amp;&amp; page>0) {        //>-----> flip backward
            pages.flip.p3._x = 0;
            hflip = checkCover(page,-1);
            setPages(page-2,page-1,page,page+1);
            ctear = pageCanTear[page-1];
            return -1;
        }
        if(x>(pw-clickarea) &amp;&amp; page<maxpage) {    //<-----< flip forward
            pages.flip.p3._x = pw;
            hflip = checkCover(page,1);
            setPages(page,page+2,page+1,page+3);
            ctear = pageCanTear[page+2];
            return 1;
        }
    } else return 0;    //wrong click
}
function checkCover(p,dir) {
    if(hcover) {
        if(dir>0) {
            if(p==(maxpage-2) || p==0) return true;
        } else {
            if(p==maxpage || p==2) return true;
        }
    }
    return false;    
}
function corner() {
    var x = Math.abs(pages._xmouse);
    var y = Math.abs(pages._ymouse);
            if(x>(pw-afa) &amp;&amp; x(ph/2-afa) &amp;&amp; y<(ph/2)) {
        return true;
    }
    return false;
}

function oef() {
    _global.mcnt++;    //main counter incrase (need for some page effect);
    
    if(!flip &amp;&amp; corner()) {    //corner mouseover
        preflip = true;
        if(!autoflip()) preflip = false;
    }
    if(preflip &amp;&amp; !corner()) {
        preflip = false;
        flip = false;
        flipOK = false;
        flipoff = true;
    }
    getm();
    if(aflip &amp;&amp; !preflip) {
        y = (ay += (sy-ay)/(gflip? gs: ps ));
        acnt += aadd;
        ax -= aadd;
        if(Math.abs(acnt)>pw) {
            flipOK = true;
            flipOff = true;
            flip = false;
            aflip = false;
        }
    }
    if(flip) {                            //page turning is in progress...
        if(tear) {
            x = tox;
            y = (toy += teard);
            teard *= 1.2;
            if(Math.abs(teard)>1200) {
                flipOff = true;
                flip = false;
            }
        } else {
            x = (ox += (x-ox)/(gflip? gs: ps ));
            y = (oy += (y-oy)/(gflip? gs: ps ));
        }
        calc(x,y);                        //positioning pages and shadows
    }
    if(flipOff) {                        //terminating page turning effect... (comlplete turning... dropped on the other side)
        if(flipOK || tear) {
            x = (ox += (-sx-ox)/(gflip? gs: es ));
            y = (oy += (sy-oy)/(gflip? gs: es ));
            calc(x,y);
            if(x/-sx > 0.99 || tear) {            //we are done with turning, so stop all turning issue...
                flip = false;                flipOK flipOff false;                pages.pgrad._visible pages.flip._visible false;
                //_quality = "BEST";    //if quality is decrased during turning effect, you must reset its default value!

                if(tear) {                //if tear: remove page!!!
                    removePage((sx<0)? page: page+1);
                    //removePage(page);
                    page += (sx<0)? -2: 0;
                } else {
                    page += (sx<0)? -2: 2;    //and tourning pages at pagenumber level...
                }
                setPages(page,0,0,page+1);
                tear = false;
                
                if(gpage>0) {            //gotoflip active -> is there another flipping left?
                    gpage--;
                    autoflip();
                } else gflip = false;
            }
        } else {                        //terminating page turning effect... (incomlplete turning... dropped on the dragged side)
            x = (ox += (sx-ox)/3);
            y = (oy += (sy-oy)/3);
            calc(x,y);
            if(x/sx > 0.99) {            //we are done with turning, so stop all turning issue...
                flip = false;
                flipOff = false;
                aflip = false;                pages.pgrad._visible pages.flip._visible false;
                //_quality = "HIGH";     //if quality is decrased during turning effect, you must reset its default value!
                setPages(page,0,0,page+1);    //no change at pagenumbers..
            }
        }
    }
}

function calc(x,y) {                    //positioning pages and shadows by x,y reference points --------------------------------------------------
    if(hflip) {    //hardflip...
        var xp = (sx<0)? -x: x;
        if(xp>0) {
            sp2._visible = false;
            sp3._visible = true;
            scalc(sp3,x);
        } else {
            sp3._visible = false;
            sp2._visible = true;
            scalc(sp2,x);
        }
        pages.flip.setMask(null);
        pages.flip._visible = true;
        pages.flip.fgrad._visible = false;        pages.flip.p2._visible pages.flip.p3._visible false;
        return;
    } else pages.flip.fgrad._visible = true;
    
    //normal flipping process---------------------------------------------------------------------
    var rr0 = Math.sqrt((y+ph/2)*(y+ph/2)+x*x);
    var rr1 = Math.sqrt((ph/2-y)*(ph/2-y)+x*x);
    if((rr0>r0 || rr1>r1) &amp;&amp; !tear) {    // we can tear off pages now:)
                            // so reference points must be recalculated!
        if(y<sy) {    // k1-gyel kell osszehasonlitani!
            var a = Math.asin((ph/2-y)/rr1);
            y = (ph/2-Math.sin(a)*r1);
            x = (x<0)? -Math.cos(a)*r1: Math.cos(a)*r1;
            if(y>sy) {                if((sx*x)>0) y sy, x sx;                else y sy, x -sx;
            }
            if((rr1-r1)>tlimit &amp;&amp; ctear) {
                teard = -5;
                tear = true;                tox ox x;                toy oy y;
            }
        } else {    // k0-val kell osszehasonlitani!
            var a = Math.asin((y+ph/2)/rr0);
            y = Math.sin(a)*r0-ph/2;
            x = (x<0)? -Math.cos(a)*r0: Math.cos(a)*r0;
            if(y<sy) {                if((sx*x)>0) y sy, x sx;                else y sy, x -sx;
            }
            if((rr0-r0)>tlimit &amp;&amp; ctear) {
                teard = 5;
                tear = true;                tox ox x;                toy oy y;
            }
        }
    }
    if((sx<0 &amp;&amp; (x-sx)<10) || (sx>0 &amp;&amp; (sx-x)<10)) {
        if(sx<0) x = -pw+10;
        if(sx>0) x = pw-10;
    } 
    //calculating flipping process
    pages.flip._visible = true;    pages.flip.p3shadow._visible pages.pgrad._visible !tear;    pages.flip.p2._visible pages.flip.p3._visible true;
    //equation of the line
    var vx = x-sx;
    var vy = y-sy;
    var a1 = vy/vx;
    var a2 = -vy/vx;
    
    cx = sx+(vx/2);
    cy = sy+(vy/2);
    //trigonometriai szamitasok
    //calculating rotation of the page, and the masks
    var r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
    var a = Math.asin((sy-y)/r);
    if(sx<0) a = -a;    
    ad = a/AM;     //in degree
    pageN._rotation = ad*2;
    r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
    rl = (pw*2);
    if(sx>0) {                 //flip forward
        pages.mask._xscale = 100;
        nx = cx-Math.tan(a)*(ph/2-cy);
        ny = ph/2;
        if(nx>pw) {
            nx = pw;
            ny = cy+Math.tan(Math.PI/2+a)*(pw-cx);
        }
        pageN.pf._x = -(pw-nx);
        pages.flip.fgrad._xscale = (r/rl/2)*pw;
        pages.pgrad._xscale = -(r/rl/2)*pw;
        pages.flip.p3shadow._xscale = (r/rl/2)*pw;
    } else {                 //flip backward
        pages.mask._xscale = -100;
        nx = cx-Math.tan(a)*(ph/2-cy);
        ny = ph/2;
        if(nx<-pw) {
            nx = -pw;
            ny = cy+Math.tan(Math.PI/2+a)*(-pw-cx);
        }
        pageN.pf._x = -(pw-(pw+nx));
        pages.flip.fgrad._xscale = -(r/rl/2)*pw;
        pages.pgrad._xscale = (r/rl/2)*pw;
        pages.flip.p3shadow._xscale = -(r/rl/2)*pw;
    }
    pages.mask._x = cx;
    pages.mask._y = cy;
    pages.mask._rotation = ad;
    pageN.pf._y = -ny;
    pageN._x = nx+offs;
    pageN._y = ny;
    pages.flip.fgrad._x = cx;
    pages.flip.fgrad._y = cy;
    pages.flip.fgrad._rotation = ad;
    pages.flip.fgrad._alpha = (r>(rl-50))? 100-(r-(rl-50))*2: 100;
    pages.flip.p3shadow._x = cx;
    pages.flip.p3shadow._y = cy;
    pages.flip.p3shadow._rotation = ad;
    pages.flip.p3shadow._alpha = (r>(rl-50))? 100-(r-(rl-50))*2: 100;
    pages.pgrad._x = cx;
    pages.pgrad._y = cy;
    pages.pgrad._rotation = ad+180;
    pages.pgrad._alpha = (r>(rl-100))? 100-(r-(rl-100)): 100;
    pages.flip.fmask.page._x = pageN._x;
    pages.flip.fmask.page._y = pageN._y;
    pages.flip.fmask.page.pf._x = pageN.pf._x;
    pages.flip.fmask.page.pf._y = pageN.pf._y;
    pages.flip.fmask.page._rotation = pageN._rotation;
}

function scalc(obj,x) {    //hardflip calc
    if(x<-pw) x=-pw;
    if(x>pw) x=pw;
    var a = Math.asin( x/pw );
    var rot = a/AM/2;
    var xs = 100;
    var ss = 100*Math.sin( rotz*AM );
    x = x/2;
    var y = Math.cos(a)*(pw/2)*(ss/100);
    placeImg(obj, rot, ss, x, y)    pages.pgrad._visible pages.flip._visible true;
    pages.pgrad._xscale = x;    pages.pgrad._alpha pages.flip.p3shadow._alpha 100;
    pages.flip.p3shadow._xscale = -x;
    pages.flip.p3shadow._x = 0;
    pages.flip.p3shadow._y = 0;
    pages.flip.p3shadow._rotation = 0;
    pages.pgrad._x = 0;
    pages.pgrad._y = 0;
    pages.pgrad._rotation = 0;
}

function placeImg(j, rot, ss, x, y) {
    var m = Math.tan( rot*AM );
    var f = Math.SQRT2/Math.sqrt(m*m+1);
    var phxs = 100*m;
    var phRot = -rot;;
    var xs = 100*f;
    var ys = 100*f;
    j.ph.pic._rotation = 45;
    j.ph.pic._xscale = (phxs<0)? - xs: xs;
    j.ph.pic._yscale = ys*(100/ss);
    j.ph._rotation = phRot;
    j.ph._xscale = phxs;
    j._yscale = ss;
    j._x = x;
    j._y = y;
    j._visible = true;
}

function setPages(p1,p2,p3,p4) {    //attach the right page "image" at the right place:)
    p0 = p1-2;                        //pages for transparency...
    p5 = p4+2;
    if(p0<0) p0=0;
    if(p5>maxpage) p5=0;
    
    if(p1<0) p1=0;    //visible pages
    if(p2<0) p2=0;
    if(p3<0) p3=0;
    if(p4<0) p4=0;
    trace("setpages ->"+p1+","+p2+","+p3+","+p4);
    pleft = pages.p1.page.pf.ph.attachMovie(pageOrder[p1],"pic",0);
    pages.p1.page.pf.ph._y = -ph/2;
    pleftb = pages.p0.page.pf.ph.attachMovie(pageOrder[p0],"pic",0);
    pages.p0.page.pf.ph._y = -ph/2;
    if(hflip) {    //hardflip pages are specials!!! 
        var tm = pages.flip.hfliph.attachMovie("sph","sp2",0);
        sp2 = tm.ph.pic.attachMovie(pageOrder[p2],"pic",0);        sp2._y -ph/2, sp2._x -pw/2;
        sp2 = eval("pages.flip.hfliph.sp2");
        var tm = pages.flip.hfliph.attachMovie("sph","sp3",1);
        sp3 = tm.ph.pic.attachMovie(pageOrder[p3],"pic",0);        sp3._y -ph/2, sp3._x -pw/2;
        sp3 = eval("pages.flip.hfliph.sp3");
    } else {
        pages.flip.hfliph.sp2.removeMovieClip();
        pages.flip.hfliph.sp3.removeMovieClip();
        sp2 = pages.flip.p2.page.pf.ph.attachMovie(pageOrder[p2],"pic",0);
        pages.flip.p2.page.pf.ph._y = -ph/2;
        sp3 = pages.flip.p3.page.pf.ph.attachMovie(pageOrder[p3],"pic",0);
        pages.flip.p3.page.pf.ph._y = -ph/2;
    }
    pright = pages.p4.page.pf.ph.attachMovie(pageOrder[p4],"pic",0);
    pages.p4.page.pf.ph._y = -ph/2;
    prightb = pages.p5.page.pf.ph.attachMovie(pageOrder[p5],"pic",0);
    pages.p5.page.pf.ph._y = -ph/2;
}

function resetPages() {
    setPages(page,0,0,page+1);
}
    
function autoflip() {                                //start auto flip!
    if(!aflip &amp;&amp; !flip &amp;&amp; !flipoff &amp;&amp; canflip) {    //only when all conditions fits our needs...
        acnt = 0
        aamp = Math.random()*(ph/2)-(ph/4);
        var x= gflip? (gdir*pw)/2: ((pages._xmouse<0)? -pw/2: pw/2);
        var y= Math.random()*ph-(ph/2);                //random starty
        var pmh = ph/2;
        var r = Math.sqrt(x*x+y*y);
        var a = Math.asin(y/r);
        var yy = Math.tan(a)*pw;
        if(y>0 &amp;&amp; y>ph/2) y = ph/2;
        if(y<0 &amp;&amp; y<-ph/2) y = - ph/2;        oy sy yy;
        ax = (pages._xmouse<0)? -pw/2: pw/2;
        var l = ((ph/2)-y);
        ay = y;+(Math.random()*2*l)-l;                //page turnig style randomizing
        offs = -pw;
        var hit = 0;
        if(x<0 &amp;&amp; page>0) {
            pages.flip.p3._x = 0;
            hflip = checkCover(page,-1);
            if(!(preflip &amp;&amp; hflip)) setPages(page-2,page-1,page,page+1);
            hit = -1;
        }
        if(x>0 &amp;&amp; page<maxpage) {
            pages.flip.p3._x = pw;
            hflip = checkCover(page,1);
            if(!(preflip &amp;&amp; hflip)) setPages(page,page+2,page+1,page+3);
            hit = 1;
        }
        if(hflip &amp;&amp; preflip) {
            hit = 0;
            preflip = false;
            return false;
        }
        if(hit) {
            anim._visible = false;
            flip = true;
            flipOff = false;            ox sx hit*pw;
            pages.flip.setMask(pages.mask);
            aadd = hit*(pw/(gflip? 5:10 ));            //autoflip takes 10 frames to be done!!!
            aflip = true;
            pages.flip.fmask._x = pw;
            if(preflip) {                oy sy (pages._ymouse<0)? -(ph/2): (ph/2);
            }
            r0 = Math.sqrt((sy+ph/2)*(sy+ph/2)+pw*pw);
            r1 = Math.sqrt((ph/2-sy)*(ph/2-sy)+pw*pw);
            pageN = eval("pages.flip.p2.page");
            pageO = eval("pages.flip.p3");
            oef();
            return true;
        }
    } else return false;
}

function getm() {    //get x,y reference points depending of turning style: manual/auto
    if(aflip &amp;&amp; !preflip) {
        x = ax;
        y = ay;
    } else {
        x = pages._xmouse;
        y = pages._ymouse;
    }
}

function gotoPage(i) {    //quickjump to the page number i
    i = getPN(i);
    if(i<0) return false;
    var p = int(page/2);
    var d = int(i/2);
    if(p!=d &amp;&amp; canflip &amp;&amp; !gflip) {        //target!=current page
        if(p<d) {                        //go forward
            gdir = 1;
            gpage = d-p-1;
        } else {                        //go backward
            gdir = -1
            gpage = p-d-1;
        }
        gflip = true;
        autoflip();
    }
}
function getPN(i) {    //get the right page number
    var find = false;
    for(j=1;j<=maxpage;j++) {
        if(i==pageNumber[j]) {
            i=j;
            find = true;
            break;
        }
    }
    if(find) return i;
    else return -1;
}
function removePage(i) {
    trace("remove page "+i);
    i = (Math.floor((i-1)/2)*2)+1;
    removedPages.push(pageNumber[i], pageNumber[i+1]);
    
    for(j=(i+2);j<=(maxPage+1);j++) {
        pageOrder[j-2]=pageOrder[j];
        pageCanTear[j-2]=pageCanTear[j];
        pageNumber[j-2]=pageNumber[j];
    }
    trace("removed pages "+i+","+(i+1));
    trace(removedPages.join(", "));
    maxPage -= 2;
}
onEnterFrame = function() {
    trace(getBytesLoaded());
    if(getBytesLoaded()==getBytesTotal()) {
        gotoAndPlay(2);
        delete onEnterFrame;
    }
}

//------------------------------------------------------------------------------------------------ PUT YOUR CODE HERE --------------

/*        you can use these functions:

        gotoPage( destinationPageNo );        //quick jump to the page number: destinationPageNo; values = 0-maxpages;
        autoflip();                            //start autoflip (direction is calculated from _xmouse)

        canflip        //it's a variable. setting its value to false disables flipping

        other functions of page turning is automatic;
*/

merci d'avance

1 réponse

cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009
13 nov. 2008 à 13:22
Salut.
Déjà, un livre a forcement un nombre de page paires, car une feuille possede un recto et un verso (soit 2 pages). Déjà, rien que ça ça buggeras moins.

Ensuite, je ne pense pas que ca vienne du code si tu l'as pas modifié, mais des liaisons sur les clips de page que tu as fait.

Image 3 ou 4, il y a un endroit ou toutes les pages sont déposées.

Pour chaque clip page créé, verifies : clic-droit >> liaison... coches la troisieme case et decoche la premiere... Et change le nom pour qu'il corresponde à la definition dans pageOrder.
0
Rejoignez-nous