AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Geschwindigkeit umkehren

Ein Thema von DelphiUser1 · begonnen am 11. Nov 2012 · letzter Beitrag vom 21. Nov 2012
Antwort Antwort
DelphiUser1

Registriert seit: 15. Sep 2012
56 Beiträge
 
#1

Geschwindigkeit umkehren

  Alt 11. Nov 2012, 00:21
Guten Abend alle miteinander.
Momentan arbeite ich an einem kleinen Spiel, in dem es darum geht, Kreise zu vernichten. Diese Kreise werden mit einem timer erzeugt (array of TKreis).
Sie haben eine grundgeschwindigkeit von speedx=5 und speedy=5. Es gibt Objectives und Weapons, unter Objectives findet man unter anderem eine Kiste. Ich bewege sie in dem ich ihr einfach die mausposition zuweise. Das Problem ist das ich nicht weiß wie ich eine gute Kollision hinbekomme. Kollidieren die Kiste und ein kreis wird der kreis momentan in die selbe richtung aus der er kam zurückgeschleudert. ich will aber einfallswinkel gleich ausfallswinkel. Was ich bisher ausprobiert habe (ohne Erfolg):

Delphi-Quellcode:
if InterSectRect(StubRect,Kreis[b].BoundsRect,Image3.BoundsRect) and Image3.Visible then
    begin
      Kreis[b].speedx := -(Kreis[b].speedx);
      Kreis[b].speedy := -(Kreis[b].speedy);
      end;
    end;
und:


Delphi-Quellcode:
if InterSectRect(StubRect,Kreis[b].BoundsRect,Image3.BoundsRect) and Image3.Visible then
    begin
      Kreis[b].speedx := -Abs(Kreis[b].speedx);
      Kreis[b].speedy := -Abs(Kreis[b].speedy);
      end;
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Geschwindigkeit umkehren

  Alt 11. Nov 2012, 00:27
Wenn du nur die Speed-Werte umkehrst, ist es ja klar, dass der Kreis in exakt die selbe Richtung zurückfliegt, aus die er kam.

Was du noch brauchst ist eine Feststellung aus welcher Richtung die Kollision kommt und musst entsprechend darauf reagieren.

Von oben und unten: Y = -Y
Von links und rechts: X = -X

PS: Ich würde empfehlen, dass du dir auch mal Andorra 2D anschaust. Die VCL (TImage, ...) als Sprites zu verwenden ist auf lange Frist keine effiziente Lösung.
  Mit Zitat antworten Zitat
DelphiUser1

Registriert seit: 15. Sep 2012
56 Beiträge
 
#3

AW: Geschwindigkeit umkehren

  Alt 11. Nov 2012, 00:32
ja ich weiß, das ist mir auch bewusst, nur ich wusste nicht wie es richtig geht.
Wieso soll ich kein Image verwenden?
Ist schon etwas später, wie genau stellst du dir die Abfrage vor. ich hatte überlegt man könnte es mit dem Satz des Pythagoras machen, aber gibt es nicht noch was einfacheres?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.332 Beiträge
 
Delphi 12 Athens
 
#4

AW: Geschwindigkeit umkehren

  Alt 11. Nov 2012, 01:14
Im Prinzip ist es einfache Mathematik.

Du hast 2 Vektoren, der aufeinandertreffenden Objekte.
Daraus kannst du eine Aufschlagebene berechnen, wie die Kräfte aufeinandertreffen.
Und darüber berechnest du dann jeweils die Winkel, wie es weitergeht.



Aber im Prinzip kommt dann noch mehr mit rein, wenn man es genau machen will.
- die jeweilige Geschwindigkeit der Objekte
- und die Größe/Masse
(also ob z.B. Kraft von einem Objekt auf das Andere übertragen wird)
- und teilweise auch die Form der Objekte, denn jenachdem wie und an welche Stelle der Aufschlag geschieht, kann sich das auch noch auswirken
Angehängte Grafiken
Dateityp: png Unbenannt.png (9,7 KB, 8x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Geschwindigkeit umkehren

  Alt 11. Nov 2012, 01:35
Ist schon etwas später, wie genau stellst du dir die Abfrage vor. ich hatte überlegt man könnte es mit dem Satz des Pythagoras machen, aber gibt es nicht noch was einfacheres?
Du kennst doch die Dimensionen deiner Objekte? Also X, Y, Höhe, Breite? Daraus kannst du bestimmen, von welcher Richtung das Quellobjekt kommt.

Code:
Wenn Kollision Dann
  Wenn Quellobjekt.Y + Quellobjekt.Höhe >= Zielobjekt.Y Dann
    Kollisionsrichtung = Von oben
  Wenn Quellobjekt.X + Quellobjekt.Breite >= Zielobjekt.X Dann
    Kollisionsrichtung = Von links
...
Nur als grobes Beispiel.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Geschwindigkeit umkehren

  Alt 11. Nov 2012, 03:04
Nennt sich dann (Voll) Elastischer Stoß
"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
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Geschwindigkeit umkehren

  Alt 11. Nov 2012, 04:07
Erinnert mich fast an http://einklich.net/rec/eins.htm
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:31 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