Entity-System: Space-Shooter

Previous topic - Next topic

Quentin

Hallo liebe GLBasic'ler,

da ich mich schon seit längerem mit dem Entity-System beschäftige (um endlich den nächsten X-Wing-Nachfolger rauszubringen ;) ) habe ich mal ein kleines Tutorial verfaßt, daß die Grundzüge des Entity-Systems anhand eines einfachen Weltraum-Shooters zeigen soll. Man kann sich hier frei im 3D-Weltraum bewegen und bunte Asteroiden abschießen, die planlos in der Gegend rumschwirren. Also nichts großes, aber vielleicht kann der ein oder andere etwas damit anfangen.

Im Anhang befinden sich gepackt das Tutorial als PDF-Dokument sowie die erforderlichen Projektdatein.

Viel Spaß damit.

---------------------
Update 1.01
- Lasergeschütze als Pivotelemente
- Funktion für Kollisionserkennung optimiert (FOREACH)
- Anhang aktualisiert

[attachment deleted by admin]

Kitty Hello


Schranz0r

Sehr cool :D

Muss ich trotzdem den Sokoban noch machen ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Anmerkungen:
eine Art Lasergeschütz (hier nur als kleines Dummyobjekt),
-> Dafür kann man auch EntityCreatePivot nehmen. Das ist ein Dummy-Objekt, dass weder Kollision noch Grafik hat.

Code (glbasic) Select

FOR k = 0 TO count
   IF asteroid[k].obj = ecol
      INC hits, 1
      EntityFree(asteroid[k].obj)
      AsteroidCreate(k)
      //DIMDEL asteroid[], k --> use this if you
      // don't want them to return
   BREAK
   ENDIF
NEXT


besser mit FOREACH:
Code (glbasic) Select

FOREACK ka IN asteroid[]
IF ka.obj = ecol
INC hits, 1
EntityFree(ka.obj)
    // AsteroidCreate(k) <-- umbauen, oder index mitzählen
//DIMDEL asteroid[], k --> use this if you
// don't want them to return

// DELETE ka
BREAK
ENDIF
NEXT



Danke, super Tutorial!  :good:

Heiko

Sollte aber Kollision haben, ist nämlich nützlich für Kamera Movements, damit man nicht mit dem Level bspw. kollidiert bzw. genügend Abstand hat.Nur eine Anmerkung am Rande.

Schranz0r

@Gernot:

Das mit dem Pivots ist ne geile Sache :D
Hab die auch für das Movement genommen :) Player und Cam drann, dann gehts ab :D
Wenn eine Festeinbindung stattfindet, dann hätt ich da ein paar Vorschläge:

1. Jedersmal EntityBefehl eingeben ist auf dauer nicht so prickelnd. Besser wäre da sowas wie ES_befehl oder E_befehl.
    Da kann man dann super die Autovervollständigung benutzen :P
2. Wenn man was "setzt" wirklich auch gucken, dass der Befehl ES_SetBefehl heißt, das gleiche auch mit Get :) (Haste du auch super
    umgesetzt soweit )
3. Evtl den Befehl EntityAlignTowards umbenennen in EntityLookAt ? // hab den Befehl doch ein wenig suchen müssen :D


Sonst ist mir echt noch nix aufgefallen...
TOP arbeit Gernot!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

jau, stimmt, in diesem Falle wäre ein Pivotelement gut. Hab es schon umgestrickt, die Kollisions-Funktion auch. Muss nur noch das Geschreibsel entsprechend ergänzen  :S

Wenn das ganze wirklich fest eingebaut werden soll, wäre eine Skybox/-sphere/-dome oder ähnliches ganz gut. Zumindest die Möglichkeit, diese dann zu ergänzen

Schranz0r

:) Gernot läst ja mit sich reden...

Deshalb liebe ich GLBasic auch so, net nur wegen den netten Leuten :D
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

Genau, ich bleib ja auch bei GLB obwohls es für xors3d schon fertige bmax und bb wrapper gibt.
Aber ich  <3 GLBasic.

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

Danke!
Update! Siehe erste Post.