Matheproblem - Verhältnis von Einheiten
Übersicht BlitzBasic Beginners-Corner
funkmaster5000Betreff: Matheproblem - Verhältnis von Einheiten |
Sa, Okt 28, 2017 6:40 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Okt 28, 2017 9:57 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Okt 28, 2017 14:24 Antworten mit Zitat |
|
---|---|---|
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! |
||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group