Ja, schon wieder ich, teste gerade viel.
Diese Kollisonsabfrage: Das Sprite ist ein 100x80 , 32 bit png
SETSCREEN 640, 480, FALSE
SYSTEMPOINTER TRUE
a=1; LOADSPRITE "c:/test.png", a
WHILE MOUSEAXIS(5) = FALSE
SPRITE a, 300, 200
SPRITE a, 360, 240
coll=0
Colzeit =GETTIMERALL()
WHILE GETTIMERALL()- Colzeit < 1000
IF SPRCOLL (a, 300, 200, a, 360, 240)
coll=coll+1
ENDIF
WEND
PRINT "Kollisionen\Sek.: " + coll, 0, 450
SHOWSCREEN
IF MOUSEAXIS(5) = TRUE THEN Stop=TRUE
WEND
END
Checkt bei mir +- 407.000/Sek. in GlBasic
in BlitzMax:
Graphics 600,480,0
a:timage =LoadImage ("c:/test.png")
Repeat
DrawImage a, 300,200
DrawImage a, 360, 240
coll=0
Colzeit = MilliSecs()
While MilliSecs() - Colzeit < 1000
If ImagesCollide(a,300,200,0,a, 360, 240,0)
coll=coll+1
EndIf
Wend
DrawText "Kollisionen\Sek.: " + coll, 10,400
Flip; Cls
Until MouseHit(3)
Checkt bei mir +- 5.600/Sek. in BlitzMax
Träum ich, oder ist GlBasic bei Kollisonsabfragen wirklich so schnell ?
Lässt man übrigends die Kollisionsabfrage raus, sieht es es andersrum aus.
coll hat dann:
GlBasic 940.000
BlistzBasic 61.000.000
Müsste doch der Gernot was zu wissen!
Hmm... Also Kollisionen sind schnell, da steckt viel Arbeit d'rin.
Aber das andere erklärt sich nicht wirklich...
in GLBasic hast Du eine Zeile mehr:
" IF MOUSEAXIS(5) = TRUE THEN Stop=TRUE"
Aber das sollte's nicht rausreissen.
Entfern' mal die SPRITE/DrawImage-Anweisungen, ob's daran liegt?
Ist doch egal, die Zeit spielt sich in der inneren Schleife ab:
While MilliSecs() - Colzeit < 1000
If ImagesCollide(a,300,200,0,a, 360, 240,0)
coll=coll+1
EndIf
Wend
b.z.w
While MilliSecs() - Colzeit < 1000
//If ImagesCollide(a,300,200,0,a, 360, 240,0)
coll=coll+1
//EndIf
Wend
mull komm doch in den Chat!
Gernot ist auch da!
Startseite auf Chat klicken... ist IRC!
War schon zu spät, danke für die Einladung.
Naja da ist halt GETTIMERALL bisserl langsamer, weil er's von int64 in double konvertieren muss. Das macht bei einem echten Spiel aber nichts aus.
Statt coll=coll+1 besser: INC coll, 1