Entityanzahl, Leistungsproblem
Übersicht

KruemelatorBetreff: Entityanzahl, Leistungsproblem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
mein Problem ist, dass mein "Spiel" schon dann ruckelt wenn ich nur 500 Sprites erstellt habe. Wenn ich aber Würfel anstelle der Sprites nehme kann ich bis zu 750 erstellen bevor es anfängt zu ruckeln. Mir ist es egal ob ich Würfel oder Sprites nehmen, ich will nur möglichst viele Entity erstellen können. Das ruckeln hat aber nichts mir der Kollision oder oder so zu tun. Hoffe ihr könnt mir helfen. Code: [AUSKLAPPEN] Graphics3D 800,600 SetBuffer BackBuffer() ;Variablen------------------------------------------------------------ Global mausrad# = 0 Global scale# = 1 Global objektzahl = 0 Global buildmode = 0 Dim unit(3999,3) ;0 = Einheit ;1 = Fraktion ;2 = Wegpunkt ;3 = Leben Const bod_c = 1 Const obj_c = 2 ;Laden---------------------------------------------------------------- Global camera=CreateCamera() CameraViewport camera,0,0,800,600 CameraRange camera,0.001,100 light=CreateLight() boden = CreateCube() PositionEntity boden,0,-10,0 ScaleEntity boden,50,1,50 EntityPickMode boden,2 EntityType boden,bod_c Global curser = CreateCylinder(30) ScaleEntity curser,1,0.5,1 EntityColor curser,255,0,0 ;Laden---------------------------------------------------------------- ;Funktionen----------------------------------------------------------- ;Kamera-bewegen------------------------------------------------------- Function cammove() mx# = MouseXSpeed() my# = MouseYSpeed() my# = my# / 10 mx# = mx# / -10 probe# = EntityPitch(camera) + my# If probe# >= 90 Then my# = 0 mx# = 0 TurnEntity camera,my#,mx#,0 MoveMouse 400,300 xcor# = EntityPitch(camera) ycor# = EntityYaw(camera) zcor# = EntityRoll(camera) RotateEntity camera,0,ycor#,zcor# If KeyDown(32) Then MoveEntity camera,0.15,0,0 If KeyDown(30) Then MoveEntity camera,-0.15,0,0 If KeyDown(17) Then MoveEntity camera,0,0,0.1 If KeyDown(31) Then MoveEntity camera,0,0,-0.1 RotateEntity camera,xcor#,ycor#,0 maus# = mausrad# / 3 If MouseDown(1) Then Else TranslateEntity camera,0,maus#,0 EndIf End Function ;Kamera-bewegen------------------------------------------------------- ;3D-Curser------------------------------------------------------------ Function cursermove() cursermovepick = CameraPick(camera,400,300) PositionEntity curser,PickedX(),PickedY(),PickedZ() End Function ;3D-Curser------------------------------------------------------------ ;Cursergroeße--------------------------------------------------------- Function curserset() If MouseDown(1) Then scale# = scale# + mausrad# / 20 ScaleEntity curser,scale#,0.5,scale# EndIf End Function ;Cursergroeße--------------------------------------------------------- ;Schwerkraft---------------------------------------------------------- Function erdanziehung() .erdanziehungstart If unit(a,0) <> 0 Then TranslateEntity unit(a,0),0,-0.3,0 EndIf a = a + 1 If a < 4000 Then Goto erdanziehungstart End Function ;Schwerkraft---------------------------------------------------------- ;Einheit-------------------------------------------------------------- Function createeinheit() .createeinheitstart If unit(a,0) = 0 Then If buildmode = 0 Then ;unit(a,0) = LoadSprite("c:\a\man.bmp", 268) unit(a,0) = CreateSprite() Else unit(a,0) = CreateCube() EndIf ;SpriteViewMode unit(a,0),2 EntityColor unit(a,0),255,0,0 ;EntityFX unit(a,0),16 EntityType unit(a,0),obj_c PositionEntity unit(a,0),Rand(-15,15),0,Rand(-15,15) objektzahl = objektzahl + 1 ;EntityAlpha unit(a,0),0.5 ;EntityAutoFade unit(a,0),50,60 a = 4000 Else a = a + 1 EndIf If a < 4000 Then Goto createeinheitstart End Function ;Einheit-------------------------------------------------------------- ;Tasten--------------------------------------------------------------- Function tasten() If MouseDown(2) Then createeinheit() If KeyHit(14) Then einheitloeschen() If KeyHit(57) Then If buildmode = 0 Then buildmode = 1 Else buildmode = 0 End Function ;Tasten--------------------------------------------------------------- Function einheitloeschen() .einheitloeschenstart If unit(a,0) <> 0 Then FreeEntity unit(a,0) unit(a,0) = 0 EndIf a = a + 1 If a < 4000 Then Goto einheitloeschenstart objektzahl = 0 End Function ;Funktionen----------------------------------------------------------- fpsrate=CreateTimer(60) While Not KeyHit(1) WaitTimer(fpsrate) Collisions obj_c,bod_c,2,3 ;Setzen------------------------------------------------- mausrad# = MouseZSpeed() ;Setzen------------------------------------------------- tasten() cammove() cursermove() curserset() erdanziehung() UpdateWorld RenderWorld Text 10,0, buildmode Text 10,10, objektzahl Text 10,20, "Rechtsklick Entity erstellen." Text 10,30, "Leertaste Sprite-Würfel wechseln." Text 10,40, "W,A,S,D und Mausrad Kamera steuern." Text 10,50, "Backspace Entitys löschen." Flip Wend End |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sprites haben einen größeren Rechenaufwand als Cubes, da diese von Blitz3D mit mehr Funktionen bestückt sind. Deine Alternative ist auf Singlesurface umzusteigen. Die kostenpflichtige SpriteCandy kann das, soweit ich informiert bin. Oder eben selbst programmieren, was aber schon gewisse Fertigkeiten abverlangt.
- Ein Faktor von über 10'000 bei CameraRange camera,0.001,100 ist schon etwas übertrieben. - Es heisst nicht ''Curser'' sondern ''Cursor''. Nur zu Info. - ''createeinheit'' klingt komisch. Entweder deutsch oder englisch. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso ist Faktor von 10.000 übertrieben? Ich wollte, dass Entitys auch dann ganz dargestellt werden, wenn sie näher als 1 an der Kamera sind. Oder gibt es dafür eine besser/schneller Lösung? | ||
![]() |
Der_Schläfer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nö, ne richtige lösung kennich dazu nicht.
Der Faktor zwischen der minimalen Range und der maximalen Range sollte 1000 (oder so) nicht überschreiten, weils sonst Grafikfehler gibt, besonders bei älteren Grakas. Man kann damit Leben... Code: [AUSKLAPPEN] camerarange camera,.1,100 wäre z.b. sinnvollER
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group