Towerdefense Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Ronon_Dex

Betreff: Towerdefense Problem

BeitragSa, Jan 07, 2012 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Community,

Ich habe vor ein kleines Towerdefense spiel zu erstellen,
nur hänge ich da an einem Problem.
Ich weis nicht, wie ich Türme so hinbekomme, dass sie auf die Feinde feuern die in einem bestimmten Radius an den Türmen vorbei laufen.

Ich denke das ihr mir da helfen könnt Smile

mfg
Ronon

ozzi789

BeitragSa, Jan 07, 2012 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag Ronon

Naja mit Stift, Papier und Motivation ist da so einiges möglich Wink
Ich will dir trotzdem auf die Sprünge helfen.

Hier eine Funktion, welche von 2 Koordinaten die Luftlinie(distanz) berechnet:

BlitzBasic: [AUSKLAPPEN]
Print get_distance(200,200,300,300)


Function get_distance(x1,y1,x2,y2)
distx=Abs(x1-x2)
disty=Abs(y1-y2)
;Pythagoras
distance=Sqr((distx*distx)+(disty*disty))

Return distance
End Function



Mfg Ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

skey-z

BeitragSa, Jan 07, 2012 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundlagen der Trigonometrie: Satz des Pythagoras

dist = sqr(x²+y²)
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Tankbuster

BeitragSa, Jan 07, 2012 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem http://de.wikipedia.org/wiki/Satz_des_Pythagoras kannst du den Abstand zwischen Feind und Turm berechnen, und wenn der Abstand zum Beispiel kleiner als 10 ist, einen Schuss abfeuern. In Blitz3D kannst du den abstand zwischen Meshes mittels EntityDistance herrausfinden.

Ich hoffe, das hat dir jetzt geholfen
Twitter
Download Jewel Snake!
Windows|Android

ZEVS

BeitragSa, Jan 07, 2012 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Abstandsberechnung in einem zweidimensionalen Raum geht durch
Code: [AUSKLAPPEN]
Distanz = Sqr((x1-x2)^2 + (y1-y2)^2)

(einfache Anwendung des Satzes des Pythagoras).
Wie auch immer, am besten geht das durch Vektorrechnung. Ein Vektor ist eine Art Pfeil in der Mathematik, angegeben durch die x- und y-Abstand. In diesem Fall zeigt er vom Turm zum Feind. Das geht wie folgt:
Code: [AUSKLAPPEN]
VektorX = FeindX - TurmX
VektorY = FeindY - TurmY
Distanz = Sqr(VektorX*VektorX + VektorY*VektorY)

Hierdurch wird in der Distanzberechnung die Potenz weggelassen, was Rechenzeit spart. Diese kannst du einfach mit dem Turmradius vergleichen.
Wenn du jetzt ein Geschoss vom Turm zum Feind fliegen lassen willst, musst du nur den Vektor addieren (also x = x + VektorX; y = y + VektorY). Dummerweise ist das Geschoss dann in einem Frame da, was sehr unübersichtlich ist. Deshalb muss man die Länge des Vektors verkürzen. Erstmal bringen wir sie auf eins, was die Mathematiker "normalisieren" nennen:
Code: [AUSKLAPPEN]
VektorX = VektorX / Distanz
VektorY = VektorY / Distanz

Wenn wir ihn jetzt z.B. auf die Länge 3 bringen wollen, rechnen wir
Code: [AUSKLAPPEN]
VektorX = VektorX * 3
VektorY = VektorY * 3


Diesen Vektor wie oben angegeben immer zum Geschoss addieren und fertig.

Es gab auch letztlich einen BCC zu diesem Thema...

ZEVS
 

Ronon_Dex

BeitragSa, Jan 07, 2012 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen dank,
ich denke ich werde das Problem mit eurer Hilfe hinbekommen.
Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group