Sprite3D Anzeigenproblem

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Sprite3D Anzeigenproblem

Beitrag von Pelagio »

:iamwithstupid:
Hallo Leidensgenossen,

ich habe ein Problem mit der Anzeige eines 3DSprites, gestern funktionierte es noch, heute nicht mehr. Ich habe eine Figur (Dreieck) welche von der oberen linken Ecke in die gegengesetzte Ecke wandern soll. Dies funktionierte gestern auch noch und heute wid das Spirit nicht mehr angezeigt
Warum ?
Wo liegt mein Fehler?

Code: Alles auswählen

{- Konstante 
   #Spirits =   0 
   #xyLine  = 100 
   #wWidth  = 800 
   #wHeight = 400 
;} Konstante    

;{- Variablen 

   Structure xyPoint 
      x.l 
      y.l 
      r.l 
   EndStructure 
    
   Global xyD.xyPoint 
    
;} Variablen 

Procedure Figur_Create() 
   CreateSprite(#Spirits, #xyLine, #xyLine, #PB_Sprite_Texture) 
   If StartDrawing(SpriteOutput(#Spirits)) 
      BackColor(0,0,0): FrontColor(0,255,0) 
      LineXY(00     , 00, 00      , #xyLine, #Blue) 
      LineXY(00     , 00, #xyLine , 00     , #Blue) 
      LineXY(#xyLine, 00, 00      , #xyLine, #Blue) 
      FillArea(10   , 10, #Blue   , #Red) 
      StopDrawing() 
   EndIf 
   CreateSprite3D(#Spirits, #Spirits) 

EndProcedure 

Procedure Figur_Activate() 
   xyD\x = 0: xyD\y = 0: xyD\r = 180 
   If Start3D() 
      RotateSprite3D (#Spirits, xyD\r, 0) 
      DisplaySprite3D(#Spirits, xyD\x, xyD\y) 
      Stop3D() 
   Else 
      MessageRequester("Error", "Can't open 3D", 0)    
   EndIf  
EndProcedure 

Procedure Figur_Draw() 
   If Start3D() 
      DisplaySprite3D(#Spirits, xyD\x, xyD\y, 255) 
      Stop3D() 
   Else 
      MessageRequester("Error", "Can't open 3D", 0) 
   EndIf    
EndProcedure 

Procedure SetFigur() 
   If (xyD\x<(#wWidth -#xyLine)): xyD\x+2: EndIf 
   If (xyD\y<(#wHeight-#xyLine)): xyD\y+1: EndIf 
   ClearScreen(0 , 0, 0) 
EndProcedure 

;{- Program 

   If (InitSprite()=0) Or (InitKeyboard()=0) 
      MessageRequester("Error", "Can't open DirectX 7 Or later", 0) 
      End 
   EndIf 
   If (InitSprite3D()=0) 
      MessageRequester("Error", "Direct3D system can't be initialized correctly", 0) 
      End 
   EndIf 

   OpenWindow(0, 100, 100, #wWidth, #wHeight, #PB_Window_TitleBar|#PB_Window_ScreenCentered, "Übungssource 4") 
   OpenWindowedScreen(WindowID(), 0, 0, #wWidth, #wHeight, 1, 0, 0) 
   Figur_Create  () 
   Figur_Activate() 
   Repeat 
      ExamineKeyboard() 
      SetFigur() 
      Figur_Draw() 
      FlipBuffers() 
      WindowEvent() 
   Until KeyboardPushed(#PB_Key_Escape) 
    
;} Program 
    
End 
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag von Pelagio »

:bounce:
Hallo Leidensgenossen,

ich habe das Problem selber lösen können, wenn ich mit CreateSprite3D eine Figur erstelle so muß die das BasisSprite eine bestimmte größe haben (16*16, 32*32, 64*64, 128*128 oder 256*256) also

Code: Alles auswählen

CreateSprite(0, 128, 128, #PB_Sprite_Texture).
Ich muße also in meinem Code nur die Konstante ändern

Code: Alles auswählen

 #xyLine = 128
und schon funktionierte wieder alles.
Antworten