Schuss Aufprall-Ort (Schnittpunkt)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Iguan

Betreff: Schuss Aufprall-Ort (Schnittpunkt)

BeitragDi, März 28, 2006 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallöchen leute!

Ich bin jetzt schon eine Weile am gleichen Problem:

Ich habe einen Schuss in einem Type.
Den bewege ich so:
Code: [AUSKLAPPEN]

  Schuss\X# = Schuss\X# - Sin(Schuss\IstWinkel#) * Schuss\Geschw#
  Schuss\Y# = Schuss\Y# - Cos(Schuss\IstWinkel#) * Schuss\Geschw#


die Hindernisse, wo der Schuss aufschlagen kann sind in meinem Spiel alles Rechtecke. Nun bräuchte ich die genauen Koordinaten, wo der Schuss auf dem Rechteck aufschlägt.
Problem: Der Schuss kann eine Geschwindigkeit von über 20 Pixel pro Durchlauf haben; somit fällt die Methode aus, einfach mit ImageRectCollide auf Kollisionen zu prüfen, und dann die Schuss-Koordinaten "merken", weil so dünne Rechtecke einfach "durchschossen" werden.

Ich habe hier im Forum mal die Function LineRectIntersect gefunden, aber bin irgendwie damit nicht weiter gekommen... Rolling Eyes


kennt ihr mein Problem? Könnt ihr mir helfen?
vielen Dank schon im voraus!!

Iguan
[/syntax]

BladeRunner

Moderator

BeitragDi, März 28, 2006 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Anhand der Start- und End-Koordinaten deines Schusses in jedem Schleifendurchlauf lässt sich die Steigung der Flugbahn berechnen (siehe Geradengleichung).
Daraus lässt sich der Schnittpunkt ermitteln. Da du eh in Types speicherst könntest du alternativ auch die Steigung in einem Field gespeichert halten.
(Achtung, Sonderfälle! Senkrechte Flugbahnen haben keine definierte Steigung, da hier einfach die x für alle y konstant bleibt.)

alternativ könntest du natürlich auch eine Tabelle mit den Steigungen für jeden Winkel anlegen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Iguan

BeitragDi, März 28, 2006 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine schnelle Antwort!

Auf diese Weise habe ich es bereits versucht, bin aber wegen meinem schlechten Mathe-Wissen gescheitert!
bisher habe ich folgendes:

Code: [AUSKLAPPEN]

Graphics 640,480,32,2

L1X# = 30
L1Y# = 40
L2X# = 580
L2Y# = 300

RBreite = 50
RHoehe = 80


SetBuffer BackBuffer()
Repeat
  m# = (L2Y#-L1Y#)/(L2X#-L1X#)
  b# = L1Y# - m# * L1X#
  x# = (MouseY()-b#)/m#
  y# = m# * MouseX() + b#

  Cls
  Color 255,255,255
  Line L1X,L1Y,L2X,L2Y
  Color 255,255,0
  Rect MouseX(),MouseY(),RBreite, RHoehe
  Color 0,255,0
  Line 0,Y#,640,Y#
  Line X#,0,X#,480
 
  Text 10,10,"m = " + m#
  Flip
Until KeyHit(1)


vielleicht kannst du mir Nachhilfestunden in Mathe geben Wink
damit ich den genauen Schnittpunkt habe?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group