Referenz auf Sprite direkt nach der Erstellung verloren
Verfasst: 07.06.2015 11:56
Folgender Code produziert den Laufzeitfehler
Das angegebene #Sprite ist nicht initialisiert. Es wird aber doch in der Zeile direkt davor erzeugt, wie kann das also sein
Der Fehler taucht in der Zeile
Die Initialisierung erfolgt in der Zeile davor
Da ich noch neu in PureBasic bin, bin ich mir nicht so sicher, ob das womöglich was mit den Pointern zu tun hat
Das angegebene #Sprite ist nicht initialisiert. Es wird aber doch in der Zeile direkt davor erzeugt, wie kann das also sein
Der Fehler taucht in der Zeile
Code: Alles auswählen
StartDrawing(SpriteOutput(*Particle\Sprite))
Code: Alles auswählen
*Particle\Sprite = CreateSprite(#PB_Any,*Particle\Width,*Particle\Height,#PB_Sprite_AlphaBlending)
Code: Alles auswählen
Procedure paintSingleParticle(*Particle.ParticleStruct)
If *Particle\Sprite = 0
; Erstellt einen leeren Sprite in der passenden Größe
*Particle\Sprite = CreateSprite(#PB_Any,*Particle\Width,*Particle\Height,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(*Particle\Sprite))
; Allgemeine Einstellungen setzen
BackColor(RGBA(0,0,0,0))
FrontColor(RGB(*Particle\Red,*Particle\Green,*Particle\Blue))
DrawingMode(#PB_2DDrawing_Default)
Select *Particle\ParticleType
Case #PRIMITIVE_CIRCLE
; Kreis zeichnen
Circle(*Particle\Width / 2,*Particle\Height / 2,*Particle\Width / 2)
Case #PRIMITIVE_RECTANGLE
; Rechteck zeichnen
Box(0,0,*Particle\Width,*Particle\Height)
Case #PRIMITIVE_TRIANGLE
; Dreieck zeichnen
Line(*Particle\Width / 2, 0, *Particle\Width / 2, *Particle\Height)
Line(0,*Particle\Height,*Particle\Width / 2, -*Particle\Height)
Line(9,*Particle\Height,*Particle\Width,*Particle\Height)
FillArea(*Particle\Width / 2, *Particle\Height / 2,RGB(*Particle\Red,*Particle\Green,*Particle\Blue))
Case #COMPLEX_SPRITE
; Sprite zeichnen
; Erzeugt eine Kopie für die Resize Aktion
*Particle\Sprite = CopySprite(Images(*Particle\ParticleTexture),#PB_Any,#PB_Sprite_AlphaBlending)
; Skaliert die Größe der Kopie auf die Größe des Partikels
ZoomSprite(*Particle\Sprite,*Particle\Width,*Particle\Height)
EndSelect
StopDrawing()
EndIf
; Rotiert das Sprite Element auf den aktuellen Winkel
RotateSprite(*Particle\Sprite,*Particle\CurrentRotation,#PB_Absolute)
; Zeichnet das Sprite Element
DisplayTransparentSprite(*Particle\Sprite,*Particle\PositionX,*Particle\PositionY,*Particle\Alpha)
EndProcedure