IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PureBasic Discussion :

Animation : léger hang up sous Windows


Sujet :

PureBasic

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut Animation : léger hang up sous Windows
    Bonjour,
    avec le code suivant (petit test graphique sous windows), l'animation saute par moments. quelqu'un saurait-il pourquoi ?

    J'ai essayé avec un delay(1) mais rien n'y fait. Toujours un léger saut toutes les 4-5 secondes (sous Windows XP SP3).

    Merci !
    Sam

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    ; ------------------------------------------------------------
    ; graphical test in a window
    ; ------------------------------------------------------------
    i=0
    x=0
    y=0
    pi=3.1415927
     
    If InitKeyboard() = 0 Or InitMouse() = 0 Or InitSprite() = 0
      MessageRequester("Error", "Can't open system resources", 0)
      End
    EndIf
     
    If OpenWindow(0, 0, 0, 200, 200, "A screen in a window...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
      If OpenWindowedScreen(WindowID(0), 0, 0, 1, 1, 1, 0, 0)
      Else
        MessageRequester("Error", "Can't open windowed screen!", 0)
        End
      EndIf
    EndIf
     
    Repeat
    i=i+1 : If i>359 : i=0 : EndIf
     
      Repeat
        Event = WindowEvent()
        If Event = #PB_Event_CloseWindow
          End 
        EndIf
      Until Event = 0
     
      FlipBuffers() 
      ClearScreen(RGB(0, 0, 0))
      StartDrawing(WindowOutput(0))
      For j=0 To 9
        Line(75,75,50*Sin((i+j)/360*2*pi),50*Cos((i+j)/360*2*pi),RGB(j*25,j*25,j*25))
      Next j
      StopDrawing()
    ;  Delay(1)
    ForEver

  2. #2
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 262
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 262
    Points : 9 924
    Points
    9 924
    Billets dans le blog
    8
    Par défaut
    Salut

    Tu n'as pas besoin d'écrire ta variable pi, la constante #PI est déjà définie dans les fichiers résidents.

    Ensuite, je te conseille de créer une constante pour convertir tes degrés en radian, ça t'évitera de répéter le calcul à chaque fois que tu auras besoin de faire la conversion.

    Et pour l'utiliser Cos(Angle_en_degre * #Deg2Rad)

    Ensuite, tu ajoutes un OpenWindowedScreen() dans ton code, mais tu dessines sur la fenêtre et pas sur l'écran. tu devrais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StartDrawing(ScreenOutput())
    Et pour finir, je vois que tu reprends l'exemple de l'aide, mais je crois qu'il faudrait le modifier car il induit en erreur.

    En effet le paramètre AutoStretch ne redimensionne pas l'écran à la taille de la fenêtre, mais provoque un étirement.
    Donc comme tu as mis un écran de taille 1x1 il garde cette taille, c'est à dire que tu ne vois qu'un seul pixel grossi à la taille de la fenêtre.
    il faut donc que tu dimensionnes ton écran à la même taille que ta fenêtre ou plus petit si tu veux, mais en connaissance de cause.

    Par exemple essaye ça et change la couleur de ClearScreen($FF0000) pour voir la différence.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpenWindowedScreen(WindowID(0), 0, 0, 150, 150, 0, 0, 0)
    Ensuite test avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpenWindowedScreen(WindowID(0), 0, 0, 150, 150, 1, 0, 0)
    Dans ce cas la taille de ton écran n'a pas changé, tu as toujours 150x150 pixels, il est juste étiré aux dimensions de ta fenêtre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    i=0
    x=0
    y=0
     
    #Deg2Rad = #PI/180
     
    If InitKeyboard() = 0 Or InitMouse() = 0 Or InitSprite() = 0
      MessageRequester("Error", "Can't open system resources", 0)
      End
    EndIf
     
    If OpenWindow(0, 0, 0, 200, 200, "A screen in a window...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
      If OpenWindowedScreen(WindowID(0), 0, 0, 150, 150, 1, 0, 0)
      Else
        MessageRequester("Error", "Can't open windowed screen!", 0)
        End
      EndIf
    EndIf
     
    Repeat
    i=i+1 : If i>359 : i=0 : EndIf
     
      Repeat
        Event = WindowEvent()
        If Event = #PB_Event_CloseWindow
          End 
        EndIf
      Until Event = 0
     
      FlipBuffers() 
      ClearScreen($FF0000)
      StartDrawing(ScreenOutput())
      For j=0 To 9
        Line(75,75,50*Sin((i+j)*#Deg2Rad),50*Cos((i+j)*#Deg2Rad),RGB(j*25,j*25,j*25))
      Next j
      StopDrawing()
    ;  Delay(1)
    ForEver
    Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Excellent !
    Merci pour les détails.
    C'est vrai que tracer directement dans la fenêtre semble + rapide.

    J'ai updaté un peu le code et tout marche à merveille !
    C'est une bonne base de code pour essayer de faire un effet graphique ou deux dedans.

    Sam

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  2. Assembleur sous Windows et sous Linux
    Par Bibouda dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 28/10/2002, 07h55
  3. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo