Hoppa till innehållet

Shape Shooters · 2020 · universitetsprojekt

Shape Shooters – spelmotor i C++

Ett universitetsprojekt: ett arkadskjutspel för flera spelare och den lilla motorn under det, skrivet från grunden i C++ med SFML. Min första riktiga lektion i spelloopar, timing och varför kollisionsdetektering aldrig blir riktigt klar.

Lager
gränssnitt, applikation
Byggt med
C++ · SFML · OOP · UML · Game Development
Länkar
källkod på GitHub
SCORE 0420 LIVES 3 · WAVE 4 rutnät 80 px · 18 celler AABB 56² Ship · p(234,248) v(0,42) v(‑26,36) v(‑40,0) hit · +20 KLASSER Entity pos · vel · box Ship Enemy Bullet entiteter 14 kollisionstest 31 / 91 spar 66 % med rutnätet frame time · 60 Hz EN BILDRUTA · 16,7 ms input 0.4 · update 2.1 collide 1.3 render 6.8 idle 6.1 · vsync dt = clock.restart() · position += hastighet · dt 1 2 3 4 5
Fig. 01 — En bildruta ur spelloopen: positioner, hastigheter, lådorna som avgör en träff, och vart de 16,7 millisekunderna tar vägen.
  1. 1Entitet · position, hastighet, omslutande låda
  2. 2Rumsligt rutnät · bara grannar testas
  3. 3Hastighet · integreras varje bildruta med dt
  4. 4Bildrutebudget · 16,7 ms, mätt varje varv
  5. 5Klasshierarki · Entity, sedan Ship, Enemy, Bullet

Problemet

Ett universitetsprojekt med en vidöppen uppgift och ett hårt villkor: bygg ett spel, men bygg motorn också, i C++ med SFML och utan något spelramverk att luta sig mot.

Vad jag byggde

Ett arkadskjutspel för flera spelare där allt är geometriska former, och den lilla motorn under det: en spelloop med riktig timing, en entitetsmodell byggd på objektorienterade designmönster, kollisionsdetektering med omslutande lådor, poäng- och tillståndssystem, power-ups och flera fiendetyper med eget beteende. Jag ritade arkitekturen i UML först och höll motorn skild från spelet som körs på den.

Vad jag lärde mig

Spelloopar lär en om tid på ett sätt webbarbete aldrig gör: allt händer var sextonde millisekund, annars händer det inte. Jag lärde mig att kollisionsdetektering aldrig blir riktigt klar, att en ren entitetsmodell betalar sig i samma stund som man lägger till den tredje fiendetypen, och att det inte är byråkrati att rita designen innan man skriver den.