il s'agit d'un moteur de rpg mais je n'arrive pas a avoir un scrolling satisfaisant.
c'est un moteur par tuiles, et j'affiche plusieurs couches sur certaines cases.
seulement voila quand je me déplace les colonnes semble avoir des traits plus epais. est-ce un problème hardware du a mon écran lcd par exemple ou est-ce un problème dans ma routine ?
pour moi je n'ai pas ce problème dans les jeux (ou bien je ne le remarque pas) mais là c'est flagrant.
j'avoue que je ne suis pas un pro de ce genre de routines en pure et sans doute il y a matière a optimisation ou procéder complétement différemment.
si quelqu'un a un meilleur résultat en terme d'affichage je suis preneur.
déplacement de cases en cases mais avec scrolling .
image des tuiles

Code : Tout sélectionner
;---------------all inits
InitSprite()
InitSprite3D()
InitSound()
InitNetwork()
InitKeyboard()
UsePNGImageDecoder()
;---------------mainwindow
Global main=OpenWindow(#PB_Any,0,0,800,600,"",#PB_Window_ScreenCentered)
Global out=OpenWindowedScreen(WindowID(main),0,0,800,600,0,0,0)
Structure board_case
List tile.i() ; tiles a afficher dans la case
blocked.b ; deplacement possible si a 0 impossible si a 1
EndStructure
;---------------load tileset
tileset=LoadImage(#PB_Any,"gfx\tiles.png")
StartDrawing(ScreenOutput())
DrawImage(ImageID(tileset),0,0)
StopDrawing()
TransparentSpriteColor(#PB_Default,$ff00ff)
tile1=GrabSprite(#PB_Any,0,0,32,32,#PB_Sprite_Texture)
tile2=GrabSprite(#PB_Any,32,0,32,32,#PB_Sprite_Texture)
tile3=GrabSprite(#PB_Any,64,0,32,32,#PB_Sprite_Texture)
tile4=GrabSprite(#PB_Any,96,0,32,32,#PB_Sprite_Texture)
tile5=GrabSprite(#PB_Any,128,0,32,32,#PB_Sprite_Texture)
;create 3D sprites
Dim spr(5)
spr(1)=CreateSprite3D(#PB_Any,tile1)
spr(2)=CreateSprite3D(#PB_Any,tile2)
spr(3)=CreateSprite3D(#PB_Any,tile3)
spr(4)=CreateSprite3D(#PB_Any,tile4)
spr(5)=CreateSprite3D(#PB_Any,tile5)
zMapSize=15
Dim board.board_case(zMapSize,zMapSize)
For x=0 To zMapSize
For y=0 To zMapSize
AddElement(board(x,y)\tile())
board(x,y)\tile()=Random(1)+1
If Random(100)<=15
AddElement(board(x,y)\tile())
board(x,y)\blocked=1
board(x,y)\tile()=5
If y-1>=0
Repeat
LastElement(board(x,y-1)\tile())
If ListIndex(board(x,y-1)\tile())<3
AddElement(board(x,y-1)\tile())
EndIf
Until ListIndex(board(x,y-1)\tile())=3
board(x,y-1)\tile()=4
EndIf
EndIf
Next
Next
xmin=-8
ymin=-8
xmax=zMapSize-8
ymax=zMapSize-8
xv=0
yv=0
spd=2
Repeat
WaitWindowEvent(0)
;Delay(1)
FlipBuffers()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Space)
Select sens
Case 0 ; look up
If yy>ymin
board(xx+8,yy+8-1)\blocked=Abs(board(xx+8,yy+8-1)\blocked-1)
EndIf
Case 1 ; look right
If xx<xmax
board(xx+8+1,yy+8)\blocked=Abs(board(xx+8+1,yy+8)\blocked-1)
EndIf
Case 2 ; look down
If yy<ymax
board(xx+8,yy+8+1)\blocked=Abs(board(xx+8,yy+8+1)\blocked-1)
EndIf
Case 3 ; look left
If xx>xmin
board(xx+8-1,yy+8)\blocked=Abs(board(xx+8-1,yy+8)\blocked-1)
EndIf
EndSelect
EndIf
If KeyboardPushed(#PB_Key_Up) And mvv2=0 And yy>ymin And ss2=0 And ss=0
sens=0
If board(xx+8,yy+8-1)\blocked=0
mvv2-spd
ss2=-1
EndIf
EndIf
if keyboardpushed(#pb_key_escape)
end
endif
If KeyboardPushed(#PB_Key_Down)And mvv2=0 And yy<ymax And ss2=0 And ss=0
sens=2
If board(xx+8,yy+8+1)\blocked=0
mvv2+spd
ss2=1
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left) And mv2=0 And xx>xmin And ss2=0 And ss=0
sens=3
If board(xx+8-1,yy+8)\blocked=0
mv2-spd
ss=-1
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right)And mv2=0 And xx<xmax And ss2=0 And ss=0
sens=1
If board(xx+8+1,yy+8)\blocked=0
mv2+spd
ss=1
EndIf
EndIf
If ss2<>0
mvv2+SS2*spd
EndIf
If ss<>0
mv2+SS*spd
EndIf
ClearScreen($777777)
Start3D()
If mv2=32
mv2=0
xx+1
ss=0
EndIf
If mv2=-32
mv2=0
If xx>xmin
xx-1
EndIf
ss=0
EndIf
If mvv2=32
mvv2=0
yy+1
ss2=0
EndIf
If mvv2=-32
mvv2=0
If yy>ymin
yy-1
EndIf
ss2=0
EndIf
If xx<xmin:xx=xmin:EndIf
If yy<ymin:yy=ymin:EndIf
If xx>zMapSize:xx=zMapSize:EndIf
If yy>zMapSize:yy=zMapSize:EndIf
For viewy=-1 To 20
For viewx=-1 To 25
If viewx+xx>=0 And viewy+yy>=0 And viewx+xx<=zMapSize And viewy+yy<=zMapSize
FirstElement(board((viewx+xx),(viewy+yy))\tile())
DisplaySprite3D(spr(board((viewx+xx),(viewy+yy))\tile()),(viewx)*32-mv2,(viewy)*32-mvv2)
EndIf
Next
Next
DisplaySprite3D(spr(3),256,256)
For viewy=-1 To 20
For viewx=-1 To 25
If viewx+xx>=0 And viewy+yy>=0 And viewx+xx<=zMapSize And viewy+yy<=zMapSize
ForEach(board((viewx+xx),(viewy+yy))\tile())
If ListIndex(board((viewx+xx),(viewy+yy))\tile())>0
If IsSprite3D(spr(board((viewx+xx),(viewy+yy))\tile()))
DisplaySprite3D(spr(board((viewx+xx),(viewy+yy))\tile()),(viewx)*32-mv2,(viewy)*32-mvv2)
EndIf
EndIf
Next
EndIf
Next
Next
Stop3D()
ForEver