Matheproblem - Verhältnis von Einheiten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

funkmaster5000

Betreff: Matheproblem - Verhältnis von Einheiten

BeitragSa, Okt 28, 2017 6:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich stehe leider total auf dem Schlauch. Ich programmiere an einem einfachen Arcade American Football Spiel. Ich benutze eine 3D-Engine, damit ich freier bei der Kamerasteuerung bin. Das Spielfeld lasse ich durch einzelne Tiles erstellen, diese entsprechen der klassischen Blitz3D Größe von 1x1x1. Danach skaliere ich das Spielfeld 8-fach, außer auf der Y-Ebene damit die Proportionen stimmen.

Beim American Football spielt, ganz einfach gesagt, die Überbrückung von Yards/Metern durch Pass- oder Laufspiel die wichtigste Rolle und ich muss daher ermitteln, wie viel Strecke durch einen Spieler oder Pass zurückgelegt wurde. Ein Tile auf meinem Feld stellt 5 Yards/Meter dar und entspricht 8 Einheiten im 3D-Raum.

So sieht das Feld entsprechend von oben betrachtet aus:
https://www.blitzforum.de/upload/file.php?id=13318

Die Spieler können sich mit einer unterschiedlichen Geschwindigkeit bewegen, je nach Typ, zwischen 0.1 und 0.3 Units pro Frame bei 60 FPS.

Wie ermittele ich nun, wie viel virtuelle Yards ein Spieler oder der gepasste Ball zurückgelegt hat? Hier ist das Layout von der Map
Code: [AUSKLAPPEN]
Data 00,00,00,00,00,00,00,00,00,00,00,00,00,00 ;gras
Data 00,00,00,00,00,00,00,00,00,00,00,00,00,00 ;gras
Data 00,00,13,13,13,13,13,13,13,13,13,13,00,00 ;endzone
Data 00,05,10,11,11,11,11,11,11,11,11,12,06,00;endzone
Data 00,05,07,08,08,08,08,08,08,08,08,09,06,00 ;endzone
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;45 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;40 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;35 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;30 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;25 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;20 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;15 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;10 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;5 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;50 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;5 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;10 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;15 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;20 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;25 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;30 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;35 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;40 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;45 yard
Data 00,05,04,01,01,02,01,01,02,01,01,03,06,00 ;00 yard
Data 00,05,10,11,11,11,11,11,11,11,11,12,06,00 ;endzone
Data 00,05,07,08,08,08,08,08,08,08,08,09,06,00 ;endzone
Data 00,00,14,14,14,14,14,14,14,14,14,14,00,00 ;endzone
Data 00,00,00,00,00,00,00,00,00,00,00,00,00,00 ;gras
Data 00,00,00,00,00,00,00,00,00,00,00,00,00,00 ;gras

Midimaster

BeitragSa, Okt 28, 2017 9:57
Antworten mit Zitat
Benutzer-Profile anzeigen
leider gibst Du nur wenige Details bekannt. so kann ich nur raten...


Distanz

Code: [AUSKLAPPEN]
Start=EntityY(Spieler)

...gibt Dir doch die Startposition vor dem Run. Am Ende des Runs gibt...
Code: [AUSKLAPPEN]
Ende=EntityY(Spieler)

...die Endposition zurück. Die Differenz ist die zurückgelegte Y-Tiefe in Blitz3D-Einheiten.
Wenn Du das jetzt mit 5 multipliziert, solltest Du bereits bei korrekten Yards sein.
Code: [AUSKLAPPEN]
Yards=Abs(Start-Ende)*5

Ein Test mit einem Spieler, der von der 0-Yard-Linie starten und bis zur 50-Yard-Linie läuft, wird Gewissheit bringen. Gegebenenfalls kannst Du nach diesem Test einen anderen Faktor als 5 einsetzen. Möglicherweise könnte auch...
Code: [AUSKLAPPEN]
Yards=Abs(Start-Ende)/8*5

... richtig sein wegen der Skalierung.


Position statt Distanz

Wichtig ist, ob deine 0-Yard Linie beim Blitz3D-Ursprung liegt, dann wären die 50-Yard-Linien bei -10 bzw +10. Es könnte aber auch sein, das deine 50-Yard Linie beim Blitz3D-Ursprung liegt, dann wären die 0-Yard-Linie bei +10 und die gegenüberliegende 50-Yard-Linie bei +20.
Code: [AUSKLAPPEN]
YardsPos=EntityY(Spieler)/8*5

bzw
Code: [AUSKLAPPEN]
YardsPos=(EntityY(Spieler)-10)/8*5

positive Ergebnisse sind in der einen Spielfeldhälfte, negative in der anderen.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

funkmaster5000

BeitragSa, Okt 28, 2017 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Midimaster hat Folgendes geschrieben:
leider gibst Du nur wenige Details bekannt. so kann ich nur raten...
(...)


Position statt Distanz

Wichtig ist, ob deine 0-Yard Linie beim Blitz3D-Ursprung liegt, dann wären die 50-Yard-Linien bei -10 bzw +10. Es könnte aber auch sein, das deine 50-Yard Linie beim Blitz3D-Ursprung liegt, dann wären die 0-Yard-Linie bei +10 und die gegenüberliegende 50-Yard-Linie bei +20.
Code: [AUSKLAPPEN]
YardsPos=EntityY(Spieler)/8*5

bzw
Code: [AUSKLAPPEN]
YardsPos=(EntityY(Spieler)-10)/8*5

positive Ergebnisse sind in der einen Spielfeldhälfte, negative in der anderen.

Hallo,

danke für die schnelle Anwort! Ich habe es jetzt so eingerichtet, dass die 50-Yard bzw. Mittellinie auf dem Ursprung liegt und als Referenz benutzt werden kann. Dann funktioniert deine Formel so:

Code: [AUSKLAPPEN]
Local yard_start# = EntityZ(spr_player)
Local yard_end# = 0
Local total_yards# = 0

yard_end = EntityZ(spr_player)
   
total_yards = (yard_start - yard_end) / 8 * 5
   
   If Abs(total_yards) >= 50 Then
      EntityAlpha spr_touchdown,1
   Else
      EntityAlpha spr_touchdown,0
   End If

Vielen Dank!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group