Entityanzahl, Leistungsproblem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Kruemelator

Betreff: Entityanzahl, Leistungsproblem

BeitragDo, Dez 18, 2008 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Dez 18, 2008 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 22, 2008 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 22, 2008 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group