setTimeout virker ikke

Tags:    javascript

<< < 12 > >>
Er der nogen der kan hitte ud hvorfor at setTimeout ikke virker i følgende kode?
Fold kodeboks ind/udKode 


Jeg har allerede brugt lindende type funktion hvor der virkede glimrende, den så sådan her ud:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 31.05.2009 20:42 af Bruger #10113
14 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Plejer den ikke at være inde under window


jeg plejer ikke at kunne få min kode til at køre ved mindre jeg skriver:
Fold kodeboks ind/udKode 




Plejer den ikke at være inde under window


jeg plejer ikke at kunne få min kode til at køre ved mindre jeg skriver:
Fold kodeboks ind/udKode 

window er at global object alle objekter arver fra, så window. er faktisk ligegyldigt, vil nok sige at du skal droppe din eval sætning og i stedet skrive noget ala:
Fold kodeboks ind/udJScript kode 

Ikke testet...



Ok jeg har fiflet lidt
Jeg har slået marioJump og marioFall sammen til een funktion, et hop med både op og ned hvor mario er tilbage til det samme x som han startede ved når funktionen stopper:
Fold kodeboks ind/udKode 

Så vidt jeg kunne se satte du marioAction = 'stand' når han nåede toppen.

Koden er ikke testet overhovedet men måske kan du få den til at virke?

Du kan skrue på GRAVITY og den initiellle fart for at få hoppet hhv. hurtigere og højere



Indlæg senest redigeret d. 05.06.2009 21:29 af Bruger #15044
Men du brugte alligevel selv det globale objekt der;)



Men du brugte alligevel selv det globale objekt der;)

Ja, det er bare en good practice... Men ikke nødvendigt.. :)



Jakob: Jeg kan ikke helt forstå hvordan din kode skulle kunne virke. Men under alle omstendigheder så ved jeg at det ikke er min eval der er noget galt med, for den brugte jeg også i mit andet kode eksempel hvor den virkede fint.



Simon, hvad siger Firefox debugger til din kode? Og jeg mener hele det der system. Hvis det er en fejl må den da næsten brokke sig.



Simon, hvad siger Firefox debugger til din kode? Og jeg mener hele det der system. Hvis det er en fejl må den da næsten brokke sig.

Nope. Hverken Explorer, Firefox eller Chrome melder nogen fejl når jeg kører siden, men det virker ikke.

Det er et Mario-linende spil jeg er ved at lave. Hele min JavaScript kode er her vis det har nogen interesse:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 02.06.2009 20:34 af Bruger #10113
Det er aldrig en god idé at bruge eval, den er langsom og giver nemt problemer, som regel kan man klare sig uden.
Din kode:
Fold kodeboks ind/udKode 

Er temmeligt mystisk og man skal holde tungen meget lige i munden for at regne ud hvad den gør.
x indsætter du værdien af i eval strengen mens acc lader du blive som en variabel, hvis x er 1:
Fold kodeboks ind/udKode 

Det er som regel også en dårlig ide at bruge strenge til setTimeout, dat det svarer til en eval, det er som regel bedre at bruge funktion

du kan lave ovenstående på denne måde i stedet:
Fold kodeboks ind/udKode 

humlen er at setTimeout tager en funktion uden parametre. For at få det, laver du en funktion det tager en parameter (count) og returnere en ny funktion (uden parametre) der kalder marioFall med count parametren, denne funktion kalder du så med x. (Med (x) til sidst)
Det svarer lidt til at du får en funktion der har x's aktuelle værdi "inde i maven" så den ikke ændre sig selvom x ændrer sig.

Men spørgsmålet er om det overhovedet er det du vil?

Kan du ikke forklare hvad din setTimeout skal gøre?



Det er aldrig en god idé at bruge eval, den er langsom og giver nemt problemer, som regel kan man klare sig uden.
Din kode:
Fold kodeboks ind/udKode 

Er temmeligt mystisk og man skal holde tungen meget lige i munden for at regne ud hvad den gør.
x indsætter du værdien af i eval strengen mens acc lader du blive som en variabel, hvis x er 1:
Fold kodeboks ind/udKode 

Det er som regel også en dårlig ide at bruge strenge til setTimeout, dat det svarer til en eval, det er som regel bedre at bruge funktion

du kan lave ovenstående på denne måde i stedet:
Fold kodeboks ind/udKode 

humlen er at setTimeout tager en funktion uden parametre. For at få det, laver du en funktion det tager en parameter (count) og returnere en ny funktion (uden parametre) der kalder marioFall med count parametren, denne funktion kalder du så med x. (Med (x) til sidst)
Det svarer lidt til at du får en funktion der har x's aktuelle værdi "inde i maven" så den ikke ændre sig selvom x ændrer sig.

Men spørgsmålet er om det overhovedet er det du vil?

Kan du ikke forklare hvad din setTimeout skal gøre?

Jeg har godt hørt at det skulle være en dårlig idé at bruge eval(), desværre ved jeg ikke helt hvad alternativet skulle være, og jeg forstår ikke helt den kode du skrev.

Men jeg kan godt forklarer hvad setTimeout skal gøre. Funktionen marioFall(x) rykker figuren i mit spil (kaldet mario af mangel på bedre) 1px ned hver gang den bliver kaldet, hvis figuren vel og mærke ikke står på jorden. Pointen er at når funktionen kaldes første gang, altså når figuren begynder at falde, bliver den kaldet med 1, så X er lig med 1. Derefter bliver X forøget med 1 hver gang marioFall() kaldes, det gør at variablen acc (en forkortelse af acceleration) hele tiden bliver mindre, da den er lige med 2 / x. Det medføre at tidsrummet mellem hver gang marioFall() kaldes, hele tiden bliver mindre, og derfor falder figuren hurtigere og hurtigere. Meningen er altså at hastigheden figuren falder med, accelerer under faldet.



<< < 12 > >>
t