[REGLE] Bugs grille

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

[REGLE] Bugs grille

Message 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
Dernière modification par Progi1984 le mer. 09/août/2006 13:26, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Moi,j'ai un effet bizarre :

Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Moi aussi, j'ai ce poblème sur un autre pc !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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
Répondre