JavaScript Zielscheibe Bewegen

woldofoldo

Lt. Junior Grade
Registriert
Okt. 2006
Beiträge
390
Guten Abend,


ich habe eine kleine frage zu javascript.

ich versuche gerade ein spiel zu erstellen, die basis funktioniert bereits.

nun will ich aber die Zielscheibe hoch und runter bewegen lassen. dies klappt auch ganz gut, allerdings zieht die scheibe "schlieren" , die anscheinend auch weiter berechnet werden, denn das spiel läuft in ein paar selunden richtig langsam.


Unbenannt.gif




(zielscheibe wird mittels wz_jsgraphics gezeichnet). was mach ich falsch, das die "alte" zielscheibenposition nicht aus dem bild verschwindet?

wenn jemand die gewünschte funktion mit einem bild realisieren kann würde das auch gehen. muss also nicht mit wz_jsgraphics gemacht werden.

Mein Momentaner Code für das zeichnen der Zielscheibe lautet :

function zeichneZielscheibe(){


var jetzt = new Date();
var millisekunden = jetzt.getMilliseconds();
var sinA = 20*Math.sin(millisekunden*Math.PI/820);



zielscheibenYPosition = (parseInt(hintergrund.style.height)) * (0.75) + sinA;
zielscheibenXPosition = 176;
zielscheibe.setColor("maroon");
zielscheibe.fillEllipse(zielscheibenXPosition - 2,zielscheibenYPosition, 14, 60);
zielscheibe.setColor("blue");
zielscheibe.fillEllipse(zielscheibenXPosition ,zielscheibenYPosition + 10 , 10, 40);
zielscheibe.setColor("green");
zielscheibe.fillEllipse(zielscheibenXPosition + 2 ,zielscheibenYPosition + 20 , 5, 20);

zielscheibe.setColor("black");
zielscheibe.setStroke(2);
zielscheibe.drawLine(180 , (parseInt(hintergrund.style.height)) * 0.6 , 180 , zielscheibenYPosition );


zielscheibe.paint();
}


zeichneZielscheibe();
zielscheibeTimer = setInterval("zeichneZielscheibe()",50);






würde mich über jede hilfe freuen.
 
Ich könnte mir Vorstellen, dass das Zeichnen in den 50ms (durch das setinterval!) nicht fertig wird. Dann startet ein neuer Thread und so verlangsamt sich langsam alles immer mehr weil X Threads gestartet werden. Brauchbarer wäre es wenn du die Zeit am Anfang deiner Funktion misst und dann am Ende berechnest wie lange sie gelaufen ist. Anschließend dann mit setTimeout die Funktion neu starten. Es kann zwar dann auch vorkommen, dass er nicht fertig wird, es läuft dann aber nur langsamer und ansonsten problemlos.

Generell wäre für sowas ja eigentlich Flash wesentlich besser geeignet...
 
hab auch schon an sowas gedacht, das problem ist die funktion berechnet die Y position, setze ich die 50ms auf 100ms, wird die yposition von der scheibe einfach nur langsamer dargestellt (scheibe stottert).


es muss eine möglichkeit geben vorher die alte y position zu löschen, vielleicht irgendwie mit clear oder sowas, hab zwar schon versucht aber es klappt nicht so wie ich möchte ;) bin halt noch anfänger und mache irgendwo einen fehler...
 
Hatte auch an sowas wie clear gedacht, weil ich keine Ahnung habe so´n bisschen nachgegooglet, aber ohne Erfolg.
Versuch mal so´n OpenSource-Spiel zu bekommen und guck mal, wie sie da vorgegangen sind.
 
hab es gelöst in dem ich ein bild eingefügt habe, dass ich mit der selben funktion bewegen lasse...das zieht keine schlieren ;)
 
Zurück
Oben