ça fait toujours du bien de revenir ici
Je débute mes vacances et j'éspère bien me remettre a programmer... Mais a pas pratiqué qu'est ce qu'on perd ...
C'est pas la première fois que je developpe un moteur pour afficher une map a l'écran... mais là j'ai un bug et je n'arrive pas a trouver.
Normalement je devrais toujours avoir la map qui remplit l'ecran. mais dans certain cas, il manque une ligne...
Voici le code et j'ai directement le zoom et la position qui montre le bug. La ligne ne s'affiche pas en haut
Après vous pouvez zoomer, avec [+] et [-] et vous déplacer avec les flèches. Espace permet d'afficher dans le debugger les valeurs des variables...
ça doit être un truc tout con... Si quelqu'un a la solution voir même juste une piste je suis preneur ...
Merci d'avance
Thyphoon (de nouveau débutant )
Code : Tout sélectionner
EnableExplicit
#FRAME_RATE_RENDERING = 60
If InitKeyboard()=0 Or InitSprite() = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
End
EndIf
Structure Game
ScreenWidth_Pixel.l
ScreenHeight_Pixel.l
RealTileSize_Pixel.l
Zoom.f
EndStructure
Global Game.Game
Game\ScreenWidth_Pixel=1024
Game\ScreenHeight_Pixel=768
Game\RealTileSize_Pixel=64
Define.l RealX,RealY
Game\Zoom=4
RealY=-56
If OpenWindow(0, 0, 0, Game\ScreenWidth_Pixel, Game\ScreenHeight_Pixel, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0), 0, 0, Game\ScreenWidth_Pixel, Game\ScreenHeight_Pixel,0,0,0,#PB_Screen_NoSynchronization)=#False
MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
End
EndIf
EndIf
Define Event.i ;All Windows Event
Repeat
; Il est très important de traiter tous les évènements restants dans la file d'attente à chaque tour
;
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
; Frame Rate
Define.i LPS,LPS_C,LPS_T,CheckTime; = ElapsedMilliseconds()
Define.l FPS,FPS_C
If LPS_T < ElapsedMilliseconds()
LPS_T = ElapsedMilliseconds() + 1000
LPS = LPS_C
FPS = FPS_C
LPS_C = 0
FPS_C = 0
Else
LPS_C + 1
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Add)
Game\Zoom=Game\Zoom+0.125
EndIf
If KeyboardPushed(#PB_Key_Subtract)
Game\Zoom=Game\Zoom-0.125
EndIf
If KeyboardPushed(#PB_Key_Left)
RealX=RealX-1
EndIf
If KeyboardPushed(#PB_Key_Right)
RealX=RealX+1
EndIf
If KeyboardPushed(#PB_Key_Up)
RealY=RealY-1
EndIf
If KeyboardPushed(#PB_Key_Down)
RealY=RealY+1
EndIf
;Control Frame Rate
If (ElapsedMilliseconds() > CheckTime + 1000 / #FRAME_RATE_RENDERING)
CheckTime = ElapsedMilliseconds()
FPS_C + 1
Define.l TileSize_Screen_Pixel
Define.l ScreenWidth_Tile, ScreenHeight_Tile
Define.f TileDeltaH_Screen_Tile,TileDeltaV_Screen_Tile
Define.f TileDeltaH_Screen_Pixel,TileDeltaV_Screen_Pixel
Define.f CenterX_Screen_Pixel,CenterY_Screen_Pixel
Define.f CenterX_Screen_Tile,CenterY_Screen_Tile
ClearScreen(RGB(0, 0, 0))
TileSize_Screen_Pixel=Game\RealTileSize_Pixel*Game\Zoom
ScreenWidth_Tile=Round(Game\ScreenWidth_Pixel/TileSize_Screen_Pixel,#PB_Round_Up )+1
ScreenHeight_Tile=Round(Game\ScreenHeight_Pixel/TileSize_Screen_Pixel,#PB_Round_Up )+1
TileDeltaH_Screen_Tile=Int(RealX/Game\RealTileSize_Pixel)
TileDeltaV_Screen_Tile=Int(RealY/Game\RealTileSize_Pixel)
TileDeltaH_Screen_Pixel=(RealX-(TileDeltaH_Screen_Tile * Game\RealTileSize_Pixel))*Game\Zoom
TileDeltaV_Screen_Pixel=(RealY-(TileDeltaV_Screen_Tile * Game\RealTileSize_Pixel))*Game\Zoom
CenterX_Screen_Pixel=Int(Game\ScreenWidth_Pixel/2)
CenterY_Screen_Pixel=Int(Game\ScreenHeight_Pixel/2)
CenterX_Screen_Tile=Round(ScreenWidth_Tile/2,#PB_Round_Up)
CenterY_Screen_Tile=Round(ScreenHeight_Tile/2,#PB_Round_Up)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
Define.l TileV,TileH
For TileV=0 To ScreenHeight_Tile
For TileH=0 To ScreenWidth_Tile
Define.l TileX_Screen_Pixel,TileY_Screen_Pixel
TileX_Screen_Pixel=CenterX_Screen_Pixel-CenterX_Screen_Tile*TileSize_Screen_Pixel-TileDeltaH_Screen_Pixel+(TileH*TileSize_Screen_Pixel)
TileY_Screen_Pixel=CenterY_Screen_Pixel-CenterY_Screen_Tile*TileSize_Screen_Pixel-TileDeltaV_Screen_Pixel+(TileV*TileSize_Screen_Pixel)
Define.l TileX_Real_Tile,TileY_Real_Tile
TileX_Real_Tile=TileH+TileDeltaH_Screen_Tile-CenterX_Screen_Tile
TileY_Real_Tile=TileV+TileDeltaV_Screen_Tile-CenterY_Screen_Tile
Box(TileX_Screen_Pixel,TileY_Screen_Pixel,TileSize_Screen_Pixel,TileSize_Screen_Pixel,#Red)
DrawText(TileX_Screen_Pixel,TileY_Screen_Pixel,Str(TileX_Real_Tile)+","+Str(TileY_Real_Tile),#White)
DrawText(TileX_Screen_Pixel,TileY_Screen_Pixel+12,Str(TileH),#Red)
Next
Next
If KeyboardReleased(#PB_Key_Space)
Debug "-------"
Debug "TileSize_Screen_Pixel:"+Str(TileSize_Screen_Pixel)
Debug "ScreenWidth_Tile:"+Str(ScreenWidth_Tile)
Debug "ScreenHeight_Tile:"+Str(ScreenHeight_Tile)
Debug "TileDeltaH_Screen_Tile:"+Str(TileDeltaH_Screen_Tile)
Debug "TileDeltaV_Screen_Tile:"+Str(TileDeltaV_Screen_Tile)
Debug "Game\Zoom:"+StrF(Game\Zoom)
Debug "RealX:"+Str(RealX)
Debug "RealY:"+Str(RealY)
Debug "CenterX_Screen_Pixel:"+CenterX_Screen_Pixel
Debug "CenterX_Screen_Pixel:"+CenterY_Screen_Pixel
Debug "CenterX_Screen_Tile"+StrF(CenterX_Screen_Tile)
Debug "CenterY_Screen_Tile"+StrF(CenterY_Screen_Tile)
Debug "ScreenWidth_Tile:"+Str(ScreenWidth_Tile)
Debug "ScreenHeight_Tile:"+Str(ScreenHeight_Tile)
Debug "TileDeltaH_Screen_Pixel:"+StrF(TileDeltaH_Screen_Pixel)
Debug "TileDeltaV_Screen_Pixel:"+StrF(TileDeltaV_Screen_Pixel)
TileH=0
Debug "TileV=0 TileX_Screen_Pixel:"+Str(CenterX_Screen_Pixel-CenterX_Screen_Tile*TileSize_Screen_Pixel-TileDeltaH_Screen_Pixel+(TileH*TileSize_Screen_Pixel))
TileV=0
Debug "TileV=0 TileY_Screen_Pixel:"+Str(CenterY_Screen_Pixel-CenterY_Screen_Tile*TileSize_Screen_Pixel-TileDeltaV_Screen_Pixel+(TileV*TileSize_Screen_Pixel))
EndIf
Circle(CenterX_Screen_Pixel,CenterY_Screen_Pixel,3,#Green)
DrawText(10,90,"Loop per second : "+Str(LPS),$5A5A5A)
DrawText(10,130,"Frame rate : "+Str(FPS),$5A5A5A)
DrawText(10,10,"ScreenWidth_Tile:"+StrF(ScreenWidth_Tile),$eeeeee)
DrawText(10,20,"ScreenHeight_Tile:"+StrF(ScreenHeight_Tile),$eeeeee)
StopDrawing()
FlipBuffers()
EndIf
Delay(1)
ForEver