Bei zu schneller Mausbewegung passiert irgendwas komisches..
Verfasst: 27.12.2004 21:19
Ich bin gerade dabei, ein Programm zu schreiben, welches elektrische Felder optisch darstellen kann. Aktuell steuert die Maus immer eine der zunächst drei vorhandenen Ladungen. Alles funktioniert gut nur wenn ich die Maus nicht zu schnell bewege. Wenn ich es jedoch tue, dann gibts irgendein Problem und die Mausbewegung wird nicht mehr erkannt.
Vielleicht könnt ihr mir helfen.
Hier der Programmcode (die Maus wird in den letzten Programmzeilen angesprochen):
Die Prozedur "doit" rendert so zu sagen ein einzelnes Bild auf den Bildschirm.
Außerdem hab ich das Problem, dass ab und zu der Fensterrahmen oben kurz zu sehen ist.
Vielleicht könnt ihr mir helfen.
Hier der Programmcode (die Maus wird in den letzten Programmzeilen angesprochen):
Code: Alles auswählen
InitSprite()
InitMouse()
InitKeyboard()
Global PI.f
PI = 3.14159265
#width = 320
#height = 240
Global raster.b
raster = 2
Global drawRaster.b
drawRaster = 1
Global drawColor.b
drawColor = 1
Global AnzahlLadungen.b
AnzahlLadungen = 3
Dim Ladungen.f(AnzahlLadungen-1, 3-1)
Ladungen(0,0) = 200
Ladungen(0,1) = 150
Ladungen(0,2) = -1
Ladungen(1,0) = 250
Ladungen(1,1) = 30
Ladungen(1,2) = 1
Ladungen(2,0) = 100
Ladungen(2,1) = 100
Ladungen(2,2) = 1
Procedure HSBtoRGB (h.f, s.f, b.f)
If h >= 0 And h < 60/360.0
R = b*255
G = (1-s*(1-(h/(60/360.0))))*b*255
B = (1-s)*b*255
Else
If h >= 60/360.0 And h < 120/360.0
R = (1-s*( (h-(60/360.0))/(60/360.0) ))*b*255
G = b*255
B = (1-s)*b*255
Else
If h >= 120/360.0 And h < 180/360.0
R = (1-s)*b*255
G = b*255
B = (1-s*(1-( (h-2*(60/360.0))/(60/360.0) )))*b*255
Else
If h >= 180/360.0 And h < 240/360.0
R = (1-s)*b*255
G = (1-s*( (h-3*(60/360.0))/(60/360.0) ))*b*255
B = b*255
Else
If h >= 240/360.0 And h < 300/360.0
R = (1-s*(1-( (h-4*(60/360.0))/(60/360.0) )))*b*255
G = (1-s)*b*255
B = b*255
Else
R = b*255
G = (1-s)*b*255
B = (1-s*( (h-5*(60/360.0))/(60/360.0) ))*b*255
EndIf
EndIf
EndIf
EndIf
EndIf
ProcedureReturn RGB(R, G, B)
EndProcedure
Dim Punkt.f(2-1)
Procedure getPoint(x.w, y.w)
XX.f = 0
YY.f = 0
nenner.f
For i=0 To AnzahlLadungen-1
nenner = Pow( Pow( (x-Ladungen(i,0))*(x-Ladungen(i,0))+(y-Ladungen(i,1))*(y-Ladungen(i,1)), 0.5), 3)
If nenner > 0
XX = XX+(Ladungen(i,2)*(x-Ladungen(i,0)))/nenner
YY = YY+(Ladungen(i,2)*(y-Ladungen(i,1)))/nenner
Else
XX = XX+1
YY = YY+1
EndIf
Next
Punkt(0) = Pow(XX*XX+YY*YY, 0.5)
If XX > 0 And YY > 0
Punkt(1) = ATan(YY/XX)
Else
If XX < 0 And YY > 0
Punkt(1) = ATan(YY/XX)+PI
Else
If XX < 0 And YY < 0
Punkt(1) = ATan(YY/XX)+PI
Else
If XX > 0 And YY < 0
Punkt(1) = ATan(YY/XX)+2*PI
Else
If XX > 0 And YY = 0
Punkt(1) = 0
Else
If XX = 0 And YY > 0
Punkt(1) = PI/2
Else
If XX < 0 And YY = 0
Punkt(1) = PI
Else
Punkt(1) = 3*PI/2
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure doit()
If drawRaster = 1
max.f
max = 0.1
direction.f
direction = 0
saturation.f
brightness.f
y = 0
While y < #height
x = 0
While x < #width
getPoint(x, y)
brightness = Pow(Punkt(0)/max, 0.25)
If brightness > 1
brightness = 1
EndIf
If drawColor = 1
direction = Punkt(1)/(2*PI)
saturation = 1
Else
saturation = 0
EndIf
Box(x, y, raster, raster, HSBtoRGB(direction, saturation, brightness))
x=x+raster
Wend
y=y+raster
Wend
EndIf
EndProcedure
OpenScreen(#width, #height, 32, "Felder")
doit()
Repeat
ExamineMouse()
Ladungen(0,0) = MouseX()
Ladungen(0,1) = MouseY()
StartDrawing(ScreenOutput())
doit()
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(1)
End
Außerdem hab ich das Problem, dass ab und zu der Fensterrahmen oben kurz zu sehen ist.