Selbstbauanleitung: RetroShooter mit HTML5 | Teil 1

Norman erzählt in einer kleinen Selbstbauanleitung, wie man ein Game in HTML 5 programmiert. Hier ist der erste Teil:

Es war einmal ein kleiner Nerd, der nicht schlafen konnte. Es war morgens um zwei, er war noch immer nicht müde und da dachte er sich, programmiert er sich doch mal nen Retro-Shooter. Und weil der kleine Nerd sich gern nach außen kommuniziert, schreibt er nun diese Artikelreihe für euch.

Fangen wir erstmal mit den grundlegenden Dingen an. Es gibt ja nun das tolle Ding, das alle HTML5 nennen. Gemeint ist damit eigentlich die ganze Reihe der Standard-Webtechnologien, nämlich HTML, CSS und Javascript. Das tolle daran ist, dass sich bei allen dreien in letzter Zeit so unglaublich viel tut. Somit ist nun mit modernen Browsern vieles möglich, das vorher Flash brauchte: Musik und Videos abspielen und sogar Spiele!

Vorallem letzteres geht dank des neuen Canvas-Elements. Das Canvas – zu deutsch Leinwand – stellt für den Programmierer das Gleiche dar, wie für einen Künstler: Man kann darauf malen, was man will. Leider hat man auch die selben Beschränkungen: Malt man etwas darauf, ist es nicht einfach markier- und verschiebbar. Aber dazu komm ich später, denn in der ersten Ausgabe soll es nicht nur eine Einleitung und Grundlagen-Bla geben sondern auch ein wenig Inhaltliches.

Wie programmiert man ein Spiel?

Erstmal ein wenig Theorie. Ein Spiel programmiert sich ja nun nicht einfach so, man muss schon wissen, wie man dem Computer trotz seines begrenzten Verständnisses klar macht, was man will.

Die wirklich komplexen Titel benutzen dafür natürlich eine fertige Engine. Früher – also ganz früher – war das noch nicht so unbedingt der Fall. Der Commodore-Freak hat sich einen kleinen Vertical-Shooter durchaus auch einfach so runter geschrieben.

Und genau das ist auch mein Plan.

Was ist eine Engine?

Hauptaufgabe des Spielemotors ist es, Bilder zu generieren und an die Grafikkarte zu schicken – wenn möglich mindestens 30 Mal pro Sekunde. Was passiert, wenn es weniger oft klappt, kennen wir: Es ruckelt und zuckelt. Sicher, bei einem Vertical Shooter der altmodischen Art, tun es auch zwanzig Bilder die Sekunde, aber man muss ja nicht alles altbacken angehen. Das Bild am Ende auf die Leinwand zu bringen kann man auch wieder unterschiedlich umsetzen.

Single Buffering, Double Buffering, Triple Buffering?

Zwei der typischen Bekannten erscheinen hier sinnvoll: Direkt auf die Leinwand malen oder im Hintergrund auf eine versteckte Leinwand malen und diese dann auf die gezeigte kopieren. Letzteres nennt man Double Buffering. Man kann das sogar noch zuspitzen und eine weitere versteckte Leinwand nutzen. Das ist dann Triple Buffering. Inwiefern dreifaches Puffern des Bildes Vorteile gegenüber dem zweifachen bringt, weiß ich nicht, aber zweifaches Schreiben ist vorallem dann von Nutzen, wenn das eigentliche Zeichnen zu langsam vonstattengeht und dadurch ein Flimmern erzeugt.

Aber wie jetzt nun malen?

Das eigentliche Malen kann man sich für ein Programm natürlich nicht ganz so vorstellen, wie für einen Menschen – selbst wenn dieser ein Programm dazu verwendet. Wir müssen uns damit zufrieden geben, sogenannte Primitive zu verwenden. Das sind beim Canvas Linien, Vierecke und Kurven. Daraus kann man alles generieren, was man sich nur wünschen kann, wenn man nur abstrakt genug herangeht.

Will man also zum Beispiel ein Raumschiff von unten in der Mitte gerade nach oben fliegen lassen, springt man an einen Eckpunkt, an dem man mit dem Zeichnen der Linien beginnen will und zieht dann Linien oder Kurven, bis man sich ein Wunschraumschiff zusammengebastelt hat. Um es zu bewegen, beginnt man beim nächsten mal ein bisschen weiter oben und das so lange, bis es das gewünschte Ziel erreicht hat.

Das Ganze kann man natürlich auch mit mehr als einem Raumschiff machen. Diese können auch in unterschiedliche Richtungen fliegen. Es müssen ja nicht mal Raumschiffe sein. Genausogut, kann man so auch Projektile verschießen und Power-Ups erscheinen lassen.

Renderfunktion

Damit alles vernünftig der Reihe nach abläuft, lässt man es nacheinander in einer einzigen Funktion passieren, die möglichste alle 33 Millisekunden durchläuft, um die gewünschten 30 Bilder pro Sekunde zu erreichen. Weil man aber nicht so genau einschätzen kann, wie lange die Funktion nun wirklich im Einzelnen braucht, verzichtet man auf einen generischen Aufruf, der sie in einem strikten Zeitrahmen aufruft, sondern lässt die Funktion ihre Laufzeit messen und sich dann selbst wieder nach einer Zeitspanne aufrufen, die dann auf die Laufzeit addiert möglichst 33 Millisekunden ergibt.

Das klingt jetzt alles vielleicht total kompliziert, aber ist es überhaupt nicht. Man hält nur am Anfang von allem die aktuelle Zeit fest und zieht dann nach all der Malerei diesen Wert von der nun aktuellen Uhrzeit ab und schon hat man, was man braucht.

Ist ein Spiel nicht noch viel mehr als nur Malerei?

Natürlich gehört noch mehr dazu, als nur einfach irgendwo herumzumalen, schließlich wollen wir keinen Film animieren, sondern etwas Interaktives schaffen. Dazu müssen wir Tastatur-Eingaben auslesen, Kollisionen abfragen, Level, Leben und Punkte zählen. Das alles erwartet dich im dritten Teil dieser Reihe.

Wann geht’s nun los? Ich will programmieren!

Im nächsten Teil werde ich nicht mehr weiter mit Theorie langweilen und direkt starten. Wir werden eine ganz einfache HTML-Seite mit einem Canvas-Element bauen und auch schon darauf malen – 30 Bilder pro Sekunde. Um die Langeweile bis zum nächsten Teil ein wenig zu mindern, habe ich mal ein paar nette Links zum Thema zusammen gesammelt:

http://www.squakenet.com/games-download/vertical-shooter
http://abstract-productions.net/game/shooter.html
http://www.codeproject.com/Articles/396959/Mario5

Kommentare
  1. Rrn which may possibly wedding whilst not like, you will see like whilst not wedding.
    destockchine femme http://www.destockchinefr.fr/

  2. Inside of abundance all of our family realize people; located in difficulty problems in later life all of our family.
    nike schuhe damen http://www.nikeschuhedamendes.com/

  3. The actual the worst tactic to overlook a person has been to be laying perfect with folks figuring out you can actually

  4. Adore stands out as the effective priority in the lifestyle and so the expansion of whatever all of us love. jordanretro7air.com http://www.jordanretro7air.com/

    • Heya i’m for the primary time here. I came across this board and I to find It truly helpful & it helped me out a lot. I’m hoping to present something back and aid others like you helped me.

  5. Around the world maybe you are anyone, but to consumer maybe you are the world. Nike Air Jordan 4 Retro http://www.jordanretro4air.com/

  6. A buddy which you simply decide to buy with the brings could be purchased in yourself. K77.fr http://www.k77.fr/

  7. An accurate partner is but one who seem to overlooks the flops combined with can handle the successes. France Marque http://www.g33.fr/

    • I needed to thank you for this good read!! I absolutely loved every bit of it. I’ve got you book marked to check out new things you post…

  8. Fail to connect with others which are contented to get along with. To understand who’ll strength consumers to jimmy your own self in. K88.fr http://www.k88.fr/

    • Howdy! I could have sworn I’ve visited this website before but after looking at many of the articles I realized it’s new to me. Anyhow, I’m certainly delighted I stumbled upon it and I’ll be bookmarking it and checking back often!

  9. Friendships carry on when you are just about every single pal is convinced fresh a slight transcendency during the some other. destock chine http://www.c55.fr/

  10. Friendships keep working any time both equally colleague feels as well as a slight fineness since the various. jordan 4 http://www.nike44.com/

  11. For no reason lower, although you’re the one heartbreaking, as you are do not no who might be becoming crazy about your trusty laugh. uknow http://www.f77.fr/

  12. Relationships carry on any time each pal perceives as well as a small superiority around the other. kicksonfire http://www.jordanretro10air.com/

  13. Won’t bring your favorite bliss to 1 a lot happy over oneself. flightclubny http://www.jordanretro10air.com/

  14. You should not communicate your entire happiness to considerably less endowed unlike that you are. destock chine http://www.c55.fr/

  15. Adore might single satisfied and in addition adequate answer to the problem related with individual lifestyle. casquette obey http://www.i77.fr/sport-casquette-snapback-casquette-obey-c-7_168_185.html/

  16. it was very interesting to read. I want to quote your post in my blog. It can? And you have an account on Twitter?

  17. I don’t understand this post. I must not be getting something basic here.

  18. hey, this might be little offtopic, but i am hosting my site on hostgator and they will suspend my hosting in 4days, so i would like to ask you which hosting do you use or recommend?

  19. Developers, developers, developers! As someone famous once said.

  20. Nice job on the pic

  21. Thank you for creating valuable post about the subject. I’m a fan of your site. seslishe Keep up the good work

  22. I really like you do not due to about what you do, yet due to who actually I’m certainly people here’s together with. d22.fr http://d22.fr/

  23. Like is almost certainly fragile at birth, nevertheless gets bigger much better as they age you’ll no doubt accordingly raised on. [url=http://d22.fr/]casquette unkut[/url] casquette unkut

  24. Even though a loved one doesn

  25. Romance is definitely the productive interest to the life-style along with the growth of what many of us real love. [url=http://d33.fr/]casquette new york[/url] casquette new york

  26. Where can I find a site that has free wow code for the game free world of warcraft

  27. chanel store tres bel reportage, paquet agile, tres soubrette contrat,

  28. This blog appears to recieve a good ammount of visitors. How do you get traffic to it? It gives a nice unique spin on things. I guess having something authentic or substantial to say is the most important thing.

  29. ha ha hay Starr

  30. This post was very nicely written, and it also contains a lot of useful facts. I appreciated your professional way of writing this post. Thanks, you have made it very easy for me to understand.

  31. Nice post man. I think Im visiting your blog after many days. Good work, keep it up:)

PLATZ FÜR DEINE MEINUNG