AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 2-D Adventure programmieren
Thema durchsuchen
Ansicht
Themen-Optionen

2-D Adventure programmieren

Ein Thema von MarquiseDeSade · begonnen am 7. Sep 2007 · letzter Beitrag vom 29. Nov 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: 2-D Adventure programmieren

  Alt 9. Sep 2007, 13:56
dein vorhaben ist mit canvas ohne probleme möglich. auch ohne Flackern und mit ordentlicher Performance.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 19:25
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
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 19:31
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 19:44
Huhu

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....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#15

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 19:49
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 19:58
Da ich noch ein ziemlicher Neuling bin, könntest du mir ein kleines Beispiel geben, welches diese Funktion veranschaulicht ??
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#17

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 20:06
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 20:18
Danke Dir

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

gruß
tobias
  Mit Zitat antworten Zitat
Benutzerbild von MarquiseDeSade
MarquiseDeSade

Registriert seit: 18. Apr 2007
Ort: Mainz
55 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 23:23
Mh, irgendwie komme ich nicht so recht weiter

Ich hänge mal den Code dran, und wer mag, schaut sich das mal an

Ich würde gern realisieren, dass der Kreis nicht in ein vorgegebenes Rechteck wandern kann....

Tobias
Miniaturansicht angehängter Grafiken
eg_489.jpg  
Angehängte Dateien
Dateityp: rar projektarbeit_154.rar (220,1 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#20

Re: 2-D Adventure programmieren

  Alt 29. Nov 2007, 23:48
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ß
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz