Page 1 sur 1

Plot hors de la zone de dessin

Publié : ven. 04/mars/2005 18:37
par Heis Spiter
Dans le code ci-dessous, j'ai toujours un problème avec les Plot() qui sont hors de la zone de dessin, ce qui devrais en théorie ne pas être le cas... Bug ou faute de programmation ?
PS : Soyez indulgent, moi et les applis pleine écran, ça fait 36000 :? :lol:

Code : Tout sélectionner

Structure Stars
  X.b
  Y.b
  ;Color.l
EndStructure
NewList Stars.Stars()
InitSprite()
For k = 0 To 200
  X = Random(400)
  Y = Random(400)
  AddElement(Stars())
  Stars()\X = X
  Stars()\Y = Y
Next k
If OpenWindow(1, 0, 0, 400, 400, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "X-Wing")
  If OpenWindowedScreen(WindowID(1), 0, 0, 400, 400, 1, 0, 0)
    Repeat
      ClearScreen(0, 0, 0)
      CreateSprite(2, 400, 400)
      If StartDrawing(SpriteOutput(2))
        ResetList(Stars())
        For k = 0 To 200
          NextElement(Stars())
          Plot(Stars()\X, Stars()\Y, RGB(255, 255, 255))
        Next k
        StopDrawing()
      EndIf
      DisplaySprite(2, 0, 0)
      FlipBuffers()
      FreeSprite(2)
    ForEver
  EndIf
EndIf

Publié : ven. 04/mars/2005 18:39
par Le Soldat Inconnu
Fred en a déjà parlé, c'est à toi de vérifier que tu dessines pas n'importe où :wink:

http://purebasic.hmt-forum.com/viewtopic.php?t=1875

Publié : ven. 04/mars/2005 18:54
par Heis Spiter
Mais je vérifie bien (si tu lisais le code... :?)
De plus, j'ai essayé en dessinant des lignes (j'ai revu un peu le code) et ça marche, même si les lignes sont aglutinées dans un coin (aurais-je encore raté qqchose ?)

Code : Tout sélectionner

Structure Stars
  X.b
  Y.b
  ;Color.l
EndStructure
NewList Stars.Stars()
InitSprite()
For k = 0 To 200
  X = Random(400)
  Y = Random(400)
  AddElement(Stars())
  Stars()\X = X
  Stars()\Y = Y
Next k
If OpenWindow(1, 0, 0, 400, 400, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "X-Wing")
  If OpenWindowedScreen(WindowID(1), 0, 0, 400, 400, 1, 0, 0)
    Repeat
      ClearScreen(0, 0, 0)
      If IsSprite(2)
        FreeSprite(2)
      EndIf
      CreateSprite(2, 400, 400)
      If StartDrawing(SpriteOutput(2))
        ResetList(Stars())
        For k = 0 To 200
          NextElement(Stars())
          Line(Stars()\X, Stars()\Y, 1, 1, RGB(255, 255, 255))
          ;Plot(Stars()\X, Stars()\Y, RGB(255, 255, 255))
        Next k
        StopDrawing()
      EndIf
      DisplaySprite(2, 0, 0)
      FlipBuffers(1)
    ForEver
  EndIf
EndIf

Publié : ven. 04/mars/2005 19:10
par djes
regarde ta structure, tu as mis des .b, c'est à dire des valeurs sur un octet ; or, un octet ne peut contenir une valeur que de 0 à 255, ou de -127 à +128.
Remplace les .b par .l et ça ira mieux!

En outre, le random(400) (je sais, c'est illogique), inclut le 0 et le 400. Or, l'écran n'accepte que des valeurs de 0 à 399 (400 valeurs); si tu as 400 ça plante! Tu aurais pû t'en rendre compte en faisant un debug approprié.

Publié : ven. 04/mars/2005 19:19
par Heis Spiter
Oula ! vous cherchiez le roi des fautes cons ? Vous l'avez trouvé :lol:.
Merci en tout cas ;)
PS : Quelqueque chose me fait dire que je vais rester sur Bird Chat :lol:, au moins, ya pas d'écran ! :D