PDA

Volledige versie bekijken : Rotation flipt..


Cowerd
%Europe/Berlin %791 %2005, 19:59
Ik heb echt een half uur lopen klooien met wat de rotatie van een cirkel is bij een bepaalde afstand..

ik heb nu dit:

starter = {xstart:200, omtrek:Math.PI*wiel._width}
xnu = wiel._x-starter.xstart;

rotatie = ((Math.PI/(starter.omtrek/xnu))*wiel._width/starter.omtrek)*360;

in theorie werkt dit..
Maar als ik ik het in de volgende code zet:
_root.onLoad = function() {
starter = {xstart:200,omtrek:Math.PI*wiel._width}
}

_root.onEnterFrame = function() {
wiel._x = _root._xmouse;
xnu = wiel._x-starter.xstart;
rotatie = ((Math.PI/(starter.omtrek/xnu))*wiel._width/starter.omtrek)*360;
if(rotatie>=360) {
rotatie -= 360;
} else if(rotatie<=0) {
rotatie = 360-rotatie;
}

wiel._rotation = rotatie;
}
_root.onMouseDown = function() {
trace(rotatie);
}

dan gaat het wiel soms schudden..

Als er ten 1 al een kortere code voor de afstand van het wiel is hoor ik die graag!
En ik zal even laten zien wat dat wiel nou precies doet..

SaphuA
%Europe/Berlin %812 %2005, 20:30
var omtrek = wiel._width*Math.PI;
var startX = wiel._x;
this.onMouseMove = function() {
wiel._x = _xmouse;
afstand = _xmouse-startX;
wiel._rotation = afstand%360;
updateAfterEvent();
};
Hehe :)

Cowerd
%Europe/Berlin %815 %2005, 20:34
Hmm even testen:)
Maar wat is dat % teken? wat doet dat?

Cowerd
%Europe/Berlin %817 %2005, 20:37
Ja hij werkt:D
Bedankt:D

Fatty Owl
%Europe/Berlin %830 %2005, 20:55
Hmm even testen:)
Maar wat is dat % teken? wat doet dat?
deelbaarheid checken

SaphuA
%Europe/Berlin %831 %2005, 20:57
Probeer het eens :)

9%2 = 1;
9%3 = 0;
9%4 = 1;
9%5 = 4;

Wat het doet is hetvolgende:

x%y = z;

hij deel x net zo vaak door y, totdat z getal overblijft wat altijd kleiner is dan y.

Cowerd
%Europe/Berlin %834 %2005, 21:02
Ik snap er nog steeds vrij weinig van.. want als ik 9 4 keer door 2 deel is z al onder 1

xtr0
%Europe/Berlin %847 %2005, 21:20
2 past 4 keer in 9 want 2x4=8 je houdt dan nog wel 1 over 9-8=1, dus 9%2=1

Cowerd
%Europe/Berlin %853 %2005, 21:28
Nu snap ik het:)

Dauntless
%Europe/Berlin %860 %2005, 21:39
Simpelweg: % geeft de rest van de deling weer ;).
a/b = q + c
(a gedeelt door b = quotient + rest)

Cowerd
%Europe/Berlin %038 %2005, 00:55
zeg Saphua.. ik zie nu ineens dat je script "niet deugt"

kijk maar:
de bovenste is van mij
de onderste van jou..

de lijnen staan omtrek/4 van elkaar af..
dus als hij 1 kwart draait moet ie er precies achter staan..

SaphuA
%Europe/Berlin %039 %2005, 00:57
Je hebt inderdaad gelijk :)
Hier kwam ik vlak na het posten ook achter, maar dacht niet dat het noodzakelijk was te fixen. Maar netjes dat het je toch wel gelukt is :)

Ps: Me inbox is weer leeg |)

Cowerd
%Europe/Berlin %042 %2005, 01:01
ja was zo gebeurd maar ik keek er weer eens naar:P

SaphuA
%Europe/Berlin %525 %2005, 12:36
ja was zo gebeurd maar ik keek er weer eens naar:P
Heb zelf eens gekeken naar de code :)
Klein dingetje veranderd, aangezien die %360 nu niet meer nodig is, omdat je toch al door 360 deelt. En voor degene die geen Flash 8 hebben:
//--Wiel
MovieClip.prototype.maakWiel = function(r) {
var angle = 0;
var rx, ry, ax, ay;
this.moveTo(r, 0);
this.lineStyle(1, 0x000000, 100);
for (var i = 0; i<8; i++) {
angle += Math.PI/4;
rx = Math.cos(angle-(Math.PI/8))*(r/Math.cos(Math.PI/8));
ry = Math.sin(angle-(Math.PI/8))*(r/Math.cos(Math.PI/8));
ax = Math.cos(angle)*r;
ay = Math.sin(angle)*r;
this.curveTo(rx, ry, ax, ay);
}
this.moveTo(-r, 0);
this.lineTo(r, 0);
this.moveTo(0, -r);
this.lineTo(0, r);
};
var p = 275;
var r = 20;
var o = r*2*Math.PI;
this.createEmptyMovieClip("circle", 1);
circle.maakWiel(r);
circle._x = p;
circle._y = 200;
//--Lijntjes
this.createEmptyMovieClip("lijntjes", 2);
lijntjes.lineStyle(1, 0x000000, 50);
for (var i = -Math.ceil(circle._x/r); i<Math.ceil((550-circle._x)/r); i++) {
lijntjes.moveTo(circle._x+i*(o/4), circle._y-r);
lijntjes.lineTo(circle._x+i*(o/4), circle._y+r);
}
//--Movement
this.onMouseMove = function() {
circle._x = _xmouse;
afstand = _xmouse-p;
circle._rotation = afstand/o*360;
updateAfterEvent();
};