Page 1 of 1
When to call SpriteWidth() and SpriteHeight() ?
Posted: Sun Feb 26, 2023 3:24 pm
by Mijikai
When and where can i request the size of an sprite?
What i tried:
Code: Select all
EnableExplicit
Global s.i
Procedure.i Load()
FlipBuffers()
EndProcedure
Procedure.i Update()
ClearScreen($333344)
DisplayTransparentSprite(s,0,0)
FlipBuffers()
EndProcedure
Procedure.i Render()
If OpenWindow(0,0,0,256,256,#Null$,#PB_Window_BorderLess)
If OpenWindowedScreen(WindowID(0),0,0,WindowWidth(0),WindowHeight(0))
SetFrameRate(60)
BindEvent(#PB_Event_RenderFrame,@Update())
BindEvent(#PB_Event_Loading,@Load())
s = LoadSprite(#PB_Any,"dummy.png",#PB_Sprite_AlphaBlending)
Debug SpriteWidth(s);<- nope!
Debug SpriteHeight(s)
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Render()
Re: When to call SpriteWidth() and SpriteHeight() ?
Posted: Sun Feb 26, 2023 4:13 pm
by Peter
Mijikai wrote: ↑Sun Feb 26, 2023 3:24 pmWhen and where can i request the size of an sprite?
in the Load() - Procedure.
See also the Sprite-Examples in the SpiderBasic-Documentation.
Re: When to call SpriteWidth() and SpriteHeight() ?
Posted: Sun Feb 26, 2023 4:55 pm
by Mijikai
Thanks for the reply, the Sprite example in the Doc does not use Load() to load anything.
Its just some load counter:
Code: Select all
Procedure Loading(Type, Filename$)
Static NbLoadedElements
NbLoadedElements+1
If NbLoadedElements = 1 ; Finished the loading of all images and sounds, we can start the applications
FlipBuffers() ; start the rendering
EndIf
EndProcedure
Is that the place where i can directly access the SpriteWidth/Height() ?
If so how would i get the SpriteId - do i need a Global var/struct ?
Re: When to call SpriteWidth() and SpriteHeight() ?
Posted: Sun Feb 26, 2023 6:24 pm
by Peter
Unlike PureBasic, after a LoadSprite() the object is not immediately available. For this reason you specify with BindEvent(#PB_Event_Loading, ...) the procedure that will be executed when the object is available. Only when this procedure is called, the object is available and you can for example get the dimension of the loaded sprite:
Code: Select all
EnableExplicit
Global mySprite.s = "https://cdn.pixabay.com/photo/2021/07/13/11/34/cat-6463284_960_720.jpg"
Procedure Loaded(Type, Filename$, ObjectId)
Debug "Load: Success"
Debug "Type: " + Type + " (-> #PB_Loading_Sprite)"
Debug "Filename$: " + Filename$
Debug "ObjectId: " + ObjectId
If Filename$ = mySprite
Debug "SpriteWidth: " + SpriteWidth(ObjectId)
Debug "SpriteHeight: " + SpriteHeight(ObjectId)
EndIf
EndProcedure
Procedure LoadingError(Type, Filename$)
Debug Filename$ + ": loading error"
EndProcedure
BindEvent(#PB_Event_Loading, @Loaded())
BindEvent(#PB_Event_LoadingError, @LoadingError())
LoadSprite(#PB_Any, mySprite)
Re: When to call SpriteWidth() and SpriteHeight() ?
Posted: Sun Mar 12, 2023 11:28 am
by AZJIO
I figured out how to control the sprite
Code: Select all
EnableExplicit
Global s.i
Global xx, yy
Global mySprite.s = "Sprite.png"
Procedure TimerEvents()
If EventTimer() = 1
xx + 1
yy + Log(xx)
; Debug xx
; Debug yy
If xx = 70
RemoveWindowTimer(0, 1)
EndIf
EndIf
EndProcedure
Procedure.i Loaded(Type, Filename$, ObjectId)
; Debug "Load: Success"
; Debug "Type: " + Type + " (-> #PB_Loading_Sprite)"
; Debug "Filename$: " + Filename$
; Debug "ObjectId: " + ObjectId
FlipBuffers()
If Filename$ = "Sprite.png"
; Debug "SpriteWidth: " + SpriteWidth(ObjectId)
; Debug "SpriteHeight: " + SpriteHeight(ObjectId)
; RotateSprite(s, 90.0, #PB_Absolute)
AddWindowTimer(0, 1, 50)
BindEvent(#PB_Event_Timer, @TimerEvents())
EndIf
EndProcedure
Procedure LoadingError(Type, Filename$)
Debug Filename$ + ": loading error"
EndProcedure
Procedure.i Update()
ClearScreen($3f3f3f)
; DisplayTransparentSprite(s,0,0)
DisplaySprite(s, xx, yy)
FlipBuffers()
EndProcedure
Procedure.i Render()
If OpenWindow(0,0,0,256,256,#Null$,#PB_Window_BorderLess)
If OpenWindowedScreen(WindowID(0),0,0,WindowWidth(0),WindowHeight(0))
SetFrameRate(60)
BindEvent(#PB_Event_RenderFrame,@Update())
BindEvent(#PB_Event_Loading,@Loaded())
BindEvent(#PB_Event_LoadingError, @LoadingError())
s = LoadSprite(#PB_Any,mySprite,#PB_Sprite_AlphaBlending)
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Render()