Haaaaaaaaarg put<BIP !> de scrolling
Publié : lun. 04/oct./2004 12:43
Bon je vous explique
Je cherche a faire un scrolling d'un decore ! Le personnage se deplace sur l'ecran mais des que Xperso>500 le decore scroll et des que Xperso<140 ça scroll dans l'autre sens. Mais je veux que si on arrive au bout du decore le Xperso ne reste pas bloqué a 500 ou 140
Au debut ça me paraissait super simple et puis là je m'arrache les cheveux voici le code :
Il vous faut juste 2 images en 640 par 480 et une autre en 32x32 par exemple qui representera le perso ! et changé le lien vers ses images au debut du code lorsque je charge les sprites....
Dite moi se qui cloche....merci
Thy
Je cherche a faire un scrolling d'un decore ! Le personnage se deplace sur l'ecran mais des que Xperso>500 le decore scroll et des que Xperso<140 ça scroll dans l'autre sens. Mais je veux que si on arrive au bout du decore le Xperso ne reste pas bloqué a 500 ou 140
Au debut ça me paraissait super simple et puis là je m'arrache les cheveux voici le code :
Il vous faut juste 2 images en 640 par 480 et une autre en 32x32 par exemple qui representera le perso ! et changé le lien vers ses images au debut du code lorsque je charge les sprites....
Dite moi se qui cloche....merci
Thy
Code : Tout sélectionner
#Window = 0
#Width = 640
#Height = 480
#Mode_initSp = 0 ;Mod developpement
;- Init DirectX
If InitSprite() = 0 Or InitSprite3D() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
CloseWindow(#Window) : End
EndIf
If #Mode_initSp = 0 Or #Mode_initSp = 1
res = OpenWindow(#Window, 0, 0, #Width, #Height, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Dark Castle Paralaxe" + ver$)
OpenWindowedScreen(res, 0, 0, 800, 600, 0, 0, 0)
Else
OpenScreen( #Width, #Height, 16, "Dark Castle Paralaxe" + ver$ )
EndIf
UsePNGImageDecoder()
TransparentSpriteColor(-1, 255, 0, 255)
Dim Bloc(4,50,30)
Dim Map(100,100)
Global Map
Global Map_X
Global Map_Y
Global Bloc
Global Bloc_X
Global Bloc_Y
Global Perso_X
Global Perso_Y
Perso_X=320
Perso_Y=200
Map(0,0)=600
Map(1,0)=601
Map(2,0)=0
Map(3,0)=0
Map(4,0)=601
Map(0,1)=600
Map(0,2)=600
Map_X=0
Map_Y=0
; chargement des sprites
LoadSprite(1,"data/sprite/hd01.bmp",0)
LoadSprite(600,"data/level/000-b.png",0)
LoadSprite(601,"data/level/002-b.png",0)
;CreateSprite(600,640,480,0)
;CreateSprite(601,640,480,0)
Repeat
ClearScreen(0, 0, 0)
ExamineKeyboard()
ExamineMouse()
If KeyboardPushed(#PB_Key_Up)
Perso_Y=Perso_Y-1
EndIf
If KeyboardPushed(#PB_Key_down)
Perso_Y=Perso_Y+1
EndIf
If KeyboardPushed(#PB_Key_right)
Perso_X=Perso_X+5
EndIf
If KeyboardPushed(#PB_Key_left)
Perso_X=Perso_X-5
EndIf
Map_X=Int(Perso_X/32/20)
Map_Y=Int(Perso_Y/32/15)
Bloc_X=Int(Perso_X/32)
Bloc_Y=Int(Perso_Y/32)
Perso_XT=Perso_X-Map_X*640
Perso_YT=Perso_Y-Map_Y*480
If Perso_XS>500
Decor_X=499-Perso_XT
t=500-Perso_XS
EndIf
If Perso_XS<140 And Perso_XS<>0
Decor_X=140-Perso_XT
EndIf
Perso_XS=Perso_XT+Decor_X
Perso_YS=Perso_YT+Decor_Y
; on affiche le fond d'ecran
DisplaySprite(Map(Map_x,Map_y),Decor_X,Decor_Y)
If Decor_X<0 And Map(Map_X+1,Map_Y)<>0 :DisplaySprite(Map(Map_x+1,Map_y),Decor_X+640,Decor_Y):EndIf
If Decor_X>0 And Map_X>0:DisplaySprite(Map(Map_x-1,Map_y),Decor_X-640,Decor_Y):EndIf
;on affiche le personage
DisplaySprite(1,Perso_XS,Perso_YS)
StartDrawing(ScreenOutput())
;- FPS:
If Val(FormatDate("%ss", Date())) = sek
FPS + 1
Else
FPS$ = Str(FPS)
FPS = 0
EndIf
sek = Val(FormatDate("%ss", Date()))
DrawingMode(1)
FrontColor(255, 255, 255)
Locate(1, 1)
DrawText("FPS: " + FPS$)
Locate(1,20)
DrawText("Map("+Str(Map_X)+","+Str(Map_Y)+") Bloc("+Str(Bloc_X)+","+Str(Bloc_Y)+") Perso("+Str(Perso_XS)+","+Str(Perso_YS)+") Decor("+Str(Decor_X)+","+Str(Decor_Y)+")")
StopDrawing()
FlipBuffers()
If #Mode_initSp = 0 Or #Mode_initSp = 1
While WindowEvent() : Wend ; evite le plantage clic gauche
EndIf
Until KeyboardPushed(#PB_Key_Escape)