Frage zu Float-Werten
Verfasst: 28.09.2004 14:28
Also es ist kein wirkliches Problem nur es scheint sehr merkwürdig zu sein. Wie man an meinem Kollisiongebastel für ein Jump&Run sieht erzeugt PB bei den Floatvariablen paar Stellen hinter dem Komma ungenauigkeiten bzw. Fehler(bin mir nicht sicher ob das ein Fehler ist).
Wie kommt es zu diesen Fehlerstellen?
Wie kommt es zu diesen Fehlerstellen?
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"J&R-Kollision v2.0")
;Spielerboxposition
Global boxx.f
Global boxy.f
;Alte Spielerposition
Global olposx.f
Global olposy.f
;Kollisionstyp auf X/Y
Global coltypex.l
Global coltypey.l
;Fallgeschwindigkeit
Global fallspeed.f
;Kollision allgemein
Global switch.b
boxx = 200
boxy = 200
fallspeed = 4.0
;-Hauptschleife
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_left) ;Nach Links laufen
boxx - 2.1
If boxx < 0
boxx = 0
EndIf
EndIf
If KeyboardPushed(#PB_Key_right) ;Nach Rechts laufen
boxx + 2.1
If boxx > 784
boxx = 784
EndIf
EndIf
If KeyboardPushed(#PB_Key_up) ;Springen
fallspeed = -2.0
EndIf
If fallspeed < 4.0 ;damit fallspeed auch wieder auf den standart-Wert zurückkehrt
fallspeed + 0 .1
EndIf
boxy + fallspeed ;fallspeed auf boxy aufaddieren damit eine Art von Schwerkraft besteht
;Damit die Spielerbox nixht aus dem Bild wandern kann
If boxy < 0
boxy = 0
EndIf
If boxy > 468
boxy = 468
EndIf
;-Kollisionsroutine
If boxx > 352 And boxx < 416 And boxy > 252 And boxy < 316 ;Abfrage ob die Spielerbox überhaupt mit der Kollisionsbox kollidiert
If olposx =< 352 ;Kollision von links
boxx = 352
coltypex = 1
EndIf
If olposx => 416 ;Kollision von rechts
boxx = 416
coltypex = 2
EndIf
If olposy =< 252 ;Kollision von oben
boxy = 252
coltypey = 1
EndIf
If olposy => 316 ;Kollision von unten
boxy = 316
coltypey = 2
fallspeed = 4.0 ;Wenn die Box von unten kollidiert dann geht der Fallspeed sofort auf standart
EndIf
switch = 1 ;Kollision algemein
Else
;Zurücksetzen der Kollision und der Typen
switch = 0
coltypex = 0
coltypey = 0
EndIf
; Generieren der Alten Koordinaten der Spielerbox für die Kolisionstypenbestimmung
olposx = boxx
olposy = boxy
;-Grafische Ausgabe
StartDrawing(ScreenOutput())
Box(boxx,boxy,32,32,RGB(154,255,101)) ; Die Spieler Box
Box(0,500,800,100,RGB(0,0,0)); Der Boden
If switch = 0
Box(384,284,32,32,RGB(255,255,0)) ; Kollisionsbox ohne Kollision
Else
Box(384,284,32,32,RGB(255,0,0)) ; Kollisionsbox mit Kollision
EndIf
;Ausgabe der Variablen
DrawingMode(1)
FrontColor(255,255,255)
Locate(0,0)
DrawText("boxx = "+StrF(boxx,8))
Locate(0,16)
DrawText("boxy = "+StrF(boxy,8))
Locate(0,32)
DrawText("olposx = "+StrF(olposx,8))
Locate(0,48)
DrawText("olposy = "+StrF(olposy,8))
Locate(0,64)
DrawText("collision = "+Str(switch))
Locate(0,80)
DrawText("coltypex = "+Str(coltypex))
Locate(0,96)
DrawText("coltypey = "+Str(coltypey))
StopDrawing()
;-Auf Bildschrim darstellen und löschen des Buffers
FlipBuffers()
ClearScreen(10,30,100)
Until KeyboardPushed(#PB_Key_Escape) ;Aus die Maus
CloseScreen()
End ;Schluß mit lustig