[B2D/B3D] speed_oval

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

MBC

Betreff: [B2D/B3D] speed_oval

BeitragDi, Okt 18, 2005 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Nabend!

Ich hab mich in letzter Zeit oft drüber geärgert, dass oval so verdammt langsam is... wär doch schön, das etwas schneller zu haben...
also hab ichs jetzt ma mit einstellbaren "steps" versucht (also berechnete Punkte pro kreis)...
ma zwei codes zum testen (beim ersten kann man mit der leertaste umschalten, mit den maustasten "zoomen" und mit dem mausrad die steps verstellen)

BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,32,2
SetBuffer BackBuffer()

Global steps
w=50 : h=50


Repeat

If MouseDown(1) Then : w=w+1 : h=h+1 : EndIf
If MouseDown(2) Then : w=w-1 : h=h-1 : EndIf
If w<1 Then w=1 : If h<1 Then h=1
If KeyHit(57) Then wahl=1-wahl



If wahl=0 Then

;If ttimer+50<MilliSecs() Then
; steps=steps + KeyDown(78) - KeyDown(74)
; ttimer=MilliSecs()
;EndIf
steps=Abs(MouseZ()+3)

If steps>360 Then steps=360
If steps<3 Then steps=3
Text 10,10,"Steps: "+steps
Text 10,40,"Speed-Version"

speed_oval(400-w/2,300-h/2,w,h,steps)


Else

Oval 400-w/2,300-h/2,w,h,0
Text 10,40,"Standard-Version"

EndIf


;FPS
frames=frames+1
If timer+1000<MilliSecs() Then
timer=MilliSecs()
fps=frames
frames=0
EndIf
Text 10,25,"FPS: "+fps


Flip 0
Cls

Until KeyHit(1)
End




Function speed_oval(x,y,width,height,steps)

If steps<3 Then Return

step_var=Floor(360/steps)


If width<35 Or height<35 Then
Oval x,y,width,height,0
Return
EndIf


x_mitte=x+width/2 : y_mitte=y+height/2
width2=width/2 : height2=height/2

x_old=x_mitte
y_old=y_mitte-height2
i=i+step_var

Repeat
x_new=x_mitte+Sin(i)*width2
y_new=y_mitte-Cos(i)*height2

Line x_new,y_new,x_old,y_old

x_old=x_new
y_old=y_new
i=i+step_var
Until i>360
Line x_old,y_old,x+width/2,y

steps=360/step_var

End Function



BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,32,2

Const size=200

.neu
Cls

timer=MilliSecs()

For i=1 To 100
speed_oval(50,50,size,size,50)
Next
time=MilliSecs()-timer
Text 150,270,"Speed_Oval",1
Text 150,285,time+" ms",1

timer=MilliSecs()

For i=0 To 100
Oval 300,50,size,size,0
Next
time=MilliSecs()-timer
Text 400,270,"Normal-Oval",1
Text 400,285,time+" ms",1

WaitKey()
If KeyHit(57) Then Goto neu




Function speed_oval(x,y,width,height,steps)

If steps<3 Then Return

step_var=Floor(360/steps)


If width<35 Or height<35 Then
Oval x,y,width,height,0
Return
EndIf


x_mitte=x+width/2 : y_mitte=y+height/2
width2=width/2 : height2=height/2

x_old=x_mitte
y_old=y_mitte-height2
i=i+step_var

Repeat
x_new=x_mitte+Sin(i)*width2
y_new=y_mitte-Cos(i)*height2

Line x_new,y_new,x_old,y_old

x_old=x_new
y_old=y_new
i=i+step_var
Until i>360
Line x_old,y_old,x+width/2,y

End Function



ich weiß ja nich, in wie weit sowas schon bei euch privat zum alltag gehört Laughing , aber so stehts halt auch ma im codearchiv... darf auch gern noch weiter optimiert wern Very Happy

MfG
MBC
Computer sind auch nur Menschen! Wink

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group