Hallo!
Ich lerne gerade mit PureBasic zu programmieren und bin auf mein erstes Hindernis gestoßen.
Ich lade ein einfaches 2D-Sprite, dann passe ich mit ZoomSprite dessen Größe an.
Wenn ich zu späterer Zeit die Größe des Sprites wissen will, geben mir SpriteWidth und SpriteHeight nur die ursprüngliche Größe des Sprites an, nicht aber die gezoomte Größe.
Gibt es einen Befehl, um die aktuelle Größe zu erhalten?
Eine Lösung ist natürlich, einfach zu speichern, was man bei ZoomSprite für Maße verwendet hat, aber das kommt mir nicht sehr elegant vor.
Für Tippps und HInweise bin ich sehr dankbar
ZoomSprite und SpriteWidth
Re: ZoomSprite und SpriteWidth
Hallo 4Planes,
deine Aussage:
SpriteWidth und SpriteHeight geben nach einem ZoomSprite - Aufruf auch die neue Spritegröße aus.
Das funktioniert unter Windows x86/x64 mit DirectX 11 oder OpenGL und unter Linux mit OpenGL, sowie unter MacOS mit OpenGL als Renderer.
Es wird überall gezoomt. Und der Befehl ist dabei so nett auch die neuen Texturdimensionen für eine spätere Verwendung (z.B. mit SpriteWidth oder SpriteHeight) zu speichern und nicht nur als reine Darstellungsfunktion zu dienen.
Vielleicht machst du einen Fehler beim Abfragen der Werte?
Beispielcode?
deine Aussage:
ist falsch.4Planes hat geschrieben:Wenn ich zu späterer Zeit die Größe des Sprites wissen will, geben mir SpriteWidth und SpriteHeight nur die ursprüngliche Größe des Sprites an, nicht aber die gezoomte Größe.
SpriteWidth und SpriteHeight geben nach einem ZoomSprite - Aufruf auch die neue Spritegröße aus.
Das funktioniert unter Windows x86/x64 mit DirectX 11 oder OpenGL und unter Linux mit OpenGL, sowie unter MacOS mit OpenGL als Renderer.
Es wird überall gezoomt. Und der Befehl ist dabei so nett auch die neuen Texturdimensionen für eine spätere Verwendung (z.B. mit SpriteWidth oder SpriteHeight) zu speichern und nicht nur als reine Darstellungsfunktion zu dienen.
Vielleicht machst du einen Fehler beim Abfragen der Werte?
Beispielcode?
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: ZoomSprite und SpriteWidth
Du hast Recht! Ich hätte das vorher prüfen sollen, bevor ich behaupte, wie SpriteWidth funktioniert. Ich war mir sicher, dass der Fehler hier liegt. Stattdessen verstehe ich den Fehler jetzt nicht. Wenn ich versuche auf ein gezoomtes Sprite zu schreiben, kommt eine Fehlermeldung, sobald ich den Bereich der Originalgröße verlasse.
Dieser Code funktioniert:
Dieser hier funktioniert nicht. Da heißt es »Plot() ist außerhalb des Zeichenbereichs«.
Heißt das, wenn man gezoomte Sprites bearbeiten will, dann geht das nur in ihrer Originalgröße?
Dieser Code funktioniert:
Code: Alles auswählen
StartDrawing(SpriteOutput(varInt_SpriteID))
For varInt_PositionY = 0 To SpriteHeight(varInt_SpriteID)-1
For varInt_PositionX = 0 To SpriteWidth(varInt_SpriteID)-1
Plot(varInt_PositionX, varInt_PositionY, $00FF00)
Next
Next
StopDrawing()
Code: Alles auswählen
ZoomSprite(varInt_SpriteID, SpriteWidth(varInt_SpriteID) * 2, SpriteHeight(varInt_SpriteID) * 2)
StartDrawing(SpriteOutput(varInt_SpriteID))
For varInt_PositionY = 0 To SpriteHeight(varInt_SpriteID)-1
For varInt_PositionX = 0 To SpriteWidth(varInt_SpriteID)-1
Plot(varInt_PositionX, varInt_PositionY, $00FF00)
Next
Next
StopDrawing()
Re: ZoomSprite und SpriteWidth
Ja, da sonst außerhalb des Sprite-Speichers geschrieben wird.4Planes hat geschrieben:...
Heißt das, wenn man gezoomte Sprites bearbeiten will, dann geht das nur in ihrer Originalgröße?
Re: ZoomSprite und SpriteWidth
Vielen Dank für die Aufklärung! Das erklärt, warum mein Code manchmal nicht funktioniert.
Damit stellt sich sich mir jetzt aber die genau umgekehrte Frage vom Anfang: Gibt es eine elegante Möglichkeit, die ursprüngliche Größe eines gezoomten Sprites zu ermitteln, ohne den Wert irgendwo in einer Variable gespeichert zu haben?
Ich weiß, dass man ZoomSprite mit #PB_Default aufrufen kann, aber ich will ja eigentlich die Größe des Sprites beibehalten.
Damit stellt sich sich mir jetzt aber die genau umgekehrte Frage vom Anfang: Gibt es eine elegante Möglichkeit, die ursprüngliche Größe eines gezoomten Sprites zu ermitteln, ohne den Wert irgendwo in einer Variable gespeichert zu haben?
Ich weiß, dass man ZoomSprite mit #PB_Default aufrufen kann, aber ich will ja eigentlich die Größe des Sprites beibehalten.
Re: ZoomSprite und SpriteWidth
Ja diese Möglichkeit gibt es.
Benutze: OutputWidth() und OutputHeight()
Beispiel:
Benutze: OutputWidth() und OutputHeight()
Beispiel:
Code: Alles auswählen
StartDrawing(SpriteOutput(varInt_SpriteID))
For varInt_PositionY = 0 To OutputHeight()-1
For varInt_PositionX = 0 To OutputWidth()-1
Plot(varInt_PositionX, varInt_PositionY, $00FF00)
Next
Next
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: ZoomSprite und SpriteWidth
Vielen Dank für die Hilfe! Funktioniert jetzt tadellos!