Voici un code tout bête avec une map dont le personnage sera toujours au centre de l’écran avec un scrolling classique
Hors j'ai besoin d'avoir les coordonnées du tile sous le curseur, jusqu’à présent j'avais pas eu de souci ... mais voilà j'ai besoin aussi des coordonnées négatif... et là ça se complique
tout ce qui est positif est bon, mais pas ce qui est négatif
mais rien ne vaut un code plutôt qu'un long discourt. passer le curseur sur les tiles au tour du center de l'ecran. les coordonées calculer sont marqué en haut de l'ecran (mouseX et mouseY)
le calcul des coordonnées du tile sous le curseur est a la ligne 59,60 ! si vous avez une idée je suis plus que preneur ... car ça fait 2 jours que je sèche là dessus.
Merci d'avance ...
Code : Tout sélectionner
screenPixelWidth=1024
screenPixelheight=600
spriteSize=64
backgroundColor=#White
If InitSprite() And InitSprite3D() And InitSound() And InitNetwork()
If InitKeyboard() And InitMouse()
winMain = OpenWindow(#PB_Any,0,0,screenPixelWidth,screenPixelHeight,"Press [Esc] to close",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(winMain), 0, 0,screenPixelWidth,screenPixelHeight, 1, 0, 0)
UsePNGImageDecoder()
UseJPEGImageDecoder()
SetFrameRate(60)
EndIf
Else
MessageRequester("","Unable to initsprite") :
EndIf
Repeat
Delay(1)
EventID = WindowEvent()
ExamineKeyboard()
ExamineMouse()
ClearScreen(0)
StartDrawing(ScreenOutput())
tileWidth=Int(screenPixelWidth/spriteSize)+1
tileHeight=Int(screenPixelWidth/spriteSize)+1
If KeyboardPushed(#PB_Key_Left)
rx=rx-1
EndIf
If KeyboardPushed(#PB_Key_Right)
rx=rx+1
EndIf
If KeyboardPushed(#PB_Key_Up)
ry=ry-1
EndIf
If KeyboardPushed(#PB_Key_Down)
ry=ry+1
EndIf
focusTileX=Int(rx/spriteSize)
focusTileY=Int(ry/spriteSize)
deltaX=rx-focusTileX*spriteSize
deltaY=ry-focusTileY*spriteSize
;coordonée du centre de l'ecran en pixel
centerScreenX=screenPixelWidth/2
centerScreenY=screenPixelHeight/2
;coordonée du centre d el'ecran en tile
centerTileX=Int(centerScreenX/spriteSize)
centerTileY=Int(centerScreenY/spriteSize)
;décalage qu'il y a du fait d'une position par rapport au centre de l'ecran
GDeltaX=centerScreenX-Int(centerScreenX/spriteSize)*spriteSize
GDeltaY=centerScreenY-Int(centerScreenY/spriteSize)*spriteSize
;Calcul du Tile sous le curseur
cursX=focusTileX+Int((MouseX()-centerScreenX)/spritesize)
cursY=focusTileY+Int((MouseY()-centerScreenY)/spritesize)
For x=-1 To tileWidth
For y=-1 To tileHeight
tx=x*spriteSize-deltaX+GDeltaX
ty=y*spriteSize-deltaY+GDeltaY
Box(tx,ty,spriteSize-1,spriteSize-1,#Green)
DrawText(tx+2,ty+2,Str(x+focusTileX-centerTileX)+" "+Str(y+focusTileY-centerTileY))
Next
Next
DrawText(20,20," MouseX:"+Str(cursX)+" MouseY:"+Str(cursY)+" cx:"+Str(focusTileX)+" cy:"+Str(focusTileY)+" size:"+Str(focusTileY))
Circle(MouseX(),MouseY(),4,#Red)
Circle(centerScreenX,centerScreenY,4,#Black)
StopDrawing()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape) Or EventID = #PB_Event_CloseWindow