![]() |
2-D Adventure programmieren
Hallo Delphi-Freunde :-D
Ich bin zwar noch ein Anfänger, aber begeistert von Delphi und würde gerne eine Idee realisieren, um meinen "Delphi-Wortschatz" zu bereichern. Folgendes... Ich stelle mir einen Klassenraum vor, indem mein Foto als "Kopf" einer Figur(eventuell Strichmensch) rumlaufen kann. Nun habe ich mich in Andorra und DelphiX ein bisschen eingelesen und finde, dass ich dem noch nicht gewachsen bin. Denkt ihr, um diese Figur zu realisieren, die dann eventuell auch durch den Klassenraum gehen kann, reicht Canvas von Delphi aus??(in Draufsicht oder Seitenansicht) Wie realisierbar sind mit Canvas z.B. Tische und Stühle im Zimmer sowie vielleicht ein PC?? Es soll dabei keine 1A Grafik herauskommen (zumal ja eh 2-D) aber man sollte in etwas erkennen, worum es sich handelt. Gruß Tobias |
Re: 2-D Adventure programmieren
Ich denke, dass Canvas da schon reichen würde, doch trozdem würde ich dir Andorra 2d / OpenGL empfehlen.
|
Re: 2-D Adventure programmieren
Naja, der Aufwand soll erstmal gering sein (gemeint ist das Einlesen in neue Materie), würde das gerne versuchen zu realisieren, nur mit den Mitteln, die mir mit Canvas zur Verfügung stehen. Nur sollte sich durch die Aussagen der erfahrenen Programmierer herausstellen, dass man ohne Andorra oder DelphiX nicht anfangen brauch, dann würde ich dies natürlich berücksichtigen.
Nunja, ich warte mal auf Anregungen von weiteren Lesern.... :???: |
Re: 2-D Adventure programmieren
Also, in meinen Augen ist das ohne Weiteres möglich. Allerdings wird die geplante Animation vermutlich flackern, so dass Du Dir Gedanken über das Puffern der Zeichenfläche machen solltest (das klingt schlimmer, als es ist). Weiterhin sollte eine Kollisionskontrolle implementiert werden, damit die Figur nicht durch die Tische hindurch laufen kann. Bei auftauchenden Fragen einfach fragen ;)
P.S.: Ich finde es gut, dass Du Deine Kenntnisse realistisch einschätzt und wirklich lernen willst, da kenne ich auch andere (deren Namen ich hier nicht nennen werde, da sonst dieser Beitrag mal wieder gelöscht wird :mrgreen: ) |
Re: 2-D Adventure programmieren
Bei einem 2D Adventure, dass nicht allzu abgefahrenene Physik simuliert, brauchst du noch keine Engine. Mit etwas Mathe und Physikkenntnissen, kannst du dir eine einfache Kollisionserkennung und Abprallbehandlung selbst implementieren.
|
Re: 2-D Adventure programmieren
Hi,
wenn Du das alle schön mit OOP (Objektorientierter Programmierung) aufbaust, sollte dem nichts im Wege stehen. Mit Canvas lässt sich sowas machen. Später, wenn es mit Canvas funktioniert, kannst Du Dir das Adventure nochmal vornehmen und anstatt Canvas Andorra 2D benutzen. :-) Wegen dem Flackern bei Canvas werfe ich einfach mal ein ![]() Liebe Grüße, Manuel :hi: |
Re: 2-D Adventure programmieren
Vielleicht noch eine Kleinigkeit, keine Ahnung, ob du das weißt:
Andorra2D stellt selbst auch ein Canvas-Objekt bereit, mit dem du Zeichnen kannst. Entweder du ließt dich da doch ein bisschen (mit den Beispielen) ein, oder du machst es erst mit dem VCL-Canvas, und kannst dann (vermutlich doch mit ein paar Anpassungen) den Code, der den VCL-Canvas betrifft, für den Andorra-Canvas übernehmen. Naja, aber wenn Andorra... dann will man natürlich auch die schönen Klassen benutzen :-D Wollte es nur gesagt haben. |
Re: 2-D Adventure programmieren
Zitat:
P.S.: Herzlichen Glückwunsch nachträglich :cheers: :party: |
Re: 2-D Adventure programmieren
Zitat:
Zitat:
|
Re: 2-D Adventure programmieren
Danke für die Anregungen :-D
Ich werde sicherlich die nächsten Wochen auf diesen Thread zurückgreifen müssen, da mit Sicherheit Probleme auftreten werden :stupid: |
Re: 2-D Adventure programmieren
dein vorhaben ist mit canvas ohne probleme möglich. auch ohne Flackern und mit ordentlicher Performance.
|
Re: 2-D Adventure programmieren
Hallo :)
Das Adventure nimmt allmählich Form an, auch wenn sicherlich einige Sachen sehr umständlich programmiert worden sind :???: Aber Übung macht ja bekanntlich den Meister. Nun zu einem neuen Problem..... Ich lasse zwei gelbe Kreise folgendermaßen durch das Erdgeschoss meiner "map" laufen:
Delphi-Quellcode:
Nun würde ich gern eine Kollisionskontrolle benutzen, damit die zwei Kreise nicht überall langlaufen können. Ihr müsst euch das so vorstellen, dass ich die Draufsicht einer Schule (Erdgeschoss) mit Canvas gezeichnet habe und nun nicht will, dass die Spielfigur die Wände (Rectangles) übermalt. Sprich, wie realisiere ich es, dass die Spielfigur nicht über ein angegebenen Rechteck "drüber" laufen kann.
rocedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin{of procedure} with Image1.Canvas do begin{of controls} case Key of VK_LEFT: begin pen.color:=cl3DLight; brush.color:=cl3DLight; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Grosx1:=Grosx1-5; Grosx2:=Grosx2-5; Kleinx1:=Kleinx1-5; Kleinx2:=Kleinx2-5; pen.color:=clblack; brush.color:=clyellow; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Key := 0; end; VK_RIGHT: begin pen.color:=cl3DLight; brush.color:=cl3DLight; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Grosx1:=Grosx1+5; Grosx2:=Grosx2+5; Kleinx1:=Kleinx1+5; Kleinx2:=Kleinx2+5; pen.color:=clblack; brush.color:=clyellow; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Key := 0; end; VK_UP: begin pen.color:=cl3DLight; brush.color:=cl3DLight; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Grosy1:=Grosy1-5; Grosy2:=Grosy2-5; Kleiny1:=Kleiny1-5; Kleiny2:=Kleiny2-5; pen.color:=clblack; brush.color:=clyellow; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Key := 0; end; VK_DOWN: begin pen.color:=cl3DLight; brush.color:=cl3DLight; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Grosy1:=Grosy1+5; Grosy2:=Grosy2+5; Kleiny1:=Kleiny1+5; Kleiny2:=Kleiny2+5; pen.color:=clblack; brush.color:=clyellow; ellipse(Grosx1,Grosy1,Grosx2,Grosy2); ellipse(Kleinx1,Kleiny1,Kleinx2,Kleiny2); Key := 0; end;{of controls} end;{of procedure} Gruß Tobias :stupid: |
Re: 2-D Adventure programmieren
Hi,
Aufgrund von mangelnder Zeit (muss jetzt gleich weg) kann ich dir keine Antwort auf deine aktuelle Frage geben aber ich finde es ehrlichgesagt einfacher so Sachen mit Andorra2D oder DelphiX zu machen. Natürlich ist es mit Canvas möglich aber einfacher ist es meiner Meinung nach mit einer dieser beiden Engines. Denn da wird dir z.B. auch dieses Kollisionsproblem weitgehenst abgenommen ;) Gruß Neutral General |
Re: 2-D Adventure programmieren
Huhu :o
Danke für deine rasche Antwort, allerdings war es so geplant, erstmal mit Canvas alles zu realisieren. Hier wurde im Thread ja schon öfters diese Möglichkeit erwähnt, allerdings wollte ich mich zu Anfang dieses Projekts nicht noch lange in Andorra und Co einlesen. Vielleicht hat ja noch jemand anderes eine Idee.... :P |
Re: 2-D Adventure programmieren
Auf die Schnelle fällt mir ein, dass Du die Eckpunkte mit PtInRect daraufhin überprüfen könntest, ob sie im Rechteck des Hindernisses liegen.
|
Re: 2-D Adventure programmieren
Da ich noch ein ziemlicher Neuling bin, könntest du mir ein kleines Beispiel geben, welches diese Funktion veranschaulicht ??
|
Re: 2-D Adventure programmieren
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var R: TRect; //das Hindernis Test: TRect; //die Spielfigur procedure ShowStatus; begin //ich vergleiche nur mal die linke obere Ecke if PtInRect(R,Test.TopLeft) then ShowMessage('Kollision') else ShowMessage('Freie Bahn'); end; begin //das Hindernis mal an Position 10,10 mit Höhe und Breite 90 definieren R := Rect(10,10,100,100); //2 Beispiele Test := Rect(10,101,100,200); ShowStatus; Test := Rect(10,90,100,190); ShowStatus; end; |
Re: 2-D Adventure programmieren
Danke Dir :-D
Nun werd ich mal ein bissl rumbasteln und versuchen, es in mein Programm einzubauen... :???: gruß tobias |
Re: 2-D Adventure programmieren
Liste der Anhänge anzeigen (Anzahl: 2)
Mh, irgendwie komme ich nicht so recht weiter :cry:
Ich hänge mal den Code dran, und wer mag, schaut sich das mal an :roll: Ich würde gern realisieren, dass der Kreis nicht in ein vorgegebenes Rechteck wandern kann.... Tobias |
Re: 2-D Adventure programmieren
Ich hab mal paar Functions ausgegraben, die einem bei solchen Sachen recht nützlich sind:
Delphi-Quellcode:
Gruß :)
function PointInRect(const Point: TPoint; const Rect: TRect): Boolean;
begin Result := (Point.X >= Rect.Left) and (Point.X <= Rect.Right) and (Point.Y >= Rect.Top) and (Point.Y <= Rect.Bottom); end; function RectInRect(const Rect1, Rect2: TRect): Boolean; begin Result := (Rect1.Left >= Rect2.Left) and (Rect1.Right <= Rect2.Right) and (Rect1.Top >= Rect2.Top) and (Rect1.Bottom <= Rect2.Bottom); end; function OverlapRect(const Rect1, Rect2: TRect): Boolean; begin Result := (Rect1.Left < Rect2.Right) and (Rect1.Right > Rect2.Left) and (Rect1.Top < Rect2.Bottom) and (Rect1.Bottom > Rect2.Top); end; function PointInCircle(PPos,CPos: TPoint; R: integer): Boolean; begin Result := (PPos.X - CPos.X)*(PPos.X - CPos.X)+(PPos.Y - CPos.Y)*(PPos.Y - CPos.Y)<= R*R; end; function CircleInCircle(C1Pos,C2Pos: TPoint; R1,R2:Integer): Boolean; begin Result := (C1Pos.X - C2Pos.X)*(C1Pos.X - C2Pos.X)+(C1Pos.Y - C2Pos.Y)*(C1Pos.Y - C2Pos.Y) <= (R1+R2)*(R1+R2); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 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