[quote]
hobbit_be schreef op 05 July 2003 @ 23:32:
Lekker! - heb het kewle speed video draggertje al wel ergens anders gezien - maar dit werkte MUCH better. Zijn het trouwens 300+ images of 1 degoutant grote?
...[quote]
Het zijn inderdaad 400+ images

ze zitten in een movieclip (mcLoop), als eerst zijn er 9 movieclips (beeldN) horizontaal geduped en elk deze movieclips bevat de mcLoop-movieclip, uiteraard elk op een andere frame, zodra een mcLoopholder rechts uit beeld gaat, wordt deze links weer neergezet maar tegelijkertijd ook 9 frames vooruitgedaan, zodat het lijkt alsof je een hele lange filmreel aan het scrollen bent.
de totale breedte is 9*92 = 828, en ce movieclips worden per stuk berekent (met For) hoever ze naar b.v. rechts schuiven, is dat groter als 828 (stel 1200) dan wordt hij links weer geplaatst op 1200-828 en tegelijkertijd 9 frames verder gedaan.. Overigens moest de muispositie wel afgerond worden naar hele getallen anders gingen de movieclips t.o.v. elkaar dichter bij elkaar oof zelf over elkaar heen, omdat de precizie verloren ging bij te gedetailleerde getallen.
eerst probeerde ik het met 1 heeeele lange rij die loopte maar daarmee ging het vreemd knipperen, een andere pogiing gebruikte ik ook 9 frames, maar de verandering werdt toen niet per stuk berekend maar als 1 geheel, en dat resulteerde in gekke dingen, framenummers klopten niet meer enzo
ik ben geen kei in a.s. maar het is gelukkig wel gelukt

hieronder is de code, er zullen vast wel schoonheidsfouten in zitten of misschien is het wel heel omslachtig geschreven, commentaar is dan ook welkom.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| onClipEvent (load) {
maxScreens = 9;
maxFrames = beeld._totalframes;
oldPos = new Array();
newPos = new Array();
footerCount = new Array();
// de oorsprongkelijke movieclip dupen in een array
beeldX = new Array();
for (n=0; n<maxScreens; n++) {
duplicateMovieClip(beeld, "beeld"+n, n);
eval("beeld"+n)._x = 368-(n*92);
eval("beeld"+n)._y = 0;
eval("beeld"+n).screenNr = n;
footerCount[n] = n+1;
eval("beeld"+n).gotoAndStop(footerCount[n]);
}
removeMovieClip(beeld);
}
onClipEvent (enterFrame) {
// gemeenschappelijke info
mPos = -_xmouse;
// snelheid afronden in hele getallen, is muispositie tenopzichte van het midden versloomd met factor 1/1.7
deltaX = Math.round(mPos/1.7);
// calc per stuk
// footerCount = nummer meegeven aan de frame-footer
// per beeld berekenen wat zijn verschuiving is, wordt ie groter als de maximale breedte, dan komt hij terug aan de andere kant met -828
for (b=0; b<maxScreens; b++) {
oldPos[b] = eval("beeld"+b)._x;
newPos[b] = oldPos[b]+deltaX;
beeldX[b] = newPos[b];
// restrainen in de breedte
if (beeldX[b]>368) {
beeldX[b] -= 828;
footerCount[b] += maxScreens;
} else if (beeldX[b]<-460) {
beeldX[b] += 828;
footerCount[b] -= maxScreens;
}
// footer de framenummer meegeven
if (footerCount[b]<1) {
footerCount[b] += maxFrames;
} else if (footerCount[b]>maxFrames) {
footerCount[b] -= maxFrames;
}
realFrame = maxFrames+1-footerCount[b];
// uiteindelijk verplaatsen en vars toewijzen aan de mcholder
eval("beeld"+b).screenNr = realFrame;
eval("beeld"+b).gotoAndStop(realFrame);
eval("beeld" add b)._x = beeldX[b];
}
} |