Das wichtigste zuerst: Bei manchen fehlt die qtintf70.dll. Ich habe sie in obiges Projekt eingefügt, aber es gibt sie auch noch einmal hier zum downloaden. Ich weiß noch nicht genau wo das herkommt, aber damit habe ich heute abend was zu tun
Zuallerst was optisches: Ich bastel gerade die GUI, hier ist ein kleiner Vorgeschmack:

Je nachdem wo die Maus ist werden sich die Kugeln entsprechend umordnen, eine optische Hervorhebung wird es auch noch geben.
Hier nun noch ein paar Details zum programmtechnischen Hintergrund:
Bilder werden via glBitmap.pas eingeladen und weiterverwendet
HUD / GUI werden mit einer Unit aus meinem Framework. Sie ist etwas steif und unflexibel, aber sie erfüllt ihren Zweck: Unterstützt werden Buttons, Windows, Panels, Edits, Bilder, Checkboxes, desweitern natürlich alle Standardschriftarten, Alpha-Blending und verschiedene optische Einstellungen. Übergeben werden muss nur der DC und die Größe des Bildschirmes, alles weitere lässt sich untuitiv hinzufügen, etwa so:
Code: //HUD erzeugen HUD := TGUI.Create(DC,x,y); //Ein Fenster erstellen HUD.CreateWindow(0,trunc(0.9*y), trunc(0.7*x) ,y,'hud'); //Ansteuern des Fensters 'hud' und Einstellen diverser Eigenschaften HUD.Window('hud').BorderVisible := false; HUD.Window('hud').BorderSize := 0; HUD.Window('hud').BackgroundVisible := false; HUD.Window('hud').AddImage(0,0, trunc(0.7*x) ,trunc(0.1*y), ExtractFilePath(ParamStr(0))+'hud.tga','hud_image'); //Ansteuern des Bildes 'hud_image' im Fenster 'hud' HUD.Window('hud').Image('hud_image').Active := true; HUD.Window('hud').Image('hud_image').onClick := DoSomethingAwesome; ...
Gerendert wird das ganze dann via glOrtho, eine dreidimensionale Ausgabe ist meiner Meinung nach nicht nötig. Sollte die Maus oder eine Taste gedrückt worden sein, wird dieser einfach mit Koordinaten an TGUI weitergegeben und diese überprüft ob auf den aktivierten Fenster z.b ein Edit-feld den Fokus hat und trägt dort das übermittelte Zeichen ein.
Schwarm Mein Schwarm basiert auf folgenden Eigenschaften: - Kommt eine Kugel einer anderen zu nahe wird der Beschleunigungsvektor so gesetzt dass er sich entfernt. Befinden sich mehrere Kugeln zu nahe, wird gemittelt - Analog wird auf den Schwerpunkt der umgebenden Kugel zugesteuert
Dazu kommt dann noch: Eine Art Gleichrichtung, indem der Beschleunigungsvektor an den mittleren Geschwindigkeitsvektor der umgebenden Kugel angepasst wird, sowie eine Art Fluchtinstinkt. Die Kugeln weichen dem Spieler aus. Desweiteren die Kollisionserkennung: Innerhalb eines Kreises wird überprüft ob der Vektor Position+Beschleunigung*Faktor innerhalb eines Dreiecks liegt welches ein Hinderniss beschreibt. Wenn ja wird der Beschleunigungsvektor so gesetzt, dass die Kugel sich am schnellsten vom Hinderniss wegbewegt
Levels In einer level-datei, welche eine einfache Textdatei darstellt, stehen einfach die Koordinaten der Barrieren, de Größe des Spielfeldes usw. Also nichts großes. Evtl stelle ich das später mal um, so dass auch Texturen gespeichert werden können usw.
So long Carmageddon
|