![]() |
UT2D - 2D-Shooter mit UTStyle
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo erst mal an alle Delphi Fans :dp:
Ich hab mich zwar heute erst angemeldet, habe aber direkt ein Projekt vorzustellen, an dem ich momentan arbeite. Es soll ein 2D-Shooter im UnrealTournament(C) Style sein. Bisher gibt es schon einen Editor, ein Waypoint System, Bots (und gar nicht so schlechte) und 2 Waffen (man kann aber noch nicht Waffe wechseln. Das Spiel selbst ist (nur) mit Delphi 3 geschrieben und nutzt DelphiX zum zugriff auf DirectX. MOMENTANER FORTSCHRITT DES PROJEKTS: - Ich kann momentan KEINE BUGS feststellen! :gruebel: - Bots funktionieren gut und stellen sich nur selten dumm - Animationen der Spielfiguren - Ducken und Blickrichtung der Spielfigur - Partikel - Kein LAGG mehr - Spielstatistik (F1) - Komplett neuer Spielaufbau (Nur im code bemerkbar) ermöglicht schnelle Erstellung neuer GameModes - Optionsmenü WAS ALS NÄCHSTES ERLEDIGT WIRD: - HUD - Mehr Waffen und überhaupt erst mal eine Waffenauswahl - Neue Level PS: Neue Versionen stelle ich immer in diesen Post! MFG |
Re: UT2D - 2D-Shooter mit UTStyle
Ja, also... das Spiel ist noch ein bisschen arg buggy / unfertig.
Essentielle Dinge sind mir aufgefallen: 1) Wie schieße ich? 2) Wie unterscheide ich Freund / Feind? Weiterhin: -> Bewegungen sind etwas langsam -> Sind irgendwie ziemlich wenig FPS |
Re: UT2D - 2D-Shooter mit UTStyle
Warum?
Zu: 1.) Linke Maustaste müsste eigentlich funktionieren 2.) Die Köpfe 3.) FPS normalwert (Z.B. Fernseher = 25) |
Re: UT2D - 2D-Shooter mit UTStyle
zu 1) ich will Schüsse SEHEN (evtl. sogar audio-visuelle Ausgabe :zwinker: )
2) das ist mir echt nicht aufgefallen :stupid: evtl. etwas besser erkenntlich machen :-D 3) beim PC geht aber einiges mehr! Ich war teilweise bei 20 und das ruckelt dann schon |
Re: UT2D - 2D-Shooter mit UTStyle
Uuups hatte wohl die letzte Version auf Minigun gestellt da sieht man die schüsse nicht :shock:
Und ich habe einen FPS in dem Game von ca.30 dann liegts wohl leider an deinem PC. Ich werde eine neue version hochladen! |
Re: UT2D - 2D-Shooter mit UTStyle
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal mein Waypoint System!
Das abeitet nach einem Algorytmus, der erst die Distanzen zu den einzelnen Wegpunkten vom Startpunkt berechnet, und dann einfach den Weg vom Zielpunkt zum startpunkt rekonstruiert.
Delphi-Quellcode:
Und den gesamten Code als Unit:
TWP = record
x,Y : Integer; Connections : Array [0..5] of TConnection; Distances : Array [0..5] of Integer; end; var WPmax : Integer; WPS : Array [1..200] of TWP; WPd : Array [1..200] of Integer; [....] procedure ExpandD; var i,j,x : Integer; begin for i := 1 to high(WPs) do for j := 0 to 5 do begin If (WPS[i].Connections[j].AimID<>0) then begin x := WPD[i] + WPS[i].Distances[j]; If (x < WPD[WPS[i].Connections[j].AimID]) then begin WPd[WPS[i].Connections[j].AimID] := x; ExpandD; exit; end; end; end; end; function GetShortWay(Start, Fin: Integer; var Way: TStringList): Boolean; var i,x,j: Integer; Pos : Integer; begin Result := false; try for i := 0 to 200 do WPd[i] := maxint div 2 -1; WPD[Start] := 0; ExpandD; If Way=nil then Way := TStringList.Create; Way.Clear; Way.Add(IntToStr(Fin)); Pos := 1; Pos := Fin; If Pos=0 then Pos := 1; repeat inc(j); for i := 0 to 5 do begin x := WPS[Pos].Connections[i].AimID; If not (x=0) then begin If ((WPD[Pos]-WPS[Pos].Distances[i]) = WPD[WPS[Pos].Connections[i].AimID]) then begin Pos := WPS[Pos].Connections[i].AimID; Way.Insert(0,IntToStr(Pos)); j := 0; end; end; end; if j>20 then Pos := Start; until Pos = Start; If Way.Count<=1 then Way.Add(IntToStr(Start)); Result := true; except end; end; function GetRndWay(Start, Fin: Integer; var Way: TStringList): Boolean; var i,x,j : Integer; b : Boolean; Pos : Integer; begin Result := false; try for i := 0 to 200 do WPd[i] := maxint div 2 -1; WPD[Start] := 0; WPmax := WPmax; ExpandD; If Way=nil then Way := TStringList.Create; Way.Clear; Way.Add(IntToStr(Fin)); Pos := 1; Pos := Fin; If Pos=0 then Pos := 1; repeat i := 0; If not (Pos = Start) then begin repeat x := random(5); inc(i); If (i>30) then begin exit; end; until (WPS[Pos].Connections[x].AimID>0) and (WPD[WPS[Pos].Connections[x].AimID]<WPD[Pos]); Pos := WPS[Pos].Connections[x].AimID; end; Way.Insert(0,IntToStr(Pos)); until Pos = Start; Result := true; finally If Way.Count<=1 then Way.Insert(0,IntToStr(Start)); end; end; |
Re: UT2D - 2D-Shooter mit UTStyle
![]() ... Du programmierst ein Spiel mit Delphi in Spaghetti-Code? :shock: ... Lass mich dir prophezeien, dass du das Ding so nie bugfrei kriegst. ;) |
Re: UT2D - 2D-Shooter mit UTStyle
1.) was meinst du mit Spagetti Code?
2.) Schreibfehler korrigiert :wall: 3.) Wenn du meinst, dass der code etwas unübersichtlich ist, muss ich dir recht geben. Ich erarbeite erst mal die funktionen, so wei es später sein soll, und dann packe ich dass alles schön in Objekte u.a. zusammen. |
Re: UT2D - 2D-Shooter mit UTStyle
Es würde sich auf jedenfall anbieten, jedes Männchen als Objekt (Stichwort: OOP) anzulegen.
Und 20 fps sind sehr schlecht. Die habe ich bei mir auch und teils deutlich aufwändigere Spiele haben eine fps von weit über 100. Es liegt also ganz sicher nicht am PC/Laptop sondern an deinem Spiel bzw. deiner Umsetzung. ;) Evtl. solltest du dir mal ![]() Tutorials gibt's dazu auch einige. Gib dazu in der Suchfunktion als Begriff "Andorra" ein und wähle in der Forenliste "Tutorials und Kurse" aus (ich weiß nicht, wie ich das direkt verlinken kann). Grüße |
Re: UT2D - 2D-Shooter mit UTStyle
Zitat:
|
Re: UT2D - 2D-Shooter mit UTStyle
Erstmal Respekt dafür,das Dein Game doch schon mehr an Funktion bietet, als ich erwartet habe.
Die Grafik ist allerdings langweilig. Keine animierten Player was gerade bei DelphiX kein Problem ist(Animspeed,Animcount und Patternwidth), wenn man nur die passenden Bildvorlagen dafür hätte.Ein bekanntes Problem beim Coden,wo finde ich jetzt noch einen Grafiker, ich kann mich doch nicht um alles kümmern. Eigentlich ist DelphiX Objektorientiert aufgebaut, aber ohne Source keine Ahnung. Dachte hier ist Open-Source? :wiejetzt: Fazit: Ein guter Ansatz, dennoch ist DelphiX nicht mehr aktuell,auch wenn ich aus eigener Erfahrung keine großen Performanceunterschiede zu OpenGl erkennen konnte,da meist mein Code die Bremse war.Für den Rest war meine Grafikkarte verantwortlich. Allerdings der Umstieg zu Delphi2006 brachte eine erkennbare Geschwindigkeitssteigerung beim Coden. Ich bin gespannt auf Deine nächsten Projekte,da wird sicher noch was draus. :feuerchen: |
Re: UT2D - 2D-Shooter mit UTStyle
Schau dir mal das hier an - auch mit DelphiX programmiert. Vielleicht kannst du etwas von Sourcecode lernen:
![]() |
Re: UT2D - 2D-Shooter mit UTStyle
Zitat:
Wie Matze schon sagte: OOP. Das heisst alles (idealerweise sogar jede Kugel deiner Schüsse) wird als Objekt gekapselt, mit Eigenschaften, Methoden, Ereignissen. Ist für einen OOP-Anfänger sicher ein happiger Brocken, aber nur so wirst du eine wirklich ordentliche Struktur in dein Konzept bringen können - und dann gehts auch auf. ;) Andorra würde ich dir auch empfehlen. :thumb: |
Re: UT2D - 2D-Shooter mit UTStyle
Das eben war nur der Teil meines Waypoint Systems, weil ich gelesen habe, dass mehrere Leute immer wieder an so was arbeiten. Deswegenhab ich das mal reingestellt.
Des weiteren habe ich den kompletten Source Code jetzt hochgeladen. Noch was zur FPS: Die ist wahrscheinlich wegen zu vielen Bots so hoch, da mein Code in dem Punkt noch etwas "dumm" realisiert ist. Und zur OOP: Ich hab das doch auch so realisiert, dass z.B. jede Kugel ein eigenes Objekt ist. Zitat:
Als das funktioniert hat und alle, dadurch gut zu realisierenden funktionen ausgearbeitet waren, bin ich auf DelphiX umgestiegen (vor allem der Grafik wegen). Edit: Ich arbeite grad mal an ein paar sehr kleinen Verbesserungen, die aber einiges ausmachen werden. |
Re: UT2D - 2D-Shooter mit UTStyle
Hab herausgefunden, warum das Spiel so langsm lief.
Es war die Methode, die prüft, ob man etwas sehen kann:
Delphi-Quellcode:
Hat jmd ne gute Idee, außer den markierten Wert zu ändern?
function CanSee(AX,AY,BX,BY: Single; Blocker: TBitmap): Boolean;
var i ,k : Integer; xdiff, ydiff : Single; begin Result := true; If (round(AX-BX)=0) or (round(AY-BY)=0) then exit; Result := false; <-- k := round(distance(AX,AY,BX,BY)* 2); <---> Die Zwei hab ich schon in eine 10 umgeändert If (k>10000) then exit; <-- xdiff := (AX-BX)/k; ydiff := (AY-BY)/k; for i := 0 to round(distance(AX,AY,BX,BY)*2) do begin If (Blocker.Canvas.Pixels[round(BX+xdiff*i),round(BY+ydiff*i)]<>clwhite) then exit; If (round(BX+xdiff*i)>Blocker.Width) or (round(BY+ydiff*i)>Blocker.height) then result := true; If (round(BX+xdiff*i)< 0) or (round(BY+ydiff*i)< 0) then result := true; end; result := true; end; |
Re: UT2D - 2D-Shooter mit UTStyle
Wieso weist Du in der for-Schleife immer wieder Result zu?
|
Re: UT2D - 2D-Shooter mit UTStyle
Hat sich erledigt hab ne Lösung gefunden!
:thumb: :thumb: :thumb: Denn das Game hatte bei mehr bots selbst bei mir geruckelt ... jetzt selbst bei 15 Bots auf der kleinen Map fast kein ruckeln und nen FPS von 30! Der Fehler steckte darin, dass die Methode AnzahlSpielfiguren*(AnzahlSpielfiguren-1) in einer GameSchleife aufgerufen wurde! Uuups! PS: Verbesserte Version hochgeladen siehe ersten Beitrag! |
Re: UT2D - 2D-Shooter mit UTStyle
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
--->>--->> Aus diesem grund möchte ich mal nett alle fragen, ob jmd. <<---<<--- --->>--->> zu viel Freizeit hat und vllt. ein paar nette Grafiken erstellen könnte? <<---<<--- --->>--->> Wer eine Idee hat, oder eine gute Animation, bzw. ein gutes Standbild für <<---<<--- --->>--->> eine solche Figur hat (muss nicht selbst erstellt sein ... keineswegs) der <<---<<--- --->>--->> kann diese an meine EMail schicken: <<---<<--- --->>--->>--->>--->>--->>--->> olee92@lycos.de <<---<<---<<---<<---<<---<<---<<---<<---<<--- Ich hab auch hier schon mal eine neue Vorlage ausgearbeite, die demnächst ins Spiel übernommen wird, wenn sie fertig "aufbereitet" ist. MFG an alle DELPHI FANS :dp: Björn Zeutzheim aus dem schönen Boppard XD |
Re: UT2D - 2D-Shooter mit UTStyle
Canvas.Pixels bremst auch ganz schön. Besser wärs mit ScanLine zu arbeiten.
|
Re: UT2D - 2D-Shooter mit UTStyle
Gibt es einen Screenshot vom Game?
könnte jemand den bitte hochladen? |
Re: UT2D - 2D-Shooter mit UTStyle
Was Grafiken angeht:
Vielleicht kennst du jmd. in deinem Freundeskreis, der gut zeichnen kann? Wenn der motiviert wäre, kann der ja paar Figuren in paar Stellungen zeichnen, die scannst du ein, bearbeitest sie am Computer nach und schon haste was. ;) |
Re: UT2D - 2D-Shooter mit UTStyle
Hi!
Ich hab' einige Links zum Thema Spiele&Grafiken gesammelt: > ![]() > ![]() > ![]() > ![]() Vielleicht helfen die dir auch weiter ;) Chris |
Re: UT2D - 2D-Shooter mit UTStyle
Danke für die Tipps.
Doch leider war bei den Links nich das dabei, was ich brauche. Die Bilder die ich zur Vorlage hochgeladen habe, waren bisher besser. Ich hab die mit einem Screenshoot aus UT GOTY genommen, wo ich den Player duckend von der Seite sehen konnte. Weiß jmd. vllt., wo ich einen ModelViewer für UT Models finde? Das wäre sehr hilfreich und ich könnte innerhalb von 1-2 Tagen Animationen im Spiel haben. Momentan arbeite ich an Effekten (Explosionen, usw.), HUD, und mehr Waffen. |
Re: UT2D - 2D-Shooter mit UTStyle
So mal wieder ein Update!
- Das lagging wurde NOCHMALS reduziert. - Eine neue CTF Map wurde hinzugefügt. - Sound der Waffen wird nun als "3D" Sound abgespielt (Distanz und Richtung zwischen Spieler und Soundquelle) - Update zum download im ersten Post. Also bitte mal schön testen, damit ich ein paar verbesserungsvorschläge hörne kann. (Selbstverständliche Sachen wie "Zu wenig Waffen" und "Keine Animationen" aber bitte dann nur posten, wenns wichtig ist) MFG an alle Delphi Fans :dp: Björn Zeutzheim aus dem schönen Boppard XD |
Re: UT2D - 2D-Shooter mit UTStyle
Hallo, olee!
Lagging wurde reduziert? Also bei mir kriecht es jetzt mit 15-20 fps dahin... vorher lief es mit 28-34. An meine Grafikkarte (8800GT) sowie meinem prozessor (Q6600, 2.4 Ghz Quad) würfte es wohl nicht liegen. Du solltest dir ernsthaft Gedanken über deine grafische Darstellung machen. Aktuelle 3d-Spiele laufen schneller... Ich könnte mir vorstellen, das dein Problem damit zusammenhängt, dass du das ganze Level als ein großes Bitmap abspeicherst (das dann auch jedes mal komplett gezeichnet wird). Ich habe vor Jahren auf diese Weise ein Jump'n'run zu programmieren versucht und musste das ganze hinterher auch aus Performancegründen einstellen. Denk dir lieber eine alternative Methode aus, z.B. ein 2d-Array mit Kacheln drin, oder setze alles aus Rechtecken zusammen etc... davon werden dann nur die benötigten, sprich: sichtbaren, Teile gezeichnet. Damit kannst du dann z.B. auch schneller auf Kollisionen prüfen. Das ganze hätte nebenbei noch den Effekt, dass du weniger Platz für die Levels brauchst. |
Re: UT2D - 2D-Shooter mit UTStyle
Das hab ich auch bemerkt!
Und genau was du gesagt hast hab ich mir sogar schon überlegt! (so ein Zufall) Das ruckeln ist aber trotzdem schwächer, wenn du nur die kleine Map spielst, im Vergleich zu vorher. |
Re: UT2D - 2D-Shooter mit UTStyle
Dafür gibts doch einen eigenen Typ in DelphiX //<-Edit
Delphi-Quellcode:
TBackground = class(TBackgroundSprite)
private public //Bauplan:TBauplan; //<-edit eigenes Zeugs end; mal ein Beispiel von mir, das aber nicht copypaste-fähig ist und uralter Kot (ca. 2Jahre) ist. (Bsp. es fehlt der try except Block und und und...)
Delphi-Quellcode:
//edit
Procedure CreateBckGrnd(Bauplan_:TBauplan);
begin while not CheckPicName(Bauplan_) do exit; with TBackGround.Create(Grafikengine.DXSpriteEngine1.Engine) do begin Bauplan:=Bauplan_; //TestI:=BauPlan.BplImageDatas.IMIndex; Image :=Grafikengine.DXImageList1.Items.items[BauPlan.BplImageDatas.IMIndex]; x:=Bauplan.Position.x; y:=Bauplan.Position.y; z:=round(Bauplan.Position.z); //<-wichtig visible:=true; Image.Transparent:=true; // MapWidth:=8; // MApHeight:=8; // tile:=Bauplan_.Tile; Pre_Skal8(Bauplan.BplImageDatas.IMWidth, Bauplan.BplImageDatas.IMHeight, Bauplan.BplImageDatas.IMPic); TestI:=BauPlan.BplImageDatas.IMIndex; Grafikengine.DXImageList1.Items.Items[BauPlan.BplImageDatas.IMIndex].Picture:=Pre_Skal_ResultPic; SetMapSize(Bauplan.BplImageDatas.IMMapWidth,Bauplan.BplImageDatas.IMMapHeight); Image.Restore; end; end; die Kollision kann in deinem Fall aber nicht mit TBackground gemacht werden, sondern die Wände sollten vom Typ TImagesprite sein, da soweit ich in Erinnerung habe, die beiden Typen nicht kollidieren. |
Re: UT2D - 2D-Shooter mit UTStyle
Hallo,
schau dir (wie schon weiter oben gesagt) mal mein Spiel "CrashPoint" an. Das habe ich vor 2 Jahren auch mit DelphiX geschrieben und läut mit ca. 80 FPS. Zudem lade ich Karten von der Größe 10000x2000 Pixel - Du solltest an deinem Verfahren wirklich etwas ändern: ![]() Außerdem habe ich in deinem Quellcode gesehen, das du oft die Canvas-Eigenschaft des TDXDraw verwendest. Du solltest versuche dies so oft wie möglich zu vermeiden, denn dieses verwendet direkt die GDI und die ist recht gemütlich in ihrer Arbeitsgeschwindigkeit. Wenn du das zur Grafikausgabe nimmst, dann brauchst du DelphiX eigentlich gar nicht. Vielleicht könnte dich auch meine 2D Engine Andorra 2D interessieren - diese ist in gewissem Maße DelphiX nachempfunden, ist durch Verwendung der 3D-Hardeware aber um einiges schneller. Zudem kannst du damit einfach Partikeleffekte (z.B. für Blut oder Explosionen) erstellen. Allerdings läuft das nicht mit Delphi 3. Allerdings gibt es ja "Turbo Delphi Explorer" bzw. "Lazarus" zum kostenlosen Download. |
Re: UT2D - 2D-Shooter mit UTStyle
Nun ja ich möchte aber jetzt ungern auf etwas anderes umsteigen.
Immerhin kommt noch was an Code hinzu, was das beschleunigen wird. Das mit den Partikeln möchte ich aber ganz alleine realisieren, da ich so etwas eh schon mal gemacht habe, und das hat gut funktioniert. Trotzdem VIELEN DANK! MFG |
Re: UT2D - 2D-Shooter mit UTStyle
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Du willst unbedingt die Cpu damit belasten, indem Du pixelweise den Bildschirm abtastest,//edit aber ist ja nur bei jeder Bewegung. :wall: .
Delphi-Quellcode:
TObj=class(TImageSprite)
public //Bauplan:TBauplan; //procedure DoMove(MoveCount: Integer); override; procedure DoCollision(Sprite: TSprite; var Done: Boolean); override; //<--- end; procedure TObj.DoCollision(Sprite: TSprite; var Done: Boolean); begin inherited DoCollision(Sprite,Done); //. //MeinCode //. end; Bitmap: 2.25MB |
Re: UT2D - 2D-Shooter mit UTStyle
Du nutzt Canvas.Pixels. Das ist verdammt langsam zum Zugriff auf die Pixel. Schau dir mal die Funktion
![]() |
Re: UT2D - 2D-Shooter mit UTStyle
Der Code stammt noch aus der Zeit, als ich noch meine selbst geschriebene
Sprite Engine benutzt hatte. Aber der tastet nicht den ganzen Bildschirm ab, sondern nur ein paar Fixpunkte um die Spielfigur herum ab. |
Re: UT2D - 2D-Shooter mit UTStyle
da hab ich schon mal von gehört, weiß aber nicht wie und warum ich dieses ScanLine nur für einen einzelnen Pixel anwenden sollte, den ich abfragen möchte.
|
Re: UT2D - 2D-Shooter mit UTStyle
Neue Version Online!
Siehe erster Beitrag! Verbesserungen: - Ducken - Animationen - Eingabe einer Zeitbegrenzung für das Spiel - ... Ob es noch mehr war hab ich vergessen. Prüft es einfach nach ^^ MFG |
Re: UT2D - 2D-Shooter mit UTStyle
Erst mal guten Abend an alle Delphi Fans :dp:
Ich bräuchte ein bisschen Hilfe, da ich nun so langsam mein Spiel näher an seine eigentliche Funktion heranbringen möchte. Und zwar geht es um einen Multiplayer Modus. Ich würde mich freuen, wenn einige von euch mir bei dieser Angelegenheit helfen könnten PS: Neue Version nun mit TBackgroundSprite und ein Bug der animierten Darstellung der Spielfiguren behoben. MFG |
Re: UT2D - 2D-Shooter mit UTStyle
So wieder mal eine Verbesserung:
1.) (Eigentl. schon in der letzten Version) Selbst gezeichneter Tile-BG wurde durch TBackgroundSprite ersetzt --> Lagging = nil ^^ 2.) (Einfache) Partikel 3.) Bitte gibt mal ein paar feedbacks, Verbesserungsvorschläge! 4.) Ich könnte Hilfe mit einem Multiplayer Modus gebrauchen. Hat da jmd. gute Kenntnisse? |
Re: UT2D - 2D-Shooter mit UTStyle
Pschhhht... Es gibt auch eine Edit-Funktion :wink:
|
Re: UT2D - 2D-Shooter mit UTStyle
?? was meinst du damit?
|
Re: UT2D - 2D-Shooter mit UTStyle
Dass Doppelposts innerhalb von 24h hier nicht gerne gesehen werden ;)
Zitat:
MfG xZise |
Re: UT2D - 2D-Shooter mit UTStyle
Ach stimmt hatte nicht gesehen, dass ich das mit TBackgroundSprite schon genannt hatte.
Aber der Beitrag musste sein, da ich wirklich in diesen 2h noch einige kleine Verbesserungen eingebaut hatte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz