Gå til innhold

0.1 pixel ikke mulig? (smooth animasjon)


Anbefalte innlegg

Sitter å leker meg med en liten animasjon i javascript.

 

Har da en funksjon:

function doMove() {
 foo.style.left = parseInt(foo.style.left)+1+'px';

 

Som kalles hvert 20'ende ms med

 

setTimeout(doMove,20);

Dette funker fint det, men når jeg prøver å dele opp pixlene med "0.1" f.eks, så skjer det ingen ting.

foo.style.left = parseInt(foo.style.left)+0.1+'px';

Grunnen til at jeg gjør dette er for å få til en "smoothere" animasjon hvis noen lurte.

Noen som har en forklaring på dette, evt erfaring med andre måter å animere i javascript?

 

Har holdt på litt til nå, og det ser ut til at pixler ikke kan ha verdier under 1? Stemmer dette? Hvordan kan jeg da isåfall dele opp animasjonen min for å få en glattere "avspilling"?

 

EDIT: Haha, ja mente selvfølgelig under 1 og ikke under 0.

Hvis pixler ikke kan deles kommer vi over på den andre delen av spm. mitt, noen andre måter å få til glatte animasjoner med javascript.

For å ta et eksempel, Scottschiller

Men .js filene som er brukt her lå en smule over mitt nivå.

Endret av Met_Fredrik
Lenke til kommentar
Videoannonse
Annonse
2. Du kan ikkje dele ein pixel

9589553[/snapback]

Det sa de om atomet også ;)

 

Men jeg må nok dessverre si meg enig, men kanskje du kan prøve å leke med gjennomsiktigheten, slik at du får en slags overgang:

function setOpacity(e, opacity){
var o=e.style;
o.filter="alpha(opacity="+opacity+")"; //IE
o.opacity=(opacity/100); //Opera
o.MozOpacity=(opacity/100); //Mozilla+Firefox
o.KhtmlOpacity=(opacity/100); //Konqueror
}

Lenke til kommentar

Haha, de folka her skjønner ikke hva du faktisk er ute etter. Men det gjør jeg! Har laget mange animasjoner i JavaScript. =) Du må bare gjør noe liknende under.

 

obj.style.left = parseInt(x) + "px";
obj.style.top = parseInt(y) + "px";
x += 0.1; // etc
y += 0.1; // etc

 

Da kan x og y være hva som helst, men siden piksler er kvantisert så må du bruke parseInt metoden. Så du var inne på noe. =) Nå vil den bli "smooth". :thumbup:

 

Lykke til!

Endret av LostOblivion
Lenke til kommentar
Haha, de folka her skjønner ikke hva du faktisk er ute etter. Men det gjør jeg! Har laget mange animasjoner i JavaScript. =) Du må bare gjør noe liknende under.

 

obj.style.left = parseInt(x) + "px";
obj.style.top = parseInt(y) + "px";
x += 0.1; // etc
y += 0.1; // etc

 

Da kan x og y være hva som helst, men siden piksler er kvantisert så må du bruke parseInt  metoden. Så du var inne på noe. =) Nå vil den bli "smooth". :thumbup:

 

Lykke til!

9648965[/snapback]

 

Hvis jeg da gjør noe som:

function doMove() {
foo.style.left = parseInt(x) + 'px';
x += 0.1;
 setTimeout(doMove,10);
}

Så blir dette noe veldig rart noe, vet egentlig ikke hva som skjer.

En sakte hakkete animasjon.Er jeg helt på jordet? :cry:

Lenke til kommentar
Skal legge meg nu... Zzz. Men du kan ta en titt på denne.

9653779[/snapback]

 

Dette er hva jeg er ute etter ja, selv om koden ligger et par hakk for høyt for meg. Var ganske artig for de formelene for radianer osv har jeg akkurat hatt på skolen :D

 

Kunne du tenke deg å hjelpe meg å bryte ned en del av koden til en litt mer konsentrert animasjonsdel?

 

Takker for svar så langt!

Lenke til kommentar

Du vil egentlig bare plassere all koden som skal kjøres hele tiden inni en metode du kaller f eks run. Så kan du kalle en setTimeout metode inni denne for å gjenta seg selv så ofte som mulig. Du kan så beregne hvor mange kalkulasjoner per sekund som faktisk foregår ved bruk av Date "objektet", og på en svært enkel måte få objektene dine til å bevege seg med så godt som 5 meter per sekund bortover skjermen hvis det er farten. Uansett, så lenge du holder x og y koordinatene til objektets posisjon i flyt-tall, kan du runde de ned til nærmeste hel-tall for hver loop, og oppdatere objektets posisjon. Du kan lage en variabel, scale f eks, som er forholdet mellom piksler og meter f eks. Dvs antall pixler per meter som skal vises. Du kan så bruke denne variabelen til å regulere størrelser på skjermen. Men seriøst, lær deg heller Java hvis du vil animere. Det jeg gjorde når JavaScript ble treigt og kjedelig å jobbe med...

Lenke til kommentar
Du vil egentlig bare plassere all koden som skal kjøres hele tiden inni en metode du kaller f eks run. Så kan du kalle en setTimeout metode inni denne for å gjenta seg selv så ofte som mulig. Du kan så beregne hvor mange kalkulasjoner per sekund som faktisk foregår ved bruk av Date "objektet", og på en svært enkel måte få objektene dine til å bevege seg med så godt som 5 meter per sekund bortover skjermen hvis det er farten. Uansett, så lenge du holder x og y koordinatene til objektets posisjon i flyt-tall, kan du runde de ned til nærmeste hel-tall for hver loop, og oppdatere objektets posisjon. Du kan lage en variabel, scale f eks, som er forholdet mellom piksler og meter f eks. Dvs antall pixler per meter som skal vises. Du kan så bruke denne variabelen til å regulere størrelser på skjermen. Men seriøst, lær deg heller Java hvis du vil animere. Det jeg gjorde når JavaScript ble treigt og kjedelig å jobbe med...

 

Takker for svar:)

Skal prøve på det her nå.

 

Men det er animering på en webside jeg holder på med, blir mye ekstra styr med applets på siden, og å kreve av brukeren at de har java.

(Eller tar jeg feil?:D)

Lenke til kommentar

Nei er riktig det, må ha applet. De fleste har en eller annen versjon av Java (for tiden som regel 1.5). Jeg mener, du har vel sikkert LimeWire? Det bruker Java. =) Så jeg sier hvis du synes animasjon er gøy, burde du lære deg litt Java. Da har du tilgang til rastere og alt annet du trenger for å tegne og ikke bare redigere ting i HTML koden. =) For ikke snakke om hvor mange millioner ganger raskere det er. :thumbup: Drev med JavaScript til animering før jeg fant ut at det var for treigt. Kan du JavaScript eller hva som helst annet scripting- eller programmeringsspråk, tar det ikke lange tiden for å lære seg et annet språk. =)

Endret av LostOblivion
Lenke til kommentar

Det virker som om veldig mange tar seg nær av nedsettende kommentarer om et språk de er glade i:D

Var vel kanskje dere som hadde den diskusjonen på java forumet og:P

 

Men uansett, til dette prosjektet holder jeg meg til javascript, er bare et par div's som skal forstørres og flyttes i første omgang:)

 

Takker for svar

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...