si il sort de l'ecran ...
l'entre du sprite dans l'ecran, ça passe a peut prés (sans être trop regardant, mais la sortie ç'est du grand n'imp )
Code : Tout sélectionner
;*******************************************************************************************************
;- déclarations des procedures
;*******************************************************************************************************
Declare msg_erreur(Chaine$)
;*******************************************************************************************************
;DisableDebugger
;- test du materiel
;*******************************************************************************************************
If InitSprite()=0
msg_erreur("impossible d'initialiser les sprites"+Chr(10)+" le prg va quitter ")
End
EndIf
If InitMouse()=0
msg_erreur("impossible d'initialiser la souris"+Chr(10)+" le prg va quitter ")
End
EndIf
If InitKeyboard()=0
msg_erreur("impossible d'initialiser le clavier"+Chr(10)+" le prg va quitter ")
End
EndIf
If InitJoystick()=0
msg_erreur("impossible d'initialiser le joystick"+Chr(10)+" on va continuer sans ")
joystick=0
Else
joystick=1 ; le joystick est present !!
EndIf
;*******************************************************************************************************
;-initialisations constante structure tableaux variables
;*******************************************************************************************************
Enumeration
#win
EndEnumeration
Enumeration
#degrade
#sprite_lettre
#sprite_lettre_final
EndEnumeration
Enumeration
#police
EndEnumeration
Largeur_screen=1024
Hauteur_screen=768
Structure degrade
x.w
y.w
sensx.l
sensy.l
EndStructure
degrade.degrade
degrade\sensy.l=10
degrade\sensx.l=0
degrade\x.w=0
degrade\y.w=0
Largeur_degrade=Largeur_screen
Hauteur_degrade=Hauteur_screen
; ****************************************
Structure sprite
x.w
y.w
sensx.l
sensy.l
EndStructure
sprite.sprite
sprite\sensy.l=0
sprite\sensx.l=10
sprite\x.w=-Largeur_screen
sprite\y.w=hauteur_screen/2
Largeur_sprite=500
Hauteur_sprite=100
;-ouvre ecran
;*******************************************************************************************************
Openwindow(#win,1,1,Largeur_screen,Hauteur_screen,"test",#PB_Window_SystemMenu |#PB_Window_ScreenCentered )
OpenwindowedScreen(WindowId(#win),1,1,Largeur_degrade, Hauteur_degrade,1, 1,1,#PB_Screen_WaitSynchronization )
KeyboardMode(1)
;*******************************************************************************************************
;-creation Sprite de fond
;*******************************************************************************************************
CreateSprite(#degrade,Largeur_degrade, Hauteur_degrade,32)
StartDrawing( SpriteOutput(#degrade))
Box(1, 1, Largeur_degrade, Hauteur_degrade, $0)
DrawingMode(#PB_2DDrawing_Gradient)
BackColor($0)
;FrontColor($F102FC)
;LinearGradient(0, 0, 0, Hauteur_degrade)
;BoxedGradient(1, 1, Largeur_degrade, Hauteur_degrade)
For i=0 To 255
GradientColor(0.4, rgb(i,0,0))
GradientColor(0.8,rgb(0,i,0))
GradientColor(0.16,rgb(0,0,i))
GradientColor(0.32,rgb(0,i,i))
GradientColor(0.64,rgb(i,i,0))
Next i
LinearGradient(0, 0, 0, Hauteur_degrade)
Box(1, 1, Largeur_degrade, Hauteur_degrade)
StopDrawing()
;*******************************************************************************************************
;-creationSprite_lettre
LoadFont(#Police, "Verdana", 50 ,#PB_Font_Bold)
SystemParametersInfo_(#SPI_SETFONTSMOOTHING,#False,0,0)
CreateSprite(#sprite_lettre,Largeur_sprite, Hauteur_sprite)
TransparentSpriteColor(#sprite_lettre, rgb(0,255,255)) ; couleur qui sert a la transparence
StartDrawing( SpriteOutput(#sprite_lettre))
DrawingFont(FontID(#Police))
DrawText(1, 1, "By Dobro", rgb(0,255,255) , $0) ; on ecrit donc en transparent sur fond noir
StopDrawing()
SystemParametersInfo_(#SPI_SETFONTSMOOTHING,#True,0,0)
;*******************************************************************************************************
;-boucle principale
Repeat
WaitWindowEvent(20)
;- Examine le materiel
;*******************************************************************************************************
ExamineKeyboard()
ExamineMouse()
;*******************************************************************************************************
;- logique de deplacement
;*******************************************************************************************************
degrade\y.w=degrade\y.w+degrade\sensy.l
degrade\x.w=degrade\x.w+degrade\sensx.l
if degrade\y.w>Hauteur_screen/2
degrade\sensy.l=-degrade\sensy.l
Endif
if degrade\y.w<1
degrade\sensy.l=-degrade\sensy.l
Endif
if degrade\x.w>largeur_screen/2
degrade\sensx.l=-degrade\sensx.l
Endif
if degrade\x.w<1
degrade\sensx.l=-degrade\sensx.l
Endif
; *************
;-deplacement sprite lettre
;*************
sprite\y.w=sprite\y.w+sprite\sensy.l
sprite\x.w=sprite\x.w+sprite\sensx.l
if sprite\y.w>(hauteur_screen-hauteur_sprite-10)
sprite\sensy.l=-sprite\sensy.l
Endif
if sprite\y.w<10
sprite\sensy.l=-sprite\sensy.l
Endif
if sprite\x.w>(largeur_screen)
;sprite\sensx.l=-sprite\sensx.l
sprite\x.w=0-largeur_screen
Endif
if sprite\x.w<1
;sprite\sensx.l=-sprite\sensx.l
Endif
;*******************************************************************************************************
;-affichage des sprites
;*******************************************************************************************************
DisplaySprite(#degrade,degrade\x.w,degrade\y.w)
DisplaytransparentSprite(#sprite_lettre,sprite\x,sprite\y)
; ******* with GrabSprite *******************
If sprite\x<1 and (sprite\x+largeur_sprite) >1
if GrabSprite( #sprite_lettre_final,1,sprite\y,largeur_sprite,hauteur_sprite) ; ; arrive par la gauche
goto sui
Endif
Endif
if sprite\x>1 and (sprite\x+largeur_sprite) <largeur_screen
if GrabSprite( #sprite_lettre_final,sprite\x,sprite\y,largeur_sprite,hauteur_sprite); dans l'ecran
goto sui
Endif
Endif
IF (sprite\x)>1 and sprite\x+largeur_sprite>=largeur_screen
if GrabSprite( #sprite_lettre_final,sprite\x,sprite\y,largeur_screen,hauteur_sprite) ; ; sort de l'ecran a droite
goto sui
Endif
endif
sui:
; *************************************************
; ************ without Grabsprite ***********************
;DisplaytransparentSprite(#sprite_lettre,sprite\x,sprite\y)
;*******************************************************************************************************
ClearScreen($0) ; nettoie l'ecran apres capture
if IsSprite(#sprite_lettre_final)
DisplaytransparentSprite(#sprite_lettre_final,sprite\x,sprite\y)
Endif
FlipBuffers() ; affiche le resultat a l'ecran !
ClearScreen(RGB(0, 0,0)) ; nettoie l'ecran apres affichage
; ******* with GrabSprite *******************
if IsSprite(#sprite_lettre_final)
FreeSprite(#sprite_lettre_final)
Endif
; *************************************************
Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(2)
End
; ********* Zone des sous-programme ******************
; **************** Zone des procedures ******************
Procedure msg_erreur(Chaine$)
MessageRequester("erreur", Chaine$, #PB_MessageRequester_Ok )
EndProcedure
; *************************************************************
;
; Epb