Scrolling Map

Programmation avancée de jeux en PureBasic
allasktulu
Messages : 34
Inscription : sam. 29/nov./2008 22:42

Scrolling Map

Message par allasktulu »

Bonjour, j'essai de faire un petit "map maker" pour le fun mais jai un probleme avec le scrolling.

Tout fonctionne sauf si je scroll. Quand je Leftclick au coup la map scrollé, la tiles est égaré. (Vous aller voir si vous le tester parce que c'est dur a dire :lol: )

Voici le code:

Les Images #R_Gui et B_Gui peuvent etre changer.

Code : Tout sélectionner

;*********************************************************************************** 
;{- Initiation
;*********************************************************************************** 
InitKeyboard() 
InitSprite() 
InitSprite3D()
InitMouse() 

OpenScreen(1024,768,32,"") 

;}
;*********************************************************************************** 
;{- Stuff
;*********************************************************************************** 
  
Enumeration 
  #efface 
  #Mur 
  #herbe 
  #Pointeur 
  #Selection 
  #R_Hud
  #B_Hud
EndEnumeration 

Structure Map_struct 
  x.f 
  y.f 
  Bloc_Type.l 
EndStructure 

#MapW = 100 ;32;25
#MapH = 100 ;24;18
#TileSize = 32

Scrolling_X=0
Scrolling_Y=0

Scrolling_vitesse = 10.0 

AffichPointeur          = 0 
AffichHerbe             = 0 
AffichMur               = 0 
AffichSelection         = 0 
AffichSelectionPointeur = 0 
AffichSelectionMur      = 0 
AffichSelectionHerbe    = 0 

Global Dim Map.Map_struct(#MapW,#MapH) 

For y = 0 To #MapH 
  For x = 0 To #MapW 
    Map(x,y)\x = x * #TileSize
    Map(x,y)\y = y * #TileSize
    Map(x,y)\Bloc_Type = #efface 
  Next x 
Next y 

;800/32
;600/32
;}
;*********************************************************************************** 
;{- Sprite
;*********************************************************************************** 

CreateSprite(#efface,32,32) 

CreateSprite(#Mur,32,32) 
StartDrawing(SpriteOutput(#Mur)) 
  Box(0,0,32,32,RGB($41,$61,$F5)) 
  For i = 0 To 100 
    Line(Random(32) , Random(32) , 10, 10, RGB($5E,$C4,$D9)) 
  Next 
StopDrawing() 

CreateSprite(#herbe,32,32) 
StartDrawing(SpriteOutput(#herbe)) 
  Box(0,0,32,32,RGB($FA,$3D,$3D)) 
  For i = 0 To 100 
    Plot(Random(31) , Random(31) , RGB($F9,$FF,$AE)) 
  Next 
StopDrawing() 

CreateSprite(#Pointeur,34,34) 
StartDrawing(SpriteOutput(#Pointeur)) 
  DrawingMode(4) 
  Box(0,0,34 ,34 ,RGB($54,$F5,$50)) 
StopDrawing() 

LoadSprite(#R_Hud,"r_hud.bmp")
LoadSprite(#B_Hud,"b_hud.bmp")

;}
;*********************************************************************************** 
;{- Loop
;*********************************************************************************** 

Repeat 
  
  ClearScreen(RGB(0,0,0) )
  ;affiche la map 
  For v=0 To #MapH  
    For u=0 To #MapW  
      DisplaySprite ( Map(u,v)\Bloc_Type , Map(u,v)\x - Scrolling_X , Map(u,v)\y - Scrolling_Y) 
      ;DisplaySprite(Map(u+Scrolling_X,v+Scrolling_Y),u*#TileSize,v*#TileSize) 
    Next u 
  Next v  
  ExamineKeyboard() 
  
  DisplaySprite(#R_Hud,801,0)
  DisplaySprite(#B_Hud,0,601)
  DisplaySprite(#Mur,950 , 100) ;bleu
  DisplaySprite(#herbe,950 , 150) ;rouge
  DisplaySprite(#Pointeur,950 , 200) 
  ;DisplaySprite(#Selection,0 , 0) 
  
  ExamineMouse()                        
  
  x = MouseX() 
  y = MouseY() 
  
  
  If AffichPointeur = 0  
    DisplayTransparentSprite(#Pointeur,x-SpriteWidth(0)/100, y-SpriteHeight(0)/100) 
    TransparentSpriteColor(#Pointeur, RGB($0,$0,$0) )
  EndIf 
  
  If MouseButton(1) 
    If x > 950 And y > 150 And y < 182 And x < 982    
      
      AffichHerbe    = 1 
      AffichPointeur = 1 
      AffichMur      = 0 
      
    EndIf 
    
    
    If x > 950 And y > 200 And y < 232 And x < 982 ;250
      
      AffichPointeur     = 0 
      AffichSelection    = 0 
      AffichSelectionMur = 0 
      AffichSelectionHerbe = 0 
      
    EndIf 
    
    
    If x > 950 And y > 100 And y < 132 And x < 982  
      
      AffichPointeur = 1 
      AffichMur      = 1 
      AffichHerbe    = 0 
      
    EndIf 
    ; test si dans la map 
    If x<#MapW*#TileSize  And y<#MapH*#TileSize
      tx=x/#TileSize  
      ty=y/#TileSize 
      If AffichHerbe 
        Map(tx,ty)\Bloc_Type = #herbe 
      ElseIf AffichMur 
        Map(tx,ty)\Bloc_Type =#Mur 
      EndIf 
    EndIf  
  EndIf 
  
  ;Si bouton droit , on efface 
  If MouseButton(2) 
    ; test si dans la map 
    If x<#MapW*#TileSize  And y<#MapH*#TileSize  ;And x > 0 And x > 800 And y > 0 And y < 600
      tx=x/#TileSize
      ty=y/#TileSize
      Map(tx,ty)\Bloc_Type = #efface 
    EndIf  
  EndIf 
  
  If AffichPointeur = 1 And AffichMur = 1 
    
    DisplayTransparentSprite(#Mur, x-SpriteWidth(0)/100, y-SpriteHeight(0)/100) 
    AffichSelection = 1 
    AffichSelectionHerbe = 0 
    
  EndIf 
  
  If AffichHerbe = 1 And AffichPointeur = 1 
    
    DisplayTransparentSprite(#herbe, x-SpriteWidth(0)/100, y-SpriteHeight(0)/100) 
    AffichSelection      = 2 
    AffichSelectionHerbe = 1 
  EndIf 
  
  If AffichSelection = 0 
    AffichSelectionPointeur = 1 
  EndIf 
  
  ;If  AffichSelectionPointeur = 1 
  ;  DisplaySprite(#Pointeur,210 , 130) 
  ; EndIf 
  
  If AffichSelection = 1 
    AffichSelectionMur = 1 
  EndIf 
  
  If AffichSelectionMur = 1 
    DisplaySprite(#Mur,950 ,700) 
  EndIf 
  
  If AffichSelection = 2 
    AffichSelectionHerbe = 1 
  EndIf 
  
  If AffichSelectionHerbe = 1 
    DisplaySprite(#herbe,950 ,700) 
  EndIf 
  
  
  ;Gestion du scrooling 
  ;********************************************************
  
  If KeyboardPushed ( #PB_Key_Left ) 
    Scrolling_X-Scrolling_vitesse 
  EndIf 
  
  If KeyboardPushed ( #PB_Key_Right ) 
    Scrolling_X+Scrolling_vitesse 
  EndIf 
  
  If KeyboardPushed ( #PB_Key_Down ) 
    Scrolling_Y+Scrolling_vitesse 
  EndIf 
  
  If KeyboardPushed ( #PB_Key_Up ) 
    Scrolling_Y-Scrolling_vitesse 
  EndIf 
    ;********************************************************
  ;1024 - 800 ;224
  ;768 - 600 ;168
  
  StartDrawing(ScreenOutput())
    DrawText(950,650,"Current", #White,#Black)
    DrawText(950,670,"  Tile :", #White,#Black)
  StopDrawing()
  ;}
  ;*********************************************************************************** 
  ;{- Save N' Load
  ;*********************************************************************************** 
  
  If KeyboardPushed(#PB_Key_F5)
    If CreateFile(0, "C:\Map_1.map") 
      For v=0 To #MapH -1 
        For u=0 To #MapW -1 
          WriteLong(0,Map(u,v)\Bloc_Type) 
        Next u 
      Next v  
      CloseFile(0) 
    EndIf 
  EndIf
  If KeyboardPushed(#PB_Key_F6)
    If OpenFile(0, "C:\Map_1.map") 
      For v=0 To #MapH -1 
        For u=0 To #MapW -1 
          Map(u,v)\Bloc_Type =ReadLong(0) 
        Next u 
      Next v  
      CloseFile(0) 
    EndIf 
  EndIf
  FlipBuffers() 
  
Until KeyboardReleased(#PB_Key_Escape)
 ;} 
et, en passent, comment est-ce que je pourait faire pour que quand je selectionne les tiles a droite, la tile ne s'affiche pas en arrière.. :(

Sur ce, Merci
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Message par kernadec »

bonjour allasktulu
tu test la position de la souris pour cette zone
et tu empeche la construction des maps a cette position
tu peux aussi mettre tes menus map dans une window child
sans bord
au revoir
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Faut tenir compte du scrolling avant d'ajouter un tile !

Code : Tout sélectionner

      tx=(x+Scrolling_X)/#TileSize 
      ty=(y+Scrolling_Y)/#TileSize
Il faut aussi vérifier que Tx et Ty sont dans les limites de tes tableaux.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
allasktulu
Messages : 34
Inscription : sam. 29/nov./2008 22:42

Message par allasktulu »

Gros Merci à vous 2! :D

EDIT :

J'ai maintenant un problème de array, si les case sont "paint" en dehors du 25x18 (800x600) vers la droite ou vers le bas, j'ai une erreur.

Code : Tout sélectionner

;*********************************************************************************** 
;{- Initiation
;*********************************************************************************** 
InitKeyboard() 
InitSprite() 
InitSprite3D()
InitMouse() 

OpenScreen(1024,768,32,"") 

;}
;*********************************************************************************** 
;{- Stuff
;*********************************************************************************** 
  
Enumeration 
  #efface 
  #Mur 
  #herbe 
  #Pointeur 
  #Selection 
  #R_Hud
  #B_Hud
EndEnumeration 

Structure Map_struct 
  x.f 
  y.f 
  Bloc_Type.l 
EndStructure 

#MapW = 25 ;32;25
#MapH = 18 ;24;18
#TileSize = 32

Scrolling_X=0
Scrolling_Y=0

Scrolling_vitesse = 10.0 

AffichPointeur          = 0 
AffichHerbe             = 0 
AffichMur               = 0 
AffichSelection         = 0 
AffichSelectionPointeur = 0 
AffichSelectionMur      = 0 
AffichSelectionHerbe    = 0 

Global NUM_X_TILE_SCREENS=8  ;largeur du niveau en nbre d'écran (exemple: 8 -> 8*800=6400 colonnes). 
Global NUM_Y_TILE_SCREENS=1  ;hauteur du niveau en nbre d'écran (exemple: 1 -> 1*600=600 lignes). 
Global limitXarray ;limite X du niveau en cours: limitXarray=(NUM_X_TILE_SCREENS*25)-8-8 
Global limitYarray ;limite Y du niveau en cours: limitYarray=(NUM_Y_TILE_SCREENS*18)-1-1 

; largeur et hauteur des tiles ( 64*64). 
Global TILE_WIDTH=32
Global TILE_HEIGHT=32
; 1024*768 semble être le bon choix du moment. 
Global NUM_X_TILES=800 / TILE_WIDTH  ;800/32=25
Global NUM_Y_TILES=600 / TILE_HEIGHT ; 600/32=18 

; ** The total number of tiles on X & Y axes ** Taille du terrain, X et Y ** 
Global TOTAL_NUM_X_TILES= NUM_X_TILES * NUM_X_TILE_SCREENS  ; 25*8= 200 tiles en largeur. 
Global TOTAL_NUM_Y_TILES= NUM_Y_TILES * NUM_Y_TILE_SCREENS ; 18*1= 18 tiles en hauteur.

Global Dim Map.Map_struct(#MapW,#MapH) 

For y = 0 To #MapH 
  For x = 0 To #MapW 
    Map(x,y)\x = x * #TileSize
    Map(x,y)\y = y * #TileSize
    Map(x,y)\Bloc_Type = #efface 
  Next x 
Next y 

limitXarray=6400 - #TileSize
limitYarray=600 - #TileSize
;800/32
;600/32
;}

;*********************************************************************************** 
;{- Sprite
;*********************************************************************************** 

CreateSprite(#efface,32,32) 

CreateSprite(#Mur,32,32) 
StartDrawing(SpriteOutput(#Mur)) 
  Box(0,0,32,32,RGB($41,$61,$F5)) 
  For i = 0 To 100 
    Line(Random(32) , Random(32) , 10, 10, RGB($5E,$C4,$D9)) 
  Next 
StopDrawing() 

CreateSprite(#herbe,32,32) 
StartDrawing(SpriteOutput(#herbe)) 
  Box(0,0,32,32,RGB($FA,$3D,$3D)) 
  For i = 0 To 100 
    Plot(Random(31) , Random(31) , RGB($F9,$FF,$AE)) 
  Next 
StopDrawing() 

CreateSprite(#Pointeur,34,34) 
StartDrawing(SpriteOutput(#Pointeur)) 
  DrawingMode(4) 
  Box(0,0,34 ,34 ,RGB($54,$F5,$50)) 
StopDrawing() 

LoadSprite(#R_Hud,"r_hud.bmp")
LoadSprite(#B_Hud,"b_hud.bmp")

;}
;*********************************************************************************** 
;{- Loop
;*********************************************************************************** 

Repeat 
  
  ClearScreen(RGB(0,0,0) )
  ;affiche la map 
  For v=0 To #MapH  
    For u=0 To #MapW  
      DisplaySprite ( Map(u,v)\Bloc_Type , Map(u,v)\x - Scrolling_X , Map(u,v)\y - Scrolling_Y) 
      ;DisplaySprite(Map(u+Scrolling_X,v+Scrolling_Y),u*#TileSize,v*#TileSize) 
    Next u 
  Next v  
  ExamineKeyboard() 
  
  DisplaySprite(#R_Hud,801,0)
  DisplaySprite(#B_Hud,0,601)
  DisplaySprite(#Mur,950 , 100) ;bleu
  DisplaySprite(#herbe,950 , 150) ;rouge
  DisplaySprite(#Pointeur,950 , 200) 
  ;DisplaySprite(#Selection,0 , 0) 
  
  ExamineMouse()                        
  
  x = MouseX() 
  y = MouseY() 
  
  
  If AffichPointeur = 0  
    DisplayTransparentSprite(#Pointeur,x-SpriteWidth(0)/100, y-SpriteHeight(0)/100) 
    TransparentSpriteColor(#Pointeur, RGB($0,$0,$0) )
  EndIf 
  
  If MouseButton(1) 
    If x > 950 And y > 150 And y < 182 And x < 982    
      
      AffichHerbe    = 1 
      AffichPointeur = 1 
      AffichMur      = 0 
      
    EndIf 
    
    
    If x > 950 And y > 200 And y < 232 And x < 982 ;250
      
      AffichPointeur     = 0 
      AffichSelection    = 0 
      AffichSelectionMur = 0 
      AffichSelectionHerbe = 0 
      
    EndIf 
    
    
    If x > 950 And y > 100 And y < 132 And x < 982  
      
      AffichPointeur = 1 
      AffichMur      = 1 
      AffichHerbe    = 0 
      
    EndIf 
    ; test si dans la map 
    If x<#MapW*#TileSize  And y<#MapH*#TileSize
      tx=(x+Scrolling_X)/#TileSize 
      ty=(y+Scrolling_Y)/#TileSize
      If tx<limitXarray And ty<limitYarray And tx=>0 And ty=>0
        If AffichHerbe 
          Map(tx,ty)\Bloc_Type = #herbe 
        ElseIf AffichMur 
          Map(tx,ty)\Bloc_Type =#Mur 
        EndIf 
      EndIf 
    EndIf
    
    ;Si bouton droit , on efface 
    If MouseButton(2) 
      ; test si dans la map 
      If x<#MapW*#TileSize  And y<#MapH*#TileSize  ;And x > 0 And x > 800 And y > 0 And y < 600
        tx=(x+Scrolling_X)/#TileSize 
        ty=(y+Scrolling_Y)/#TileSize
        If tx<limitXarray And ty<limitYarray And tx=>0 And ty=>0
          Map(tx,ty)\Bloc_Type = #efface 
        EndIf 
      EndIf
    EndIf
  EndIf 

  
  If AffichPointeur = 1 And AffichMur = 1 
    
    DisplayTransparentSprite(#Mur, x-SpriteWidth(0)/100, y-SpriteHeight(0)/100) 
    AffichSelection = 1 
    AffichSelectionHerbe = 0 
    
  EndIf 
  
  If AffichHerbe = 1 And AffichPointeur = 1 
    
    DisplayTransparentSprite(#herbe, x-SpriteWidth(0)/100, y-SpriteHeight(0)/100) 
    AffichSelection      = 2 
    AffichSelectionHerbe = 1 
  EndIf 
  
  If AffichSelection = 0 
    AffichSelectionPointeur = 1 
  EndIf 
  
  ;If  AffichSelectionPointeur = 1 
  ;  DisplaySprite(#Pointeur,210 , 130) 
  ; EndIf 
  
  If AffichSelection = 1 
    AffichSelectionMur = 1 
  EndIf 
  
  If AffichSelectionMur = 1 
    DisplaySprite(#Mur,950 ,700) 
  EndIf 
  
  If AffichSelection = 2 
    AffichSelectionHerbe = 1 
  EndIf 
  
  If AffichSelectionHerbe = 1 
    DisplaySprite(#herbe,950 ,700) 
  EndIf 
  
  
  ;Gestion du scrooling 
  ;********************************************************
  
  If KeyboardPushed ( #PB_Key_Left ) 
    Scrolling_X-Scrolling_vitesse 
  EndIf 
  
  If KeyboardPushed ( #PB_Key_Right ) 
    Scrolling_X+Scrolling_vitesse 
  EndIf 
  
  If KeyboardPushed ( #PB_Key_Down ) 
    Scrolling_Y+Scrolling_vitesse 
  EndIf 
  
  If KeyboardPushed ( #PB_Key_Up ) 
    Scrolling_Y-Scrolling_vitesse 
  EndIf 
    ;********************************************************
  ;1024 - 800 ;224
  ;768 - 600 ;168
  
  StartDrawing(ScreenOutput())
    DrawText(950,650,"Current", #White,#Black)
    DrawText(950,670,"  Tile :", #White,#Black)
  StopDrawing()
  ;}
  ;*********************************************************************************** 
  ;{- Save N' Load
  ;*********************************************************************************** 
  
  If KeyboardPushed(#PB_Key_F5)
    If CreateFile(0, "C:\Map_1.map") 
      For v=0 To #MapH -1 
        For u=0 To #MapW -1 
          WriteLong(0,Map(u,v)\Bloc_Type) 
        Next u 
      Next v  
      CloseFile(0) 
    EndIf 
  EndIf
  If KeyboardPushed(#PB_Key_F6)
    If OpenFile(0, "C:\Map_1.map") 
      For v=0 To #MapH -1 
        For u=0 To #MapW -1 
          Map(u,v)\Bloc_Type =ReadLong(0) 
        Next u 
      Next v  
      CloseFile(0) 
    EndIf 
  EndIf
  FlipBuffers() 
  
Until KeyboardReleased(#PB_Key_Escape)
 ;} 

Code : Tout sélectionner

  
    If tx<limitXarray And ty<limitYarray And tx=>0 And ty=>0
Le problème vien de là, mais je ne sais comment le resoudre. Est encore un conflit entre le scrolling et la map? Car, ils me parraissent bel et bien dans les limites du tableau.
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Salut Allasktulu (tapatrouvéplusimplekompseudo :lol: ),

J'ai commencé aussi un Map Editor. J'étais parti comme toi avec des cases à dimension unique mais rapidement j'ai changé d'optique.
Je définis la taille du carré (ou du rectangle) de sélection en restant appuyé sur le bouton gauche...ensuite je copierai le bloc dans le tableau (j'ai pas encore fait cette copie)
Je t'envoie juste le programme (le code n'a aucun intérêt, il y surement de grosses fautes de méthodes, je débute en PB) pour te montrer le principe de sélection des cases...

http://xdji.free.fr/Telechargement/AreaEditor.zip
Only PureBasic makes it possible
allasktulu
Messages : 34
Inscription : sam. 29/nov./2008 22:42

Message par allasktulu »

Salut Allasktulu (tapatrouvéplusimplekompseudo ),
ouin j'avoue :lol: , au moins je suis le seul a l'avoir ce nom



Et merci pour ton map editor, je vais bien le regarder :D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Je viens de coder ça vite fait, si j'ai le temps je le commenterai un jour, ça me permettra de le simplifier au passage.
Attention, je ne contrôle pas toutes les données , par exemple les dimensions de la box d'affichage.

De quoi s"agit-il ? un petit code qui permet d'afficher une map, de la faire scroller, et le tout dans une box , il suffit d'indiquer les coordonnées de la box et ses dimensions.

Code : Tout sélectionner

InitSprite()
InitKeyboard()
OpenScreen(1024,768,32,"Map")

Enumeration 
  #Herbe
  #Eau
  #Bord
EndEnumeration

Structure S_Box
  x.i
  y.i
  w.i
  h.i
EndStructure

CreateSprite(#Bord,32,32)
CreateSprite(#Herbe,32,32)
CreateSprite(#Eau,32,32)

Declare DessineSprite(Sprite, Couleur)
Declare RandomMap()
Declare AfficheMap()
Declare AfficheBox()

Global Offset.POINT
Global ScreenBox.S_Box

ScreenBox\x=120
ScreenBox\y=100
ScreenBox\w=400
ScreenBox\h=400

DessineSprite(#Bord, #Red)
DessineSprite(#Herbe, #Green)
DessineSprite(#Eau, #Blue)

#Tx=20
#Ty=20
#Taille=32


Global Dim Map(#Tx,#Ty)
RandomMap()

Repeat
  ClearScreen(0)
  If ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Right) And Offset\x<(#Tx+1)*#Taille-ScreenBox\w
      Offset\x + 1
    ElseIf KeyboardPushed(#PB_Key_Left) And Offset\x>0
      Offset\x - 1
    EndIf 
    If KeyboardPushed(#PB_Key_Down) And Offset\y<(#Ty+1)*#Taille-ScreenBox\h
      Offset\y + 1
    ElseIf KeyboardPushed(#PB_Key_Up) And Offset\y>0
      Offset\y - 1
    EndIf       
  EndIf
  
  AfficheMap()
  AfficheBox()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

Procedure DessineSprite(Sprite, Couleur)
  If StartDrawing(SpriteOutput(Sprite))
    Box(0,0,SpriteWidth(Sprite),SpriteHeight(Sprite),Couleur)
    StopDrawing()
    ProcedureReturn #True
  EndIf  
EndProcedure

Procedure RandomMap()
  For y=0 To #Ty
    For x=0 To #Tx
      If x=0 Or x=#Tx Or y=0 Or y=#Ty Or x=#Tx/2 Or y=#Ty/2
        Map(x,y)=#Bord
      Else
        Map(x,y)=Random(1)
      EndIf    
    Next x
  Next y    
EndProcedure

Procedure AfficheBox()
  StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Outlined)
    Box(ScreenBox\x,ScreenBox\y,ScreenBox\w,ScreenBox\h,#White)
  StopDrawing()
EndProcedure

Procedure AfficheMap()
  Define Src.S_Box, Des.S_Box

  Src\y=Offset\y%#Taille
  Src\h=#Taille-Src\y
  
  Py=ScreenBox\y
  y=Offset\y/#Taille

  While Py<ScreenBox\y+ScreenBox\h
    Px=ScreenBox\x   
    x=Offset\x/#Taille    
    Src\x=Offset\x%#Taille
    Src\w=#Taille-Src\x
    While Px<ScreenBox\x+ScreenBox\w 
      ClipSprite(Map(x,y),Src\x,Src\y,Src\w,Src\h)
      DisplaySprite(Map(x,y),Px,Py)
      Px+Src\w
      x+1
      Src\x=0
      Src\w=#Taille
      If (Px+Src\w)>(ScreenBox\x+ScreenBox\w)
        Src\w=ScreenBox\x+ScreenBox\w-Px
      EndIf
    Wend
    Py+Src\h
    y+1
    Src\y=0
    Src\h=#Taille
    If Py+Src\h>ScreenBox\y+ScreenBox\h
      Src\h=ScreenBox\y+ScreenBox\h-Py
    EndIf
  Wend    
EndProcedure
Dernière modification par comtois le mar. 02/déc./2008 19:43, modifié 1 fois.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
allasktulu
Messages : 34
Inscription : sam. 29/nov./2008 22:42

Message par allasktulu »

Belle example! C'est exactement ce que j'essayais de faire, une map contenu dans une espace defini. Il ne manque plus qu'a intégré le "Paint Tool". Il est vrai que la procedure AfficheMap() est asser compliquer a comprendre mais je vais essayer de men sortir.


Merci a tous pour votre aide :D
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Message par Cool Dji »

Supra Comtois,

Superbe découpage des tuiles dans le box. C'est beau et c'est court.
Ya juste un petit bug d'affichage si largeur et hauteur de la box < largeur et hauteur de la tuile mais c'est rien...
C'est bien foutu, j'ai vu comment tu différencies l'affichage des tuiles en bordure qui sont découpées et celles au milieu qui ne le sont pas...

Merci encore Comtois et bravo, j'intègre ce code...
Je me permets de reprendre une citation du Président du Conseil Régional qui s'applique bien à Mr Comtois : "La Franche-Comté, une Région grande par ses talents"
Only PureBasic makes it possible
Répondre