SpriteX() SpriteY()

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

SpriteX() SpriteY()

Message par falsam »

■ En 3D il est possible d'avoir les coordonnées d'une entité avec les fonctions EntityX(), EntityY() et EntityZ()

Serait il possible d'avoir la même chose en 2D avec les fonctions SpriteX() et SpriteY() ?

■ Serait il possible aussi d'avoir une fonction pour déplacer en pourcentage le point de rotation (ou d'ancrage) d'un sprite ? Exemple: AnchorSprite(Sprite, 0, 0.5)

AnchorSprite(Sprite, 0.5, 0.5) permet d'avoir un point d'ancrage au milieu.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: SpriteX() SpriteY()

Message par microdevweb »

Il est vrai que cette fonction AnchorSprite(Sprite, 0.5, 0.5), serait bien utile ainsi qu'un FlipSprite() (sans devoir passé par TransformSprite() beaucoup plus compliqué)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SpriteX() SpriteY()

Message par blendman »

pour le flipsprite() avec transformsprite(), ça ne marche pas (sauf en openGL)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SpriteX() SpriteY()

Message par falsam »

blendman a écrit :pour le flipsprite() avec transformsprite(), ça ne marche pas (sauf en openGL)
Comment ça ? mais que nénni mon bon Blendman

Code : Tout sélectionner

#Sprite0 = 0
#Sprite1 = 1
#Sprite2 = 2
#Sprite3 = 3


If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Ooops ", "Impossible d'intialiser DirectX", 0)
  End
EndIf

Win = OpenWindow(#PB_Any, 0, 0, 800, 600, "Sprite Rotation", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(win), 0, 0, WindowWidth(win), WindowHeight(win))

;Disable Backface Culling
Define pd3d.IDirect3DDevice9

EnableASM
  !extrn _PB_Screen_Direct3DDevice
  !MOV dword EAX, [_PB_Screen_Direct3DDevice]
  !MOV dword [v_pd3d],EAX
DisableASM
pd3d\SetRenderState(22,1)
pd3d\SetRenderState(7,0)

;Define font
fontID=LoadFont(0, "Arial", 22, #PB_Font_Bold|#PB_Font_HighQuality|#PB_Font_Italic)

;Create #Sprite0
CreateSprite(#Sprite0, 200, 65, #PB_Sprite_AlphaBlending)

StartDrawing(SpriteOutput(#Sprite0))

  ;Text
  Box(0, 0, 200, 65, RGB(0, 0, 0))
  DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend)
  DrawingFont(fontID)
  DrawText(20, 10, "PURE BASIC", RGBA(255, 255, 255, 255))
  
  ;Left border
  DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)
  BackColor(RGBA(255, 255, 0, 255))
  GradientColor(0.8, RGBA(255, 0, 0, 50))
  FrontColor(RGBA(200, 70, 10, 255))
  LinearGradient(0, 0, 0, 65)
  Box(0, 0, 16, 65)      
    
  ResetGradientColors()
  BackColor(RGBA(255, 255, 255, 255))
  GradientColor(0.6, RGBA(150, 150, 150, 255))
  FrontColor(RGBA(255, 255, 255, 255))
  LinearGradient(25, 53, 30, 70)
  For i=0 To 8
    Box(20+i*20, 45, 10, 10)
  Next
  
  ;Sprite and border outline
  DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_AlphaBlend)
  FrontColor(RGBA(255, 255, 255, 255))
  Box(0, 0, 200, 65) ;Sprite
  Box(0, 0, 16, 65)  ;Left border 
StopDrawing()

TransparentSpriteColor(#Sprite0, RGB(0, 0, 0))

;three other sprites
CopySprite(#Sprite0, #Sprite1)
CopySprite(#Sprite0, #Sprite2)
CopySprite(#Sprite0, #Sprite3)

Rh = 1
Rv = 1

Repeat
  
  ClearScreen(RGB(0,0,0))
  
  ;#Sprite0 : Horizontal Rotate
  x+Rh
  TransformSprite(#Sprite0, x,0, SpriteWidth(#Sprite0)-x,0, SpriteWidth(#Sprite0)-x,SpriteHeight(#Sprite0), x, SpriteHeight(#Sprite0))     
  
  If x>SpriteWidth(#Sprite0) ;
    Rh=-1
  ElseIf X=0
    Rh=1
  EndIf
  
  ;#Sprite1 : Vertical Rotate
  y+Rv
  TransformSprite(#Sprite1, 0,y, SpriteWidth(#Sprite1),y, SpriteWidth(#Sprite1),SpriteHeight(#Sprite1)-y, 0,SpriteHeight(#Sprite1)-y)     
  
  If y>SpriteHeight(#Sprite1)
    Rv=-1
  ElseIf y=0
    Rv=1
  EndIf
  
  ;#Sprite2 : Vertical Rotate 
  RotateSprite(#Sprite2, 1, #PB_Relative)
  RotateSprite(#Sprite3, 180, #PB_Absolute)

  ;Show sprites
  DisplayTransparentSprite(#Sprite0, 150, 100)    
  DisplayTransparentSprite(#Sprite1, 450, 100)
  DisplayTransparentSprite(#Sprite2, 150, 350)         
  DisplayTransparentSprite(#Sprite3, 450, 350)         
  
  ExamineMouse()
  ExamineKeyboard()
    
  FlipBuffers()

  Until KeyboardPushed(#PB_Key_Escape)
End   
Try this code :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SpriteX() SpriteY()

Message par blendman »

Chez moi, avec pb 5.31/Win8, j'ai un polink error (j'ai désactivé l'unicode, même résultat).

Message :
unresolved external symbol _pb_screen_direct3D_device
( ça doit être la ligne 19).

Par contre, ça marche avec pb 5.22 ;)
dommage, là, je code animatoon sur la 5.31, car des bugs sont corrigés dessus (les blendmodes)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: SpriteX() SpriteY()

Message par falsam »

Fonctionne avec la version 5.31 (x86) sous Windows 7 & 8
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: SpriteX() SpriteY()

Message par blendman »

falsam a écrit :Fonctionne avec la version 5.31 (x86) sous Windows 7 & 8
je vais installer la x86 pour tester ça ;).
Répondre