GLBasic forum

Main forum => Tutorials => Topic started by: Quentin on 2009-Jan-29

Title: Entity-System: Space-Shooter
Post by: Quentin on 2009-Jan-29
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]
Title: Re: Entity-System: Space-Shooter
Post by: Kitty Hello on 2009-Jan-29
Wow, danke. Genial.
Title: Re: Entity-System: Space-Shooter
Post by: Schranz0r on 2009-Jan-29
Sehr cool :D

Muss ich trotzdem den Sokoban noch machen ;)
Title: Re: Entity-System: Space-Shooter
Post by: Kitty Hello on 2009-Jan-30
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:
Title: Re: Entity-System: Space-Shooter
Post by: Heiko on 2009-Jan-30
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.
Title: Re: Entity-System: Space-Shooter
Post by: Schranz0r on 2009-Jan-30
@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!
Title: Re: Entity-System: Space-Shooter
Post by: Quentin on 2009-Jan-30
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
Title: Re: Entity-System: Space-Shooter
Post by: Schranz0r on 2009-Jan-31
:) Gernot läst ja mit sich reden...

Deshalb liebe ich GLBasic auch so, net nur wegen den netten Leuten :D
Title: Re: Entity-System: Space-Shooter
Post by: Heiko on 2009-Jan-31
Genau, ich bleib ja auch bei GLB obwohls es für xors3d schon fertige bmax und bb wrapper gibt.
Aber ich  <3 GLBasic.
Title: Re: Entity-System: Space-Shooter
Post by: Schranz0r on 2009-Jan-31
:)
Title: Re: Entity-System: Space-Shooter
Post by: Quentin on 2009-Feb-02
Danke!
Update! Siehe erste Post.