Programm wird immer träger

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Programm wird immer träger

Beitrag von captain_hesse »

Hallo
Ich experimentiere schon seit einer Weile mit der ogre Engiene herum, wollte mir gerne mal ein kleines 3d Game basteln und dazu hab ich folgendes Programm:

Code: Alles auswählen

 InitEngine3D()

  Add3DArchive("3d-Test", #PB_3DArchive_FileSystem)
  
  
  InitSprite()
  InitKeyboard()
  InitMouse()

  OpenWindow(0, 0, 0, 1024, 768, "")
  OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768, 0, 0, 0)
  SetFrameRate(200)
 
  EnableWorldPhysics(1)
  EnableWorldCollisions(1)
  
  LoadMesh   (0, "kamera.mesh")
  LoadMesh   (1, "boden.mesh")
  LoadMesh   (2, "haus.mesh")
  
  LoadTexture(0, "kamera-texture.jpg")
  LoadTexture(1, "boden-texture.jpg")
  LoadTexture(2, "haus-texture.jpg")
  
  CreateMaterial(0, TextureID(0))
  CreateMaterial(1, TextureID(1))
  CreateMaterial(2, TextureID(2))
  
  CreateEntity(0, MeshID(0), MaterialID(0))
  CreateEntity(1, MeshID(1), MaterialID(1))
  CreateEntity(2, MeshID(2), MaterialID(2))

  EntityMaterial(0, MaterialID(0))
  EntityMaterial(1, MaterialID(1))
  EntityMaterial(2, MaterialID(2))
  
  RotateEntity(1, 90, 0, 0)  
  EntityLocate(1,0,-100,0)  
  ScaleEntity(1,5,5,5)   
  ScaleEntity(0,0.3,0.3,0.3)   
  EntityLocate(0,-1000,0,0)  
  EntityLocate(2,0,30,0)  
  
  
  
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,0)
    RotateCamera(0,-0,0,0)
    CameraBackColor(0, RGB(0, 0, 255))
    
    CreateCamera(1, 50, 0, 50, 100)
    CameraLocate(1,0,1500,00)
    RotateCamera(1,-55,0,0)
    
        
    EntityPhysicBody(0, #PB_Entity_BoxBody, #PB_Entity_AbsoluteBodyMove)
    EntityPhysicBody(1, #PB_Entity_StaticBody )
    EntityPhysicBody(2, #PB_Entity_StaticBody )
    
    CreateLight(0, RGB(255,255,255), 0, 1000, 0)
    
        
    speed.f=400
    
    
    Repeat
      
      ClearScreen(RGB(0, 0, 255))
            
      If ExamineKeyboard()
      
        If KeyboardPushed(#PB_Key_A)
           KeyX.f = -speed/2
        ElseIf KeyboardPushed(#PB_Key_D)
          KeyX.f = speed/2
        Else
         KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_W)
          KeyY.f = -speed
        ElseIf KeyboardPushed(#PB_Key_S)
          KeyY.f = speed
        Else
          KeyY = 0
        EndIf
      EndIf
      
      If ExamineMouse()
        MouseX.f = -MouseDeltaX()/10
        MouseY.f = -MouseDeltaY()/10
        mousex1.f+mousex
        mousey1.f+mousey
      EndIf
      
      If mousey1.f>55 
         mousey1.f=55 
      EndIf     
      If mousey1.f<-55 
          mousey1.f=-55 
      EndIf  
 
      If mousex1>=360 Or mousex1<=-360
      Mousex1=0
      EndIf
 
 
     
      PointPick(0, 1024/2, 768/2)
      rix.f=PickX()
      riy.f=PickY()
      riz.f=PickZ()
      x.f= -Keyy*rix-Keyx*riz
      y.f= -KeyY*riz+Keyx*rix
     
     
        
      RotateCamera(0, MouseY1, MouseX1, 0, #PB_Absolute)
      RotateEntity(0, 0, MouseX1, 0, #PB_Absolute)
      EntityLocate(0,EntityX(0),EntityY(1)+100,EntityZ(0))
      MoveEntity(0, x, 0, y)
      CameraLocate(0,EntityX(0),EntityY(0),EntityZ(0))
       

      
      CameraLookAt(1,EntityX(0),EntityY(0),EntityZ(0))
    
     ;Delay(50)
     RenderWorld()
     FlipBuffers()
      
    Until KeyboardPushed(#PB_Key_Escape) 
    
Hier kann man das Ganze noch mit 3d-Archiv runterladen zum testen.

So wenn man nun das Programm startet läuft erst mal alles ganz normal aber je länger das Programm läuft (ca. 30min) desto träger wird alles und das kamera Entity schiebt sich immer weiter weg von der Kamera wenn man es bewegt. Woran könnte das liegen, hab ich vieleicht was übersehen oder könnte das ein Bug sein ?
Danke schon mal für eure Bemühungen.
Zuletzt geändert von captain_hesse am 19.05.2009 01:02, insgesamt 1-mal geändert.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Beitrag von captain_hesse »

Hallo nochmal

Na was ist denn los, interessiert sich denn wirklich niemand dafür :shock:
Ich denke es geht doch darum Fehler oder Bugs zu finden die dann mit dem nächsten PB-Update behoben werden können oder ?

MfG.
captain_hesse
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja, für so einen test 30min laufen lassen, und dann auch noch ermitteln, woran es liegen könnte dass es langsamer wird, ist nun mal etwas größerer Aufwand.

ich hab mal drüber geschaut, und mir ist nichts sofort ins Auge gesprungen, außer
EntityLocate(0,EntityX(0),EntityY(1)+100,EntityZ(0))
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Also nur mal eine Vermutung: wenn etwas immer langsamer wird, und vielleicht schließlich Abstürzt, kann es irgendeine Art von Overflow sein. Das heißt, er müllt sich irgendwie zu.

Ich teste mal... und berichte dann.

Nachtrag: Stimmt, es wird wirklich langsamer. Und die Bewegung der Kamera bzw. des Würfels echt seltsam... Es sieht immer so aus, als würde die Kamera vor eine Wand fahren. Und der Würfel macht bei Bewegungsbeginn immer einen solchen Sprung, wenn er zum Stillstand kommt, springt er wieder etwas zurück.

Ich haue mich erstmal auf's Ohr, bin ziemlich müde, kann kaum noch denken. Wenn danach immer noch dieser Stand ist, schreibe ich das mal selbst...
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Das dürfte so funktionieren. Mein Verdacht bei deinem Code ist, dass es an der Physikengine liegt.
Hier habe ich nun das mit der von der Entitätsrotation abhängigen Bewegung nicht verbauen können (für Mathematik bin ich irgendwie zu blöd). Ebenso ist die Rotation vom Würfel seltsam... Vor 4.30 war das nicht so. :oops: Da wurde bei EntityMovement auch die aktuelle Rotation berücksichtigt, wenn ich mich nicht irre.

Code: Alles auswählen

;------------------------------------------------------------------------------
; Declarations
;------------------------------------------------------------------------------

EnableExplicit

Enumeration ; Windows
	#Window_Main
EndEnumeration

Global Title.s = "3D Spiel", Windowed = #True, ScreenWidth = 1024, ScreenHeight = 768
Global WindowEvent
Global MouseDeltaX, MouseDeltaY, EntityMovementX.f, EntityMovementY.f, EntitySpeed.f = 10

;------------------------------------------------------------------------------
; Startup
;------------------------------------------------------------------------------

If InitEngine3D() = #False
	
	MessageRequester(Title, "Could not initialize Graphics Engine!")
	End
	
EndIf

If InitSprite() = #False
	
	MessageRequester(Title, "Could not initialize DirectX for Graphics!")
	End
	
EndIf

If InitSound() = #False
	
	MessageRequester(Title, "Could not initialize DirectX for Sound!")
	End
	
EndIf

If InitMouse() = #False
	
	MessageRequester(Title, "Could not initialize DirectX for Mouse Input!")
	End
	
EndIf

If InitKeyboard() = #False
	
	MessageRequester(Title, "Could not initialize DirectX for Keyboard Input!")
	End
	
EndIf

; Open Screen

If Windowed = #True
	
	OpenWindow(#Window_Main, 0, 0, ScreenWidth, ScreenHeight, Title, #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
	OpenWindowedScreen(WindowID(#Window_Main), 0, 0, ScreenWidth, ScreenHeight, 0, 0, 0)
	
Else
	
	OpenScreen(ScreenWidth, ScreenHeight, 32, Title)
	
EndIf

; Create Cameras

CreateCamera(0, 0, 0, 100, 100)
CameraBackColor(0, RGB(0, 0, 255))

CreateCamera(1, 60, 60, 40, 40)
CameraLocate(1, 0, 1500, 0)
RotateCamera(1, -55, 0, 0)

; Set Up Engine

;EnableWorldPhysics(#True)
;EnableWorldCollisions(#True)

; Load Content

Add3DArchive("3d-Test", #PB_3DArchive_FileSystem)

LoadMesh(0, "kamera.mesh")
LoadMesh(1, "boden.mesh")
LoadMesh(2, "haus.mesh")

LoadTexture(0, "kamera-texture.jpg")
LoadTexture(1, "boden-texture.jpg")
LoadTexture(2, "haus-texture.jpg")

CreateMaterial(0, TextureID(0))
CreateMaterial(1, TextureID(1))
CreateMaterial(2, TextureID(2))

CreateEntity(0, MeshID(0), MaterialID(0))
CreateEntity(1, MeshID(1), MaterialID(1))
CreateEntity(2, MeshID(2), MaterialID(2))

EntityMaterial(0, MaterialID(0))
EntityMaterial(1, MaterialID(1))
EntityMaterial(2, MaterialID(2))

; Arrange Scene

RotateEntity(1, 90, 0, 0)
EntityLocate(1, 0, -100, 0)
ScaleEntity(1, 5, 5, 5)
ScaleEntity(0, 0.3, 0.3, 0.3)
EntityLocate(0, -1000, 0, 0)
EntityLocate(2, 0, 30, 0)

;EntityPhysicBody(0, #PB_Entity_BoxBody, 1)
;EntityPhysicBody(1, #PB_Entity_StaticBody)
;EntityPhysicBody(2, #PB_Entity_StaticBody)

CreateLight(0, #White, 0, 1000, 0)

;------------------------------------------------------------------------------
; Main
;------------------------------------------------------------------------------

Repeat
	
	If Windowed = #True
		
		Repeat
			
			WindowEvent = WindowEvent()
			
			If WindowEvent = #PB_Event_CloseWindow
				
				End
				
			EndIf
			
		Until WindowEvent = #False
		
	EndIf
	
	ExamineKeyboard()
	ExamineMouse()
	
	MouseDeltaX = MouseDeltaX()
	MouseDeltaY = MouseDeltaY()
	
	; half mouse sensibility
	MouseDeltaX = (MouseDeltaX / 2)
	MouseDeltaY = (MouseDeltaY / 2)
	
	If KeyboardPushed(#PB_Key_A)
		
		EntityMovementX = -EntitySpeed
		
	ElseIf KeyboardPushed(#PB_Key_D)
		
		EntityMovementX = EntitySpeed
		
	Else
		
		EntityMovementX = #False
		
	EndIf
	
	If KeyboardPushed(#PB_Key_W)
		
		EntityMovementY = EntitySpeed
		
	ElseIf KeyboardPushed(#PB_Key_S)
		
		EntityMovementY = -EntitySpeed
		
	Else
		
		EntityMovementY = #False
		
	EndIf
	
	PointPick(0, (ScreenWidth / 2), (ScreenHeight / 2))
	
	MoveEntity(0, EntityMovementX, 0, EntityMovementY)
	
	RotateCamera(0, -MouseDeltaY, -MouseDeltaX, 0, #PB_Relative)
	RotateEntity(0, -MouseDeltaY, -MouseDeltaX, 0, #PB_Relative)
	
	CameraLocate(0, EntityX(0), EntityY(0), EntityZ(0))
	
	CameraLookAt(1, EntityX(0),EntityY(0),EntityZ(0))
	
	; If Escape is pushed, end
	
	If KeyboardPushed(#PB_Key_Escape)
		
		CloseScreen()
		End
		
	EndIf
	
	RenderWorld()
	FlipBuffers()
	
ForEver
Anmerkungen:
  • Alle Initialisierungen am besten immer auf Erfolg prüfen.
  • SetFrameRate() ist nicht geeignet, um eine Spielgeschwindigkeit festzulegen, an Hand derer die Bewegungen der Entitäten berechnet werden. Ich verweise auf's Code Archiv, in dem es auch ein paar Beispiele gibt, Computerleistungsunabhängig zu programmieren. Des weiteren wird diese Framerate nicht übernommen, wenn der Benutzer das bei seinem Grafikkartentreiber eingestellt hat.
  • EntityMaterial() brauchst du hier nicht, da den Entitäten das Material schon bei CreateEntity() zugewiesen wird.
  • In deinem Quelltext sind CameraLocate(0, 0, 0, 0) und RotateCamera(0, -0, 0, 0) überflüssig, da die Kamera sich automatisch bei Erstellung an dieser Position mit dieser Rotation befindet.
  • ClearScreen brauchst du nicht, wenn du die OGRE Engine verwendest, da der gesamte Bildschirminhalt mit dem Aufruf von RenderWorld() ohnehin überschrieben wird.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Beitrag von captain_hesse »

Nun Danke erst mal für eure Antworten.

@Vermilion

Danke das du das Ganze nochmal überarbeitet hast, habs auch gleich mal getestet und es dann noch etwas angepasst so das Bewegungsrichtung und Rotation sich nun so verhalten wie es in einem solchen Spiel wohl üblich ist.

Code: Alles auswählen

;------------------------------------------------------------------------------ 
; Declarations 
;------------------------------------------------------------------------------ 

EnableExplicit 

Enumeration ; Windows 
   #Window_Main 
EndEnumeration 

Global Title.s = "3D Spiel", Windowed = #True, ScreenWidth = 1024, ScreenHeight = 768 
Global WindowEvent 
Global MouseDeltaX.f, MouseDeltaY.f, EntityMovementX.f, EntityMovementY.f, EntitySpeed.f = 10 
Global rix.f, riy.f, riz.f, x.f ,y.f, MouseDeltaX1.f, MouseDeltaY1.f

;------------------------------------------------------------------------------ 
; Startup 
;------------------------------------------------------------------------------ 

If InitEngine3D() = #False 
    
   MessageRequester(Title, "Could not initialize Graphics Engine!") 
   End 
    
EndIf 

If InitSprite() = #False 
    
   MessageRequester(Title, "Could not initialize DirectX for Graphics!") 
   End 
    
EndIf 

If InitSound() = #False 
    
   MessageRequester(Title, "Could not initialize DirectX for Sound!") 
   End 
    
EndIf 

If InitMouse() = #False 
    
   MessageRequester(Title, "Could not initialize DirectX for Mouse Input!") 
   End 
    
EndIf 

If InitKeyboard() = #False 
    
   MessageRequester(Title, "Could not initialize DirectX for Keyboard Input!") 
   End 
    
EndIf 

; Open Screen 

If Windowed = #True 
    
   OpenWindow(#Window_Main, 0, 0, ScreenWidth, ScreenHeight, Title, #PB_Window_ScreenCentered | #PB_Window_SystemMenu) 
   OpenWindowedScreen(WindowID(#Window_Main), 0, 0, ScreenWidth, ScreenHeight, 0, 0, 0) 
    
Else 
    
   OpenScreen(ScreenWidth, ScreenHeight, 32, Title) 
    
EndIf 

; Create Cameras 

CreateCamera(0, 0, 0, 100, 100) 
CameraBackColor(0, RGB(0, 0, 255)) 

CreateCamera(1, 60, 60, 40, 40) 
CameraLocate(1, 0, 1500, 0) 
RotateCamera(1, -55, 0, 0) 

; Set Up Engine 

;EnableWorldPhysics(#True) 
;EnableWorldCollisions(#True) 

; Load Content 

Add3DArchive("3d-Test", #PB_3DArchive_FileSystem) 

LoadMesh(0, "kamera.mesh") 
LoadMesh(1, "boden.mesh") 
LoadMesh(2, "haus.mesh") 

LoadTexture(0, "kamera-texture.jpg") 
LoadTexture(1, "boden-texture.jpg") 
LoadTexture(2, "haus-texture.jpg") 

CreateMaterial(0, TextureID(0)) 
CreateMaterial(1, TextureID(1)) 
CreateMaterial(2, TextureID(2)) 

CreateEntity(0, MeshID(0), MaterialID(0)) 
CreateEntity(1, MeshID(1), MaterialID(1)) 
CreateEntity(2, MeshID(2), MaterialID(2)) 

EntityMaterial(0, MaterialID(0)) 
EntityMaterial(1, MaterialID(1)) 
EntityMaterial(2, MaterialID(2)) 

; Arrange Scene 

RotateEntity(1, 90, 0, 0) 
EntityLocate(1, 0, -100, 0) 
ScaleEntity(1, 5, 5, 5) 
ScaleEntity(0, 0.3, 0.3, 0.3) 
EntityLocate(0, -1000, 0, 0) 
EntityLocate(2, 0, 30, 0) 

;EntityPhysicBody(0, #PB_Entity_BoxBody, 1) 
;EntityPhysicBody(1, #PB_Entity_StaticBody) 
;EntityPhysicBody(2, #PB_Entity_StaticBody) 

CreateLight(0, #White, 0, 1000, 0) 

;------------------------------------------------------------------------------ 
; Main 
;------------------------------------------------------------------------------ 

Repeat 
    
   If Windowed = #True 
       
      Repeat 
          
         WindowEvent = WindowEvent() 
          
         If WindowEvent = #PB_Event_CloseWindow 
             
            End 
             
         EndIf 
          
      Until WindowEvent = #False 
       
   EndIf 
    
   ExamineKeyboard() 
   ExamineMouse() 
    
   MouseDeltaX = MouseDeltaX() 
   MouseDeltaY = MouseDeltaY() 
    
   ; half mouse sensibility 
   MouseDeltaX = (MouseDeltaX / 2) 
   MouseDeltaY = (MouseDeltaY / 2) 
    
   MouseDeltaX1 + MouseDeltaX 
   MouseDeltaY1 + MouseDeltaY 
   
   If MouseDeltaX1>=360 Or MouseDeltaX1<=-360
      MouseDeltaX1=0
   EndIf 
    
   If KeyboardPushed(#PB_Key_A) 
       
      EntityMovementX = -EntitySpeed 
       
   ElseIf KeyboardPushed(#PB_Key_D) 
       
      EntityMovementX = EntitySpeed 
       
   Else 
       
      EntityMovementX = #False 
       
   EndIf 
    
   If KeyboardPushed(#PB_Key_W) 
       
      EntityMovementY = EntitySpeed 
       
   ElseIf KeyboardPushed(#PB_Key_S) 
       
      EntityMovementY = -EntitySpeed 
       
   Else 
       
      EntityMovementY = #False 
       
   EndIf 
    
   PointPick(0, (ScreenWidth / 2), (ScreenHeight / 2)) 
   rix=PickX()
   riy=PickY()
   riz=PickZ()
   x= EntityMovementy*rix-EntityMovementx*riz
   y= EntityMovementy*riz+EntityMovementx*rix    
     
    
   MoveEntity(0, x, 0, y) 
    
   RotateCamera(0, -MouseDeltaY, -MouseDeltaX, 0, #PB_Relative) 
   RotateEntity(0, 0, -MouseDeltaX1, 0, #PB_Absolute) 
   EntityLookAt(0, CameraX(0)+rix*100, CameraY(0)+riy*100 , CameraZ(0)+riz*100)
    
    
   CameraLocate(0, EntityX(0), EntityY(0), EntityZ(0)) 
    
   CameraLookAt(1, EntityX(0),EntityY(0),EntityZ(0)) 
    
   ; If Escape is pushed, end 
    
   If KeyboardPushed(#PB_Key_Escape) 
       
      CloseScreen() 
      End 
       
   EndIf 
    
   RenderWorld() 
   FlipBuffers() 
    
ForEver
Allerdings hat man nun wieder das Problem das man sich durch ein Hindernis hindurch bewegen kann und genau dieses Problem wollte ich ja gerne mit der Physikengine umgehen nur dummerweise hat man dann das Problem das ich oben ja schon erwähnt habe :? .
Übrigens man kann die Physikengine auch ruhig benutzen dann läuft immer noch alles richtig außer wenn man den Würfel mit #PB_Entity_BoxBody oder #PB_Entity_SphereBody definiert und dann das Flag #PB_Entity_AbsoluteBodyMove setzt nur in diesem einen fall macht der Würfel diese sprunghafte bewegung sonst nicht. Also gehe ich davon aus das es so ist wie du gesagt hast, es wird wohl an der Physikengine liegen, könnte möglicherweise dann doch ein Bug sein.

MfG.
Captain_hesse
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Programm wird immer träger

Beitrag von Kaeru Gaman »

ich sehe hier auch fehlendes Engagement deinerseits.
auf meinen Hinweis auf das Fehlerhafte Argument bist du garnicht eingegangen, obwohl das sehr wohl der Grund sein könnte für sowas wie
und das kamera Entity schiebt sich immer weiter weg von der Kamera wenn man es bewegt
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: Programm wird immer träger

Beitrag von captain_hesse »

@Kaeru Gaman
ok sorry das ich das ignoriert bzw. ich nicht darauf geantwortet habe aber daran lag oder liegt es nicht denn auch wenn man die Zeile entfernt, ändert sich nichts außer das dann das kamera-objekt ganz langsam nach unten fällt was ja eigentlich nicht erwünscht ist.
Weißt du es ist wirklich schwierig das Problem zu beschreiben daher würde ich dich doch nochmal darum bitten dir das Programm+Archiv Hier herunterzuladen und es mal so ca. ne halbe Stunde laufen zu lassen. Du brauchst nur ganz am anfang einmal einen Bewegungstest zu machen und dann nochmal ca. 30 min später und dann siehst du was ich meine.

Gruß
Armin.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: Programm wird immer träger

Beitrag von captain_hesse »

...hab gestern abend noch etwas rumexperimentiert und rausgefunden das man garkeine 30 min. warten muß, wenn man den Wert der Variable Speed.f auf 1000 stellt sieht man sofort den Fehler wenn man das Objekt bewegt.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Programm wird immer träger

Beitrag von Kaeru Gaman »

captain_hesse hat geschrieben:... daran lag oder liegt es nicht denn auch wenn man die Zeile entfernt, ändert sich nichts außer das dann das kamera-objekt ganz langsam nach unten fällt was ja eigentlich nicht erwünscht ist.
du solltest sie ja auch nicht entfernen, sondern falls nötig korrigieren!
die Frage war eben, ob das so seine Richtigkeit hat, weil du bei X und Z die Koordinaten von Entity 0 nimmst, und bei Y die von Entity 1.

hast du denn jetzt irgendwo den aktuellen code gepostet dass man sich den mal durchlesen kann?
das sollest du immer zusätzlich zum hochgeladenen Archiv zur Verfügung stellen,
damit man erst mal reingucken kann, ob man direkt ein Problem sieht, bevor man das Archiv runterlädt.
wenn man den Wert der Variable Speed.f auf 1000 stellt sieht man sofort den Fehler wenn man das Objekt bewegt.
was noch mal ums tausendfache den Gedanken nahelegt, dass der Fehler in deiner Logik liegt und nicht bei der 3D-Engine.
wenn ich so ein float sehe, dann kommt mir sofort der Gedanke,
dass du irgendwo die Grenze der Genauigkeit überschreitest und irgendwelche Additionen oder Subtraktionen garnicht mehr ankommen.
dir ist wahrscheinlich nicht bewußt, dass man zu 16777216.0 keine 1.0 mehr dazuaddieren kann, weil eine float nicht genau genug dafür ist?

aber selbst wenn es nicht die Genauigkeit ist...
dass ein Fehler so langsam nach einer halben Stunde auftritt, ist schon verdächtig genug.
dass er früher auftritt, wenn du eine Anfangsvariable hochsetzt - das zwingt geradezu zu der Schlußfolgerung, dass der Fehler in deinem Code liegt!

ich hätte dir sowieso empfohlen, erst einmal gründlich alle Eventualitäten abzuklopfen, bevor du überhaupt einen Bug-Report postest.
dann hättest du nämlich garnicht ein halbes Jahr darauf warten müssen, dass endlich zwei Bugs korrigiert werden,
sondern hättest dein Projekt korrigieren können und wärst jetzt schon sonstwieviel weiter.

wie wir ja schon festgestellt hatten, war das erste Problem gar kein Bug sondern eine Frage der Implementierung,
wenn das geändert werden soll könnt ihr ne Feature-Request einreichen.
wenn sich das zweite jetzt auch als Problem in deinem Code und nicht in der Engine herausstellt,
dann hast du umsonst gewartet auf die Korrektur zweier Bugs die gar keine sind.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten