JCanvas animation bleibt nicht konstant auf einer Geschwindigkeit

  • Warum denn das?

    Man kann den Tower nicht überall platzieren, bei dragstop muss man also den Tower zurücksetzen wenn er falsch platziert wurde, wenn sich der Spieler einmal vertan hat, könnte das auf dauer nervig werden. Das ist aber das kleinere Übel, das größere dabei ist, dass es auch Tower geben soll die man ohne sie immer wieder rüberziehen zu müssen mehrmahls durch klicken setzen kann. Wenn man die immer wieder ziehen müsste, würden einige bestimmte Tower keinen Sinn mehr machen.


    Und die Sache mit der Bildschirmgröße... Ja natürlich... An die CSS habe ich gar nicht mehr gedacht und ich dachte der Fehler müsse von den Layern kommen. Danke dafür.

  • Sempervivum Als ich die levels function so verändern wollte dass sie mit bloonCounter arbeitet, ist mir aufgefallen dass ich die Variable 'counter' nicht berücksichtigt habe. Also habe ich versucht levels noch mal neu zu schreiben und konnte den Code zu meinem erstaunen deutlich kürzer halten:


    Jetzt gibt es hier aber 2 Probleme hinter die ich noch nicht komme. 1. hört der bloon sich schon nach 13 Schritten sich zu bewegen. Und 2. wird trotzdem nur ein Bloon erstellt...


    jetzt frage ich mich wo genau man ansetzen muss..


    EDIT: Problem 1 hat sich geklärt. Bleibt noch Problem 2.

  • Zitat

    konnte den Code zu meinem erstaunen deutlich kürzer halten

    Mich erstaunt vor allem, dass dieser Code funktioniert. Er tut es, aber ich bin weit davon entfernt, zu verstehen, wie und warum.

    Was mich betrifft, kann ich daher auch das zweite Problem nicht lösen.

  • Mich erstaunt vor allem, dass dieser Code funktioniert. Er tut es, aber ich bin weit davon entfernt, zu verstehen, wie und warum.

    Dann schau dir das hier an, da wirst Du vom Stuhl fallen:


    Am besten ist es ja noch wenn der Programmierer selbst nicht weiß was er getan hat!


    Im Grunde genommen kann ich damit auch nichts anfangen, da nicht 14 Bloons erstellt werden, sondern nur einer.

  • Ich glaube, so annähernd verstehe ich jetzt, wie das funktioniert.

    Zitat

    da nicht 14 Bloons erstellt werden, sondern nur einer.

    Dann versuche mal dieses:

  • Ich will mich ja nicht beschweren, aber hier hat es den Anschein, als würden die Bloons verziehen, wodurch der Abstand nicht der gleiche bleibt. Im nachhinein rücken die dann immer in einem Sprung 3 Schritte vor um den Abstand wiederherzustellen.


    Da hätte ich mal ne konkrete Frage: Wozu braucht man das Timeout? Anscheinend klappt es ja auch ohne.

  • Das erste mit dem Abstand kann ich nicht reproduzieren. Am besten wäre es, wenn Du deins irgendwo hochladen könntest, damit man es sich in Aktion ansehen kann.


    Das Timeout braucht man, damit die Bloons in zeitlichem Abstand starten. Versuche es: Wenn man das Timeout heraus nimmt, liegen sie alle übereinander und es hat den Anschein, dass nur einer da ist.

  • Auf diesen Screenshots erkennt man es allerdings.


    Bisher hatte ich im Opera getestet und auch dort kommt es zu gravierenden Problemen, wenn ich, während die Animation läuft, auf einen anderen Tab wechsele.


    Anscheinend benutzt Du Firefox, aber auch damit kann ich das Problem nicht reproduzieren, auch nicht auf deiner bplaced-Seite.

  • Das Problem mit der Verschiebung scheint schlichtweg auf Hardware Ebene zu liegen. Natürlich muss das trotzdem angegangen werden.


    Die Sache mit dem Tab wechseln, das hatte ich schon bei der ersten Version des Levels() Scriptes. Soweit ich weiß gibt es da eine Funktion die ähnlich wie SetInterval funktioniert, nur dass diese Rücksicht auf den Browser nimmt um gerade solche Probleme zu vermeiden. Wie hieß die noch gleich...

  • Ich habe Caleb, den Entwickler von jCanvas, mal danach gefragt und er hat geantwortet, dass jCanvas für die Animationen jQuery benutzt und dass dieses seit Version 3 requestAnimationFrame einsetzt. Ich bin mir auch nicht sicher, ob diese Funktion die Probleme mit dem Tabwechsel löst.

  • Dann mal ne andere Frage: Du als erfahrenerer Entwickler: Wie würdest Du so etwas programmieren? Es geht nämlich vor Allem um Objekte die sich schlichtweg von A nach B bewegen sollen. Die Objekte können verschwinden wenn man sie zerstört, müssen also schon als Objekt selbst ansprechbar sein. In den einzelnen Level kommen sie als Wellen in bestimmten Abständen. Wenn ein Objekt von Typ 2 zerstört wurde soll genau dort ein Objekt von typ 1 erstellt werden. Und ganz wichtig: Im ersten Level sind es 14 dieser Objekte, bei Level 100 sicherlich 600 - 800 die Reibungslos über das Spielbrett wandern sollen. Einige sind größer als andere, schneller oder haben allgemein andere Eigenschaften. Wie eben im Originalspiel :D


    Jetzt sag mir nicht das geht nicht, gehen muss es ja schon irgendwie. Das Originalspiel basiert auf Flash, da hat man es ja auch hingekriegt.


    Ich glaube da kann man auch ganz anders ansetzen als wir es bisher getan haben oder?

  • Wenn es die Entwicklung von Spielen geht, ist meine Erfahrung allerdings sehr begrenzt, vor allem wenn es um die Performance bei hunderten von Objekten geht.

    Wenn Du mich unter dieser Einschränkung fragst, wie ich es machen würde, dann genau so, wie Du es jetzt machst, mit einer Bibliothek wie jCanvas.

    Zitat

    Die Objekte können verschwinden wenn man sie zerstört, müssen also schon als Objekt selbst ansprechbar sein.

    Das ist bei jCanvas der Fall, Du kannst ein Objekt über seinen Namen ansprechen oder über seinen Index.

    Zitat

    Wenn ein Objekt von Typ 2 zerstört wurde soll genau dort ein Objekt von typ 1 erstellt werden.

    Das ist relativ einfach, denn Du kannst die Position nach x und y für das alte Objekt vor dem Zerstören abfragen und dann das neue genau dort platzieren.


    Auch mit Flash habe ich überhaupt keine Erfahrung und kann deshalb auch keine Vergleiche ziehen.

    Zitat

    Ich glaube da kann man auch ganz anders ansetzen als wir es bisher getan haben oder?

    Ein ganz anderer Ansatz wäre, auf jegliche Bibliotheken zu verzichten und die Animationen mit requestAnimationFrame "zu Fuß" zu programmieren. Ich kann allerdings nicht voraussagen, ob man da wesentlich an Performane gewinnt.


  • Zur INFO:

    Bei mir im Opera ist das so.

    Erst läuft alles flüssig.

    Wenn ich dann in einen anderen Tab gehe ist auch noch alles gut.

    Gehe ich dann in den Spiele Tab zurück bleibt alles stehen und dauert etwas bis er wieder startet

    Die Seite verbraucht laut taskmanager 40 % von meinen Cpu. Also doch etwas sehr resorcen fressend.


    So bin wieder weg

  • basti1012 Danke für die Statistik.


    Sempervivum Obwohl Jcanvas viele nützliche Dinge zu bieten hat, scheint es mir nicht die richtige Bibliothek für Spieleentwicklung zu sein. Da stellt sich jetzt bei mir die Frage: Nochmal alles neuprogrammieren mit neuer Bibliothek oder einfach noch eine nutzen? Faktisch habe ich gerade 2 in Benutzung, JQuery und JCanvas.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!