a propos des sprites :
j'ai remarqué que lors d'une rotation d'un sprite3D (ou d'un ZOOM)
le sprite obtenu apres rotation, ne fonctionne plus avec les fonction de collision !!
en fait, il ne fonctionne pas avec les nouveaux atribus de l'image du sprite !
tout se passe comme si le sprite n'avais pas subit de transformation !
comme si , qu'il n'y avait QUE l'image du sprite qui avait été transformé
pas le sprite (la cellule ) lui-meme !!
c'est tres embetant surtout avec le ZOOM car on zoom un sprite 8x8
pour en faire un sprite 128x128 et la collision aura lieu , avec la cellule 8x8 , malgres que l'image fasse 128x128 !!
m'expliqu'ai-je bien ?
un bon exemple vaut mieux qu'un grand discourt !:
Code : Tout sélectionner
; prg realisé par Dobro
#dobro=1
#Police=1
#sprite=1
Enumeration
#sprite_cible
#sprite_souris
#sprite_text
#sprite_cible3D
#sprite_souris3D
EndEnumeration
Structure sprite
x.w
y.w
EndStructure
Dim sprite.sprite(1)
Structure balle
x.w
y.w
EndStructure
Dim balle.balle(1)
Dim ecran(640,400)
For x = 0 To 640 ; un écran de couleurs aléatoires
For y = 0 To 400
r=Random(255)
g=Random(255)
b=Random(255)
c=RGB(r,g,b)
ecran(x,y)= c
Next y
Next x
; ***********************************
Resultat = InitSprite()
InitSprite3D()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, 800, 600, #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "hello")
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, 800, 600, 1, 0,0)
CreateSprite( #sprite_cible, 64, 64,#PB_Sprite_Texture) ; sprite exemple
StartDrawing(SpriteOutput( #sprite_cible) ) ; on dessine dedans
Box(0, 0, 64, 64, RGB($FF,$0,$80))
StopDrawing()
CreateSprite3D(#sprite_cible3D,#sprite_cible)
CreateSprite( #sprite_souris, 32, 32,#PB_Sprite_Texture) ; sprite souris
StartDrawing(SpriteOutput( #sprite_souris) ) ; on dessine dedans
;Box(0, 0, 64, 64,RGB($13,$F8,$7))
Circle(16, 16, 16, RGB($13,$F8,$7))
StopDrawing()
CreateSprite3D(#sprite_souris3D,#sprite_souris)
CreateSprite(#sprite_text, 150,14) ; le text
StartDrawing(SpriteOutput(#sprite_text) ) ; on dessine dedans
DrawText(bord$)
StopDrawing()
balle(1)\x=WindowWidth()/2
Resultat = InitMouse()
Repeat
ExamineMouse()
Event=WindowEvent()
sprite(1)\x=WindowWidth()/2
sprite(1)\y=WindowHeight()/2
;- ACTIVER CECI POUR VOIR LE BLEM !!
; ZoomSprite3D(#sprite_cible3D,200, 200) ; ACTIVER CECI POUR VOIRE LE PROBLEMME !!
Start3D()
DisplaySprite3D(#sprite_cible3D, sprite(1)\x, sprite(1)\y, 127)
DisplaySprite3D(#sprite_souris3D, MouseX(), MouseY(), 127)
Stop3D()
DisplaySprite( #sprite_text, 10, 10)
If SpritePixelCollision(#sprite_cible, sprite(1)\x, sprite(1)\y, #sprite_souris, MouseX(), MouseY())<>0
bord$="touché !! "
Else
bord$=" "
EndIf
StartDrawing(SpriteOutput(#sprite_text) ) ; on dessine dedans
DrawingMode(0)
DrawText(bord$)
DrawText(" ")
StopDrawing()
If MouseButton(2)
End
EndIf
FlipBuffers():; affiche l'ecran
ClearScreen(0, 0, 0) :;efface l'ecran
Until Event=#PB_Event_CloseWindow