angesprochenden Zeitsteuerung

Code: Alles auswählen
#b = 3.14159265/180
#PixperSec = 100
; Berechnet den Sichtpunkt beim Winkel (w), wenn sich die Umgebung (Px,Py) um (x,y) dreht, abei ist (sw) die Sichtweite, ob es angezeigt wird
Global SichtPunkt_X.f, SichtPunkt_Y.f
Procedure SichtPunkt(x.f, y.f, w.f, Px.f, Py.f, sw.l)
Protected r.f, t.f
If Abs(x-Px) < sw And Abs(y-Py) < sw :
Wert = 1
r = Sqr(Pow(x-Px,2)+Pow(y-Py,2))
t = ATan((y-Py)/(x-Px))/#b
If x-Px < 0 : t = t + 180 : EndIf
If x-Px = 0 :
If (y-Py)<0 : t = -90 : EndIf
If (y-Py)>0 : t = 90 : EndIf
EndIf
SichtPunkt_X = Cos((t-w-270)*#b)*r
SichtPunkt_Y = Sin((t-w-270)*#b)*r
EndIf
ProcedureReturn Wert
EndProcedure
; Gibt den errechneten relativen X-Wert zum SichtPunkt zurück
Procedure SichtX()
ProcedureReturn SichtPunkt_X
EndProcedure
; Gibt den errechneten relativen Y-Wert zum SichtPunkt zurück
Procedure SichtY()
ProcedureReturn SichtPunkt_Y
EndProcedure
;Hier das Testprogramm dazu :
InitKeyboard()
InitMouse()
InitSprite()
Structure Punkt
x.f
y.f
EndStructure
Global NewList Punkt.Punkt()
Procedure AddPunkt(x, y)
AddElement(Punkt())
Punkt()\x = x
Punkt()\y = y
EndProcedure
For n = 1 To 1000 :
AddPunkt(Random(512)+256, Random(384)+192)
Next n
OpenScreen(1024,768,32,"TEST")
x.f = 512
y.f = 384
w.f = 0
Repeat
FrameTime = Timer - ElapsedMilliseconds()
Timer = ElapsedMilliseconds()
ClearScreen(0)
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(RGB(255,255,255))
ResetList(Punkt())
While NextElement(Punkt())
SichtPunkt(x, y, w, Punkt()\x, Punkt()\y, 1000)
Circle(512+SichtX(),384+SichtY(),2)
Wend
Circle(512,384,5)
StopDrawing()
FlipBuffers()
ExamineMouse()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_S)
x = x + Cos(w*#b) * #PixPerSec * FrameTime / 1000
y = y + Sin(w*#b) * #PixPerSec * FrameTime / 1000
EndIf
If KeyboardPushed(#PB_Key_W)
x = x - Cos(w*#b) * #PixPerSec * FrameTime / 1000
y = y - Sin(w*#b) * #PixPerSec * FrameTime / 1000
EndIf
If KeyboardPushed(#PB_Key_D)
w = w - #PixPerSec * FrameTime / 1000
EndIf
If KeyboardPushed(#PB_Key_A)
w = w + #PixPerSec * FrameTime / 1000
EndIf
Until KeyboardPushed(#PB_Key_Escape)