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] [EINKLAPPEN] 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
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
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] [EINKLAPPEN] 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 , aber so stehts halt auch ma im codearchiv... darf auch gern noch weiter optimiert wern
MfG
MBC
|