Sprites überdecken 2DDrawing Ausgaben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Travis
Beiträge: 35
Registriert: 09.03.2010 19:21

Sprites überdecken 2DDrawing Ausgaben

Beitrag von Travis »

Warum überdecken Sprites alles, was mit den Drawing-Befehlen gezeichnet wird. Texte, Linien, Formen - alles verschwindet hinter dem Sprite. Natürlich habe ich erst die Sprites und dann den Rest anzeigen lassen, aber seht selbst:

Bild

Das man überhaupt etwas sieht liegt nur an der Transparez des Sprites! Der Text, die Linien und die Boxen sollten eigendlich alles überdecken, da sie zuletzt gezeichnet wurden. Habe mal wieder ein Brett vorm Kopf - was mache ich falsch? Hier auch mal der Code dazu

Code: Alles auswählen

Procedure UpdateScreen()
 ClearScreen(0)
 
  StartDrawing(ScreenOutput())
  
  ForEach Tile()
   Select Tile()\Type
    Case 1
     DisplayTranslucentSprite(GrasGfx,Tile()\X*32+ScrollX, Tile()\Y*32+ScrollY, 200)
    Case 2
     DisplayTranslucentSprite(RockGfx,Tile()\X*32+ScrollX, Tile()\Y*32+ScrollY, 255)
    Case 3 
     DisplayTranslucentSprite(WaterGfx,Tile()\X*32+ScrollX, Tile()\Y*32+ScrollY, 100)
    EndSelect
  Next
   
  Start3D()
  ForEach Unit()
   Select Unit()\type
    Case 1 ; Panzer
     RotateSprite3D(Tank1Gfx, Unit()\Angle, #PB_Absolute)
     RotateSprite3D(Tank2Gfx, Unit()\Angle, #PB_Absolute)
     If Unit()\player = 1 : DisplaySprite3D(Tank1Gfx, Unit()\X*32+ScrollX, Unit()\Y*32+ScrollY) : EndIf
     If Unit()\player = 2 : DisplaySprite3D(Tank2Gfx, Unit()\X*32+ScrollX, Unit()\Y*32+ScrollY) : EndIf
     If Unit()\selected = 1 : 
      Box(Unit()\X*32+ScrollX, Unit()\Y*32+ScrollY,32,32,RGB(255,255,255))
      Box(Unit()\TargetX*32+ScrollX, Unit()\TargetY*32+ScrollY,32,32,RGB(255,0,0))
     EndIf
     
   EndSelect
  Next
  Stop3D()
  
  Box(MouseX()-4,MouseY()-4,8,8,RGB(255,255,255))
  
  DrawingMode(#PB_2DDrawing_Outlined )
  Box(CursorX*32+ScrollX,CursorY*32+ScrollY,32,32,RGB(128,128,0))

  DrawText(0, 0,"Cursor: " + Str(CursorX) + " / " + Str(CursorY), RGB(255,25,255))
  DrawText(0,15,"Scroll: " + Str(ScrollX) + " / " + Str(ScrollY), RGB(255,25,255))
  DrawText(0,30,"Program: " + Str(ProgramMode), RGB(255,25,255))
  
  ForEach path()
   If path()\parent <> 0 : LineXY(path()\x*32+(32/2)+scrollx,path()\y*32+(32/2)+scrolly,path()\parent\x*32+(32/2)+scrollx,path()\parent\y*32+(32/2)+scrolly,RGB(255,0,255)): EndIf
  Next
  
  StopDrawing()
  
 FlipBuffers()
EndProcedure
Man kann alles sagen, man muss es nur vernünftig begründen können.
Ich hasse WASD-Steuerung | Ohne Pix saug ich nix | www.travis.bplaced.net
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sprites überdecken 2DDrawing Ausgaben

Beitrag von STARGÅTE »

Also,

du darfst nicht alle Sachen durch einander mischen !

Wenn du StartDrawing machst, arf nur Drawing kommen.
dann erst wieder StopDrawing !
Wenn du Start3D machst, darf nur Sprite3D-Zeug kommen.
Dann erst wieder Stop3D
usw.

Du hingegen mischst alles durcheinander!

Code: Alles auswählen

Procedure UpdateScreen()
ClearScreen(0)

  
  ForEach Tile()
   Select Tile()\Type
    Case 1
     DisplayTranslucentSprite(GrasGfx,Tile()\X*32+ScrollX, Tile()\Y*32+ScrollY, 200)
    Case 2
     DisplayTranslucentSprite(RockGfx,Tile()\X*32+ScrollX, Tile()\Y*32+ScrollY, 255)
    Case 3 
     DisplayTranslucentSprite(WaterGfx,Tile()\X*32+ScrollX, Tile()\Y*32+ScrollY, 100)
    EndSelect
  Next
   
  Start3D()
  ForEach Unit()
   Select Unit()\type
    Case 1 ; Panzer
     RotateSprite3D(Tank1Gfx, Unit()\Angle, #PB_Absolute)
     RotateSprite3D(Tank2Gfx, Unit()\Angle, #PB_Absolute)
     If Unit()\player = 1 : DisplaySprite3D(Tank1Gfx, Unit()\X*32+ScrollX, Unit()\Y*32+ScrollY) : EndIf
     If Unit()\player = 2 : DisplaySprite3D(Tank2Gfx, Unit()\X*32+ScrollX, Unit()\Y*32+ScrollY) : EndIf     
   EndSelect
  Next
  Stop3D()

  StartDrawing(ScreenOutput())
  ForEach Unit()
   Select Unit()\type
    Case 1 ; Panzer
     If Unit()\selected = 1 : 
      Box(Unit()\X*32+ScrollX, Unit()\Y*32+ScrollY,32,32,RGB(255,255,255))
      Box(Unit()\TargetX*32+ScrollX, Unit()\TargetY*32+ScrollY,32,32,RGB(255,0,0))
     EndIf
     
   EndSelect
  Next
  
  Box(MouseX()-4,MouseY()-4,8,8,RGB(255,255,255))
  
  DrawingMode(#PB_2DDrawing_Outlined )
  Box(CursorX*32+ScrollX,CursorY*32+ScrollY,32,32,RGB(128,128,0))

  DrawText(0, 0,"Cursor: " + Str(CursorX) + " / " + Str(CursorY), RGB(255,25,255))
  DrawText(0,15,"Scroll: " + Str(ScrollX) + " / " + Str(ScrollY), RGB(255,25,255))
  DrawText(0,30,"Program: " + Str(ProgramMode), RGB(255,25,255))
  
  ForEach path()
   If path()\parent <> 0 : LineXY(path()\x*32+(32/2)+scrollx,path()\y*32+(32/2)+scrolly,path()\parent\x*32+(32/2)+scrollx,path()\parent\y*32+(32/2)+scrolly,RGB(255,0,255)): EndIf
  Next
  
  StopDrawing()
  
FlipBuffers()
EndProcedure
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Travis
Beiträge: 35
Registriert: 09.03.2010 19:21

Re: Sprites überdecken 2DDrawing Ausgaben

Beitrag von Travis »

:oops: Ja, danke. Die Sprite-Befehle haben ja auch nichts mit den Drawing-Befehlen zutun. Daran habe ich nicht gedacht....
Man kann alles sagen, man muss es nur vernünftig begründen können.
Ich hasse WASD-Steuerung | Ohne Pix saug ich nix | www.travis.bplaced.net
Antworten