Page 1 sur 1

[REGLE] Bugs grille

Publié : mar. 08/août/2006 9:44
par Progi1984
Voilà, je suis en train de créer un tool, et j'ai besoin d'afficher une grille, mais le truc bizarre, c'est que la grille est différente sur chaque écran...

Code : Tout sélectionner

;- DECLS - Macros
Macro RuntimeError(message)
  MessageRequester("MagicMap",message)
EndMacro 
;- DECLS - Globales
Global prefs_grille
Global Grille_Hauteur,Grille_Largeur
Global Map_Hauteur,Map_Largeur,Map_Layers
Global Tile_Hauteur.l,Tile_Largeur.l
Global TileBox_Hauteur.l,TileBox_Largeur.l
;- DECLS - Constantes
Enumeration
  #Map_Grille
  #Map_Grille3D
  #Mouse
  #TileSet
EndEnumeration
;- DECLS - Procédure
Declare Init_System()
Declare MagicMap_Open()
Declare MagicMap_Init()
Declare Map_Update()

Init_System()

;{ Valeurs Repeat
  Prefs_grille=1
  Tile_Hauteur=48
  Tile_Largeur=48
  TileBox_Hauteur=48
  TileBox_Largeur=48
  Map_Hauteur=128
  Map_Largeur=128
  Map_Layers=2
;}
MagicMap_Open()
MagicMap_Init()
Repeat
  Event  = WindowEvent()
  Gadget = EventGadget()
  Menu   = EventMenu()
  Select Event
    Case #PB_Event_CloseWindow
      Quit=1
  EndSelect
  Map_Update()
Until quit=1
Procedure Init_System()
  InitSprite()
  InitSprite3D()
  InitKeyboard()
EndProcedure
Procedure MagicMap_Open()
  Grille_Hauteur=600-(600 % Tile_Hauteur)
  Grille_Largeur=800-(800 % Tile_Largeur)
  OpenWindow(0,10,10,Grille_Largeur,Grille_Hauteur,"MagicMap - <Nouveau>",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(0),0,0,Grille_Largeur,Grille_Hauteur,0,0,0)
EndProcedure
Procedure MagicMap_Init()
  CreateSprite(#Map_Grille,800,600,#PB_Sprite_Texture)
  If StartDrawing(SpriteOutput(#Map_Grille))
    For i=0 To 600
      If i%Tile_Hauteur=Tile_Hauteur-1
        Line(0,i,800,0, RGB(25,69,74))
      EndIf
    Next
    For i=0 To 800
      If i%Tile_Largeur=Tile_Largeur-1
        Line(i,0,0,600, RGB(25,69,74))
      EndIf
    Next
    StopDrawing()
  EndIf
  CreateSprite3D(#Map_Grille3D,#Map_Grille)
  TransparentSpriteColor(#PB_Default ,RGB(255,0,0))
  LoadSprite(#Mouse,"curseur.bmp")  
EndProcedure
Procedure Map_Update()
  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))
  Start3D()
  ; affichage de la grille
  If prefs_grille=1
    DisplaySprite3D(#Map_Grille3D,0,0,255)
  EndIf
  Stop3D()
  Delay(1)
EndProcedure

Publié : mar. 08/août/2006 11:37
par Backup
ça viens peut etre de la (erreur tres classique) :D

tu met dans tes boucles

Code : Tout sélectionner

For i=0 To 600
et pareil pour la boucle 800

hors je te rapel que de 0 a 600 cela fait 601 !!!
et que de 0 a 800 cela fait 801 !!!

en fait je ne comprends pas ce qui ne vas pas !!
chez moi ça dessine bien une grille !:D

Publié : mar. 08/août/2006 13:22
par Progi1984
Moi,j'ai un effet bizarre :

Image

Publié : mar. 08/août/2006 13:28
par Dr. Dri
Déjà première chose, ton Sprite3D n'est pas d'une taille n*n avec n une puissance de 2 (8, 16, 32, 64, 128, 256...)

Donc rien que chez moi ca ne fonctionne pas du tout (écran tout blanc)

Ensuite, tu utilises un Sprite3D, donc il se peut que ta carte graphique "redimensionne" la texture de 800*600 vers 800*600 et que son calcul ne soit pas précis au pixel près.

Dri

Publié : mar. 08/août/2006 13:40
par Backup
je suis d'accords avec Dri, car chez moi le seul defaut c'est un decalage d'un pixel sur la grille qui se repete en diagonal :D

Publié : mar. 08/août/2006 15:43
par Progi1984
Moi aussi, j'ai ce poblème sur un autre pc !

Publié : mer. 09/août/2006 13:26
par Progi1984
Bon, c'était parceque le sprite n'était pas un multiple de 2... mtnt c fonctionnel

Code : Tout sélectionner

;- DECLS - Macros
Macro RuntimeError(message)
  MessageRequester("MagicMap",message)
EndMacro 
;- DECLS - Globales
Global prefs_grille
Global Grille_Hauteur,Grille_Largeur
Global Map_Hauteur,Map_Largeur,Map_Layers
Global Tile_Hauteur.l,Tile_Largeur.l
Global TileBox_Hauteur.l,TileBox_Largeur.l
;- DECLS - Constantes
Enumeration
  #Map_Grille
  #Map_Grille3D
  #Mouse
  #TileSet
EndEnumeration
;- DECLS - Procédure
Declare Init_System()
Declare MagicMap_Open()
Declare MagicMap_Init()
Declare Map_Update()

Init_System()

;{ Valeurs Repeat
  Prefs_grille=1
  Tile_Hauteur=48
  Tile_Largeur=48
  TileBox_Hauteur=48
  TileBox_Largeur=48
  Map_Hauteur=128
  Map_Largeur=128
  Map_Layers=2
;}
MagicMap_Open()
MagicMap_Init()
Repeat
  Event  = WindowEvent()
  Gadget = EventGadget()
  Menu   = EventMenu()
  Select Event
    Case #PB_Event_CloseWindow
      Quit=1
  EndSelect
  Map_Update()
Until quit=1
Procedure Init_System()
  InitSprite()
  InitSprite3D()
  InitKeyboard()
EndProcedure
Procedure MagicMap_Open()
  Grille_Hauteur=600-(600 % Tile_Hauteur)
  Grille_Largeur=800-(800 % Tile_Largeur)
  OpenWindow(0,10,10,Grille_Largeur,Grille_Hauteur,"MagicMap - <Nouveau>",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(0),0,0,Grille_Largeur,Grille_Hauteur,0,0,0)
EndProcedure
Procedure MagicMap_Init()
  CreateSprite(#Map_Grille,64,64,#PB_Sprite_Texture)
  If StartDrawing(SpriteOutput(#Map_Grille))
    For i=0 To 128
      If i%Tile_Hauteur=Tile_Hauteur-1
        Line(0,i,800,0, RGB(25,69,74))
      EndIf
    Next
    For i=0 To 128
      If i%Tile_Largeur=Tile_Largeur-1
        Line(i,0,0,600, RGB(25,69,74))
      EndIf
    Next
    StopDrawing()
  EndIf
  CreateSprite3D(#Map_Grille3D,#Map_Grille)
  TransparentSpriteColor(#PB_Default ,RGB(255,0,0))
  LoadSprite(#Mouse,"curseur.bmp")  
EndProcedure
Procedure Map_Update()
  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))
  Start3D()
  ; affichage de la grille
  If prefs_grille=1
    For i=0 To 800
      For j=0 To 600
        If i%Tile_Hauteur=Tile_Hauteur-1 And j%Tile_Largeur=Tile_Largeur-1
          DisplaySprite3D(#Map_Grille3D,i-Tile_Hauteur,j-Tile_Largeur,255)
        EndIf
      Next
    Next
  EndIf
  Stop3D()
  Delay(1)
EndProcedure