AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language 2D Game: Ball an einem Arc abprallen lassen (physikalisch)
Thema durchsuchen
Ansicht
Themen-Optionen

2D Game: Ball an einem Arc abprallen lassen (physikalisch)

Ein Thema von Delphi-Narr · begonnen am 26. Feb 2010 · letzter Beitrag vom 26. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

2D Game: Ball an einem Arc abprallen lassen (physikalisch)

  Alt 26. Feb 2010, 17:20
Hallo, ich bin gerade dabei, ein 2D Spiel zu erstellen. Es soll eine Art Slime-Soccer-Klon werden.
Ich habe einen Timer, der erst prüft, ob die Spielfigur bewegt werden muss und sie dann bewegt und dann die Prozedur "Zeichne" aufruft, die das Ganze dann auf einem Image darstellt. Hier mein bisheriger Quelltext:

Delphi-Quellcode:
var
  Form1: TForm1;
  X1,X2,Y1,Y2,BX,BY: integer;

  W,A,D,I,J,L, Hoch1, Hoch2:Boolean; //Speichern, ob die Tasten gedrückt sind.

implementation



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     // Spieler 1 : W A D
     if Key = 87 then W:=True;
     if Key = 65 then begin A:=True; D:=False; end;
     if Key = 68 then begin D:=True; A:=False; end;
     // Spieler 2 : I J L
     if Key = 73 then I:=True;
     if Key = 74 then begin J:=True; L:=False; end;
     if Key = 76 then begin L:=True; J:=False; end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    // Spieler 1 : W A D
     if Key = 87 then W:=False;
     if Key = 65 then A:=False;
     if Key = 68 then D:=False;
     // Spieler 2 : I J L
     if Key = 73 then I:=False;
     if Key = 74 then J:=False;
     if Key = 76 then L:=False;

     //Spieler 1 : S
     if Key = 83 then Hoch1:=False;
     
     //Spieler 2 : K
     if Key = 75 then Hoch2:=False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     if W then if Y1=Bild.height-30 then Hoch1:=True;
     //Hoch1 bearbeiten
     begin
          if Y1=Bild.height-210 then Hoch1:=False;
          if Hoch1 then
          begin
             Y1:=Y1-2;
             if Y1>Bild.height-190 then Y1:=Y1-2;
          end
          else
          begin
             if Y1<Bild.height-30 then
             begin
             Y1:=Y1+2;
             if Y1>Bild.height-190 then Y1:=Y1+2;
             end;
          end;
     end;

     //Links/rechts Spieler 1 bearbeiten
     if (A) and (X1>0) then
     begin
          //Links
          X1:=X1-3;
     end;
     if (D) and (X1<Bild.width-60) then
     begin
          //Links
          X1:=X1+3;
     end;






     if I then if Y2=Bild.height-30 then Hoch2:=True;
     //Hoch2 bearbeiten
     begin
          if Y2=Bild.height-210 then Hoch2:=False;
          if Hoch2 then
          begin
             Y2:=Y2-2;
             if Y2>Bild.height-190 then Y2:=Y2-2;
          end
          else
          begin
             if Y2<Bild.height-30 then
             begin
             Y2:=Y2+2;
             if Y2>Bild.height-190 then Y2:=Y2+2;
             end;
          end;
     end;

     //Links rechts Spieler 2
     if (J) and (X2>0) then
     begin
          //Links
          X2:=X2-3;
     end;
     if (L) and (X2<Bild.width-60) then
     begin
          //Links
          X2:=X2+3;
     end;
              
     Zeichne;
end;




procedure TForm1.Zeichne;
begin
     Bild.Canvas.Brush.color:=Clwhite;
     Bild.Canvas.Fillrect(Rect(0,0,Bild.width,Bild.height));


     //Spieler 1
     Bild.Canvas.Brush.color:=clnavy;
     Bild.Canvas.Arc(X1,Y1,X1+60,Y1+60,X1+60,Y1+29,X1,Y1+29);
     Bild.Canvas.MoveTo(X1,Y1+28);
     Bild.Canvas.LineTo(X1+60,Y1+28);
     Bild.Canvas.FloodFill(X1+30,Y1+25,clblack,fsborder);
     Bild.Canvas.FloodFill(X1+58,Y1+25,clblack,fsborder);
     Bild.Canvas.FloodFill(X1+2,Y1+25,clblack,fsborder);


     //Spieler 2
     Bild.Canvas.Brush.color:=clmaroon;
     Bild.Canvas.Arc(X2,Y2,X2+60,Y2+60,X2+60,Y2+29,X2,Y2+29);
     Bild.Canvas.MoveTo(X2,Y2+28);
     Bild.Canvas.LineTo(X2+60,Y2+28);
     Bild.Canvas.FloodFill(X2+30,Y2+25,clblack,fsborder);
     Bild.Canvas.FloodFill(X2+58,Y2+25,clblack,fsborder);
     Bild.Canvas.FloodFill(X2+2,Y2+25,clblack,fsborder);


     //Ball

     Bild.Canvas.Brush.color:=clblack;
     Bild.Canvas.Ellipse(BX-10,BY-10,BX+10,BY+10);
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
     Y1:=Bild.height-30;
     X1:=100;
     Y2:=Bild.height-30;
     X2:=600;
end;
Soweit kein Problem. Ich habe jetzt also eine rote und eine blaue Spielfigur, die man bewegen kann und einen Ball der auf dem Canvas hängt.
Jetzt muss ich nur noch den Ball in Bewegung bekommen. Dieser soll physikalisch halbwechs korrekt (Winkel und Geschwindigkeit) von den Spielfiguren abprallen. Außerdem soll er von der Torlatte abprallen (existiert hier noch nicht, soll einfach ein Rechteck sein, was am Bildrand hängt).

Liebe Grüße!
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 17:34
Wolltest du uns nur darüber informieren, oder hast du auch eine Frage dazu?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#3

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 17:46
Zitat von Medium:
Wolltest du uns nur darüber informieren, oder hast du auch eine Frage dazu?
Ich hab auch eine Frage dazu: Wie macht man sowas. ich habe bisher noch keine 2D-Games programmiert, die physikalische Berechnungen benötigen...
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 17:55
Zitat von Delphi-Narr:
Zitat von Medium:
Wolltest du uns nur darüber informieren, oder hast du auch eine Frage dazu?
Wie macht man sowas.
Wie macht man was?
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#5

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 18:09
Zitat von Delphi-Narr:
Jetzt muss ich nur noch den Ball in Bewegung bekommen. Dieser soll physikalisch halbwechs korrekt (Winkel und Geschwindigkeit) von den Spielfiguren abprallen. Außerdem soll er von der Torlatte abprallen (existiert hier noch nicht, soll einfach ein Rechteck sein, was am Bildrand hängt).
  Mit Zitat antworten Zitat
Benutzerbild von Daniela.S
Daniela.S

Registriert seit: 1. Mär 2008
Ort: Niederösterreich
226 Beiträge
 
Delphi XE4 Enterprise
 
#6

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 18:14
Ich nehme einmal an er meint wie man den Abprallwinkel des Balles an einem Halbkreis berechnet.

Hatte auch mal ein Brakeout Spiel geschrieben und dabei mit Vektoren gerechnet. Geht relativ einfach und sowas hat man ja auch irgendwann einmal in der Schule gelernt. Zur Not gibt es Mathe-Seiten im Netz

Allerdings wird ungleich mehr Mathematik erforderlich sein, wenn der Schläger aus einem Halbkreis besteht und keine gerade Linie. Der Einfachheit würde ich den Schläger mal als gerade Linie planen.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 18:15
Trotzdem fehlt Deine Frage: Was ist Dir unklar? Wobei benötigst Du Hilfe?

Fehlen die physikalischen Grundlagen dafür? Oder weißt Du diese und es Du brauchst Hilfe bei der Kodierung?

Du solltest uns schon sagen, wo das Problem ist.
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#8

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 18:27
Mein Problem ist sowohl der Abprallwinkel am Halbkreis, also auch die Unterscheidung zwischen Halbkreis (also Oberseite Schläger) und Gerade( Unterseite Schläger). Außerdem muss ich ja Geschwindigkeit und Schwerkraft mit einberechnen.

Siehe: Slime Soccer

Also wenn man gegen den Ball "läuft" muss dieser auch eventuell hochspringen etc.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 18:57
Was jetzt, Arc oder Halbkreis?

Bei einem Kreis ist die Sache nämlich deutlich einfacher. Du kennst doch sicher den unheimlich schlauen Satz "Einfallswinkel = Ausfallswinkel". Die Winkel (im Anhang als alpha bezeichnet) sind dabei immer relativ zur Achse, auf die die Kugel aufprallt, also hier die Tangente des großen Kreises am Kollisionspunkt. Alles, was du jetzt noch brauchst, ist ein kleines bisschen Trigonometrie...

Und die Schwerkraft stellt auch kein Problem dar... die addierst du einfach nach jedem Schritt zur Geschwindigkeit dazu.
Miniaturansicht angehängter Grafiken
kreis_reflektion_200.png  
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#10

Re: 2D Game: Ball an einem Arc abprallen lassen (physikalisc

  Alt 26. Feb 2010, 19:24
Arc und Halbkreis sind in meinem Quelltext das gleiche. Die runde Seite ist oben, die Gerade verbindet die beiden Endpunkte.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:47 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