ZoomSprite und SpriteWidth

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
4Planes
Beiträge: 37
Registriert: 19.11.2020 17:08

ZoomSprite und SpriteWidth

Beitrag von 4Planes »

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 :allright:
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ZoomSprite und SpriteWidth

Beitrag von ccode_new »

Hallo 4Planes,

deine Aussage:
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.
ist falsch.

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
Benutzeravatar
4Planes
Beiträge: 37
Registriert: 19.11.2020 17:08

Re: ZoomSprite und SpriteWidth

Beitrag von 4Planes »

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:

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()
Dieser hier funktioniert nicht. Da heißt es »Plot() ist außerhalb des Zeichenbereichs«.

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()
Heißt das, wenn man gezoomte Sprites bearbeiten will, dann geht das nur in ihrer Originalgröße?
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: ZoomSprite und SpriteWidth

Beitrag von Mijikai »

4Planes hat geschrieben:...
Heißt das, wenn man gezoomte Sprites bearbeiten will, dann geht das nur in ihrer Originalgröße?
Ja, da sonst außerhalb des Sprite-Speichers geschrieben wird.
Benutzeravatar
4Planes
Beiträge: 37
Registriert: 19.11.2020 17:08

Re: ZoomSprite und SpriteWidth

Beitrag von 4Planes »

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.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ZoomSprite und SpriteWidth

Beitrag von ccode_new »

Ja diese Möglichkeit gibt es.

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
Benutzeravatar
4Planes
Beiträge: 37
Registriert: 19.11.2020 17:08

Re: ZoomSprite und SpriteWidth

Beitrag von 4Planes »

Vielen Dank für die Hilfe! Funktioniert jetzt tadellos!
Antworten