Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 2-D Adventure programmieren (https://www.delphipraxis.net/99156-2-d-adventure-programmieren.html)

MarquiseDeSade 7. Sep 2007 18:21


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

Adrian112 7. Sep 2007 18:26

Re: 2-D Adventure programmieren
 
Ich denke, dass Canvas da schon reichen würde, doch trozdem würde ich dir Andorra 2d / OpenGL empfehlen.

MarquiseDeSade 7. Sep 2007 18:31

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.... :???:

DeddyH 7. Sep 2007 18:57

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: )

Nikolas 8. Sep 2007 09:12

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.

Die Muhkuh 8. Sep 2007 09:17

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 Hier im Forum suchenOffScreenBitmap in den Raum.

Liebe Grüße,

Manuel :hi:

wicht 8. Sep 2007 09:27

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.

DeddyH 8. Sep 2007 11:58

Re: 2-D Adventure programmieren
 
Zitat:

Zitat von Die Muhkuh
Wegen dem Flackern bei Canvas werfe ich einfach mal ein Suche in der Delphi-PRAXiS OffScreenBitmap in den Raum.

Das hatte ich mit dem Puffern gemeint ;)

P.S.: Herzlichen Glückwunsch nachträglich :cheers: :party:

Die Muhkuh 8. Sep 2007 13:14

Re: 2-D Adventure programmieren
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von Die Muhkuh
Wegen dem Flackern bei Canvas werfe ich einfach mal ein Suche in der Delphi-PRAXiS OffScreenBitmap in den Raum.

Das hatte ich mit dem Puffern gemeint ;)

Ich wollte ihm nur ein genaues Stichwort geben :tongue:

Zitat:

P.S.: Herzlichen Glückwunsch nachträglich :cheers: :party:
Danke schön :party:

MarquiseDeSade 9. Sep 2007 13:48

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:

SirThornberry 9. Sep 2007 13:56

Re: 2-D Adventure programmieren
 
dein vorhaben ist mit canvas ohne probleme möglich. auch ohne Flackern und mit ordentlicher Performance.

MarquiseDeSade 29. Nov 2007 19:25

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:
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}
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.

Gruß
Tobias :stupid:

Neutral General 29. Nov 2007 19:31

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

MarquiseDeSade 29. Nov 2007 19:44

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

DeddyH 29. Nov 2007 19:49

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.

MarquiseDeSade 29. Nov 2007 19:58

Re: 2-D Adventure programmieren
 
Da ich noch ein ziemlicher Neuling bin, könntest du mir ein kleines Beispiel geben, welches diese Funktion veranschaulicht ??

DeddyH 29. Nov 2007 20:06

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;

MarquiseDeSade 29. Nov 2007 20:18

Re: 2-D Adventure programmieren
 
Danke Dir :-D

Nun werd ich mal ein bissl rumbasteln und versuchen, es in mein Programm einzubauen... :???:

gruß
tobias

MarquiseDeSade 29. Nov 2007 23:23

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

Progman 29. Nov 2007 23:48

Re: 2-D Adventure programmieren
 
Ich hab mal paar Functions ausgegraben, die einem bei solchen Sachen recht nützlich sind:
Delphi-Quellcode:
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;
Gruß :)


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