Code-Beispiel
Fadenkreuz auf gedachem Kreis
Möchte man in einem Spiel um einen Spieler ein Fadenkreuz Setzen, welcher auf einem gedachten Kreis wandert, wärend man die Maus bewegt, hilft folgende Berechnung,um dies zu lösen.
Berechreibung im Quelltext
screenres 400, 300, 32
'Spielerparameter
Dim TPlayerPosX as UInteger = 200
Dim TPlayerPosY as UInteger = 150
Dim TCircleRadius as UInteger = 40
'Mausparameter
Dim TMouseR as Integer
Dim TMouseX as Integer
Dim TMouseY as Integer
Dim TMouseB as Integer
'zu berechnender Cursor auf dem Kreis
Dim TCursorX as Integer
Dim TCursorY as Integer
Dim TCursorL as Double
do until InKey() = Chr(27) 'Beim Drücken von "ESC" Schleife verlassen
'Aktuelle Mouseposition abfragen
TMouseR = GetMouse(TMouseX, TMouseY, , TMouseB)
'Wenn Linke Maustate gedrückt, dann Spielerposition neu setzen
If TMouseB = 1 then
TPlayerPosX = TMouseX
TPlayerPosY = TMouseY
End If
'Berechnung ausführen
TCursorL = Sqr(Abs(TMouseX - TPlayerPosX) ^ 2 + Abs(TMouseY - TPlayerPosY) ^ 2) 'Weglänge zwischen Mausposition und Spielerposition
If TCursorL > 0 Then 'SONDERFALL! Wenn die Weglänge 0 ist, dann benötigen wir keine Berechnung, da die Position identisch mit der Maus ist. und sich nciht berechnen lässt
TCursorX = TPlayerPosX + (TMouseX - TPlayerPosX) * TCircleRadius / TCursorL 'Berechnugn für X
TCursorY = TPlayerPosY + (TMouseY - TPlayerPosY) * TCircleRadius / TCursorL 'Berechnung für Y
End If
'Funktionsweise der Berechnung:
'1. Wir berechnen die entfernen von zwischen Maus und dem Spieler.
' Dies machen wir mithilfe des Pythagoras-Satzes. a * a + b * b = c * c -> Wurzel aus c * c -> Weglänge
'2. Wir setzen die Länge zwischen Maus und Spieler in ein Prozentuales Verhältniss zu dem Gewünschten Radius
' Hierbei nutzen wir einen Simplen Prozentsatz.
' Wir kennen die Strecke von SpielerPosition X und der MausPosition X und ziehen beides voneinander ab um einen Abstand (Länge) zu erhalten. (TMouseX - TPlayerPosX)
' Angenommen wir haben SpielerX = 100 und MauseX = 60, dann wäre das ergebniss 40
' Wir möchten den Kreis im Radius von 30 um den Spieler Zeichnen
' Dazu Multiplizieren wir unser ergebniss mit dem gewünschten Radius 40 * 30
' und teilen dies anschliessend durch die Berechnete Länge des Abstandes zwischen Maus und Spielerposition
' damit erhalten wir die neue X Koordinate welche genau auf dem Kreis liegt.
' Anschliessend müssen wir zu diesem Ergebniss die Aktuelle Position des Spielers hinzu addieren.
'Selbes auch mit Y machen
'Zeichnen
ScreenLock() 'Flimmern verhindern
CLS() 'Bildshirm leeren
Circle (TPlayerPosX, TPlayerPosY), 3, &HFF, , , , F 'Aktuelle Spielerposition Zeichnen (Gefüllter Kreis, ROT)
Circle (TPlayerPosX, TPlayerPosY), TCircleRadius, &H00FF00 'Spielerradius (Kreis, GRÜN)
Circle (TCursorX, TCursorY), 3, &HFFFFFF, , , , F 'Berechneter Cursorpunkt (Gefüllter Kreis, WEIS)
Circle (TMouseX, TMouseY), 3, &HFFFF00, , , , F 'Aktuelle Mausposition Zeichnen (Gefüllter Kreis, GELB)
'Aktuelle Berechnungen anzeigen
Locate 1, 1 'Textposition zurücksetzen
Print "Maus: "; Str(TMouseX); " "; Str(TMouseY) 'Aktuelle Mauskoordinaten
Print "Laenge:"; Str(TCursorL) 'Aktuelle Weglänge
Print "Cursor:"; Str(TCursorX); " "; Str(TCursorY) 'Aktuelle Cursorberechnung
ScreenUnLock() 'Flimmern verhindern
'kurz warten um CPU zu schonen
sleep 1, 1 '0,001 Sekunde Warten
loop
screen 0 'Bildschirm wieder schliessen
end 0 'Programm sauber beenden
MfG
TPM
Zusätzliche Informationen und Funktionen |
|
|