Forum Liberty Basic France

Débutant » Comment fonctionne timer ? Débutant en sprites, je suppose
Le 23/12/2019 à 19h36

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Un chewin-gum virtuel à qui saura faire fonctionner ce programme.

Ce que le programme doit faire : afficher l'heure en binaire

Les bits du mot binaires sont représentés par des sprites :
  • Le bit est à 1, on affiche le sprite
  • Le bit est à 0, on cache le sprite
    en utilisant "spritevisible"


Ce qui fonctionne :
  • création et agencement du fond et des sprites
  • temporisation toutes les secondes (je ne sais pas comment mais ça marche)
  • lire l'heure et la convertir en binaire
  • affecter la valeur de chaque bit au sprite qui lui correspond


Ce qui est là de manière provisoire juste pour voir si ça marche :
  • la copie, sur la mainwin, des commandes "spritevisible"


Les symptômes de ce qui ne va pas :
  • un sprite incongruement affiché en haut à gauche de la fenêtre
  • l'absence de prise en compte de "spritevisible"
  • à la fermeture, lorsque "drawsprite" est décommenté dans [pause], le programme ne trouve pas le nom de la fenêtre à laquelle il appartient, et il provoque un méchant "a non-continuable protection violation has occurred. Check ERROR.LOG file." suivi de la bien-connue fenetre qui veut envoyer un rapport à microsoft, puis par la fermeture sans appel des fenêtres du programme et de l'éditeur JB.


Voilà le patient, est-ce grave, docteur ?
Code VB :
 
 
'horloge à affichage binaire

'nomainwin

'dimensions du graphicbox
'   largeur
xt=160      'position du nom des zones (3 zones : heures, minutes et secondes)
xs=340      'position centre premier sprite
xpassp=70   'pas d'espacement des sprites sur x
largeurgb=xs+xpassp*5+xpassp/2+10
 
'   hauteur
hz=80   'hauteur zone
hauteurgb=12+3*hz+20
 
'dimensions de la fenêtre
WindowWidth=largeurgb+5
WindowHeight=hauteurgb+30
 
'couleurs utilisées
cfond$="38 125 42"      'couleur de fond de la fenêtre
ccara$="230 247 231"    'couleur des inscriptions
clame$="100 100 100"    'couleur des lampes éteintes
clama$="255 250 200"    'couleur des lampes allumées

'caractères des inscriptions
ht=int(hz*2/3)   'hauteur nom des zones
hd=int(hz*1/4)   'hauteur donnée

'sprites-lampe
nbsprites=18
dim spr(nbsprites,3)
    '(nbsprites,0)=coord x
    '(nbsprites,1)=coord y
    '(nbsprites,2)=etat (0=caché, 1=affiché)
rsp=25  'rayon du sprite

graphicbox #cf.s, 0, 0, largeurgb, hauteurgb
 
'ouverture de la fenetre
open "capture sprite" for window as #cf
    print #cf.s, "trapclose [fin]"
    print #cf.s, "down"
    print #cf.s, "fill ";cfond$    'fond

    ns=0    'numero du sprite en cours de définition

    for a=1 to 3
 
        'affichage du nom des zones
        x=xt:y=80+(a-1)*hz
        print #cf.s, "font arial 0 ";ht
 
        print #cf.s, "color ";ccara$       'couleur de ligne
        print #cf.s, "backcolor ";cfond$   'couleur de remplissage

        a$=word$("HEURES MINUTES SECONDES",a)
        print #cf.s, "stringwidth? a$ large"
        print #cf.s, "place ";x-large/2;" ";y
        print #cf.s, "\"+a$
 
        'affichage des lampes
        x=xs:y=12+(a-1)*hz
        print #cf.s, "font arial 0 ";hd
        y1=y
        y2=y+hd
        [h] data 32,16,8,4,2,1
        restore [h]
        for b=1 to 6
            ' affichage de la valeur du bit au dessus de la lampe correspondante
            print #cf.s, "color ";ccara$       'couleur de caractère
            print #cf.s, "backcolor ";cfond$   'couleur de fond
            read a$
            print #cf.s, "stringwidth? a$ large"
            print #cf.s, "place ";x-large/2;" ";y2
            print #cf.s, "\"+a$
 
            'dessin lampes éteintes
            print #cf.s, "color black"    'couleur du crayon en noir
            print #cf.s, "backcolor ";clame$
            print #cf.s, "place ";x;" ";y+hd+rsp+10  'centre du cercle
            print #cf.s, "circlefilled ";rsp
 
            'position et état des sprites
            spr(ns,0)=x-rsp
            spr(ns,1)=y+hd+10
            spr(ns,2)=0  'hem... devraient déjà y être par construction
            ns=ns+1
 
            'voyant suivant
            x=x+xpassp
        next
 
    next
 
    'créer le bitmap de fond
    print #cf.s, "getbmp lefond 0 0 ";largeurgb;" ";hauteurgb
 
    'crééer le bitmap des sprites
    '   dessin du masque
    x1=0
    y1=0
    x2=x1+2*rsp
    y2=y1+2*rsp
    print #cf.s, "cls"
    print #cf.s, "color white"
    print #cf.s, "backcolor white"
    print #cf.s, "place ";x1;" ";y1
    print #cf.s, "boxfilled ";x2;" ";y2
    print #cf.s, "color black"
    print #cf.s, "backcolor black"
    print #cf.s, "place ";x1+rsp;" ";y1+rsp  'centre du cercle
    print #cf.s, "circlefilled ";rsp
 
    '   dessin du sprite
    x3=x1
    y3=y2
    x4=x2
    y4=y3+2*rsp
    print #cf.s, "place ";x3;" ";y3
    print #cf.s, "boxfilled ";x4;" ";y4
    print #cf.s, "color ";clama$
    print #cf.s, "backcolor ";clama$
    print #cf.s, "place ";x3+rsp;" ";y3+rsp
    print #cf.s, "circlefilled ";rsp
 
    '   création du sprite
    print #cf.s, "getbmp lebitmap ";x1;" ";y1;" ";x4;" ";y4
 
    'pour tous les sprites, on affecte les bitmaps au sprite nommé lesprite + n° de série
    for a=0 to nbsprites-1
        print #cf.s, "addsprite lesprite";str$(a);" lebitmap";
    next
 
    'on place le fond de l'écran
    print #cf.s, "cls"
    print #cf.s, "background lefond"
    print #cf.s, "drawsprites"
 
    'on temporise et toutes les secondes on va lire l'heure
    gosub [pause]
 
    wait
 
 
[pause]
    timer 0
    cls
    heure$=time$()
    for b=0 to nbsprites-1:spr(b,2)=0:next   'tous les bits à zéro

    r=5
    for a=1 to 3
        n=val(word$(heure$,a,":"))
        sp=r
        r=r+6
 
        'qu'on met en tableau
        'après l'avoir convertie en binaire
        while n>=1
            spr(sp,2)=n mod 2
            n=int(n/2)
            sp=sp-1
        wend
    next
 
    'pour l'afficher avec les sprites,
    'qui représentent les bits
    'cls
    print heure$
 
 
    for a=0 to nbsprites-1
        if spr(a,2)=1 then
            'print #cf.s, "spritevisible lesprite";str$(a);" on";
            print "spritevisible lesprite";str$(a);" on"
        else
            'print #cf.s, "spritevisible lesprite";str$(a);" off";
            print "spritevisible lesprite";str$(a);" off"
        end if
    next a
 
        'print #cf.s, "drawsprites";
    timer 1000, [pause]
    wait
 
[fin]
 
    unloadbmp "lefond"
    unloadbmp "lebitmap"
    close #cf
    end
 
 
 


Edité pour : branchement sur la temporisation par un GOSUB, comme suggéré par Roland, et ça marche aussi bien, et légère modif au niveau de la conversion en binaire, certains bits conservant leur valeur précédente, qui pouvaient donc être erronée par rapport à la valeur actuelle à afficher.



Edité par Christophe Le 24/12/2019 à 14h34
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 24/12/2019 à 09h13

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2126
Pourquoi ne pas faire un gosub [pause] (plus clair pour le fonctionnement) ?
Et pourquoi ne pas mettre un "drawsprites" après chaque changement d'état des sprites ?
Hey, c'est du LB--> "print #cf.s, "stringwidth? a$ large"
Je testerai plus tard.
____________________
Roro

   
Le 24/12/2019 à 13h31

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2126
Suite du: 24/12/2019 à 09h13
J'ai externalisée la pause, j'ai mis un bouton "go" en tête de boucle et ça:
Code VB :
 
        #cf.s, "color white": #cf.s, "backcolor ";cfond$
        #cf.s, "place 50 20": #cf.s, "\ ";heure$
        gosub [pause]
 

Avant le next de ta boucle, et l'heure ne change pas; concluse sans chercher à comprendre: Y a un os dans la boucle.
Et même en mettant un "for x=1 to 20" en tête de boucle l'heure ne bouge pas, ça coince dans la boucle.
____________________
Roro

   
Le 24/12/2019 à 14h39

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Oki, je vais essayer de décoincer la boucle et voir ce qu'il y a avant mon "next". Dans la mainwin les heures défilent normalement, c'est juste l'affichage des sprites qui ne se fait pas

Pour le stringwidth, on y a droit depuis la version 2 de JustBasic
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 24/12/2019 à 14h56

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Que je place Code VB :
 
        #cf.s, "color white": #cf.s, "backcolor ";cfond$
        #cf.s, "place 50 20": #cf.s, "\ ";heure$ 

avant ou après le gosub, rien ne s'affiche, et c'est là l'incompréhension, car cela m'a obligé à mettre toute la mécanique de conversion et d'affichage dans la boucle chargée de la temporisation.

Et c'est dans cette boucle que l'exécution coince en me disant que #cf.s est un "handle" invalide.



Edité par Christophe Le 24/12/2019 à 15h10
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 24/12/2019 à 15h16

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2126
Citation:
me disant que #cf est un "handle" invalide.

Oui j'ai vu ça, j'ai remplacé "#cf" par "#c" et pareil: "#c "invalide
C'est peut-être le while dans le for, je ne vois que ça comme hypothèse.
Je pense que tu a attaqué trop fort sans tester au fur et à mesure de l'avancement; me trompe-je ?.
____________________
Roro

   
Le 24/12/2019 à 17h32

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Ugh !

Citation:
Et c'est dans cette boucle que l'exécution coince en me disant que #cf.s est un "handle" invalide.

J'ai oublié de préciser, pour nos lecteurs qui n'auraient pas testé le programme, que c'est seulement au moment de quitter qu'on a le message du "handle" invalide. Durant l'exécution il n'y a pas de plantage (mais aucun sprite à l'écran...)

Citation:
Je pense que tu a attaqué trop fort sans tester au fur et à mesure de l'avancement

Pourtant si, j'y suis allé étape par étape : crééer les sprites et le fond, les afficher, leur faire afficher un mot binaire, convertir un nombre de base 10 en base 2, puis l'heure. le projet a achoppé dans la dernière étape - prendre l'heure toutes les secondes - avec des "spritevisible" ignorés, un "drawsprite" qui ne retrouve plus sa fenêtre, et un "timer"auquel je n'ai rien compris.

Citation:
C'est peut-être le while dans le for, je ne vois que ça comme hypothèse

Je ne crois pas, car il est relativement courant de faire des boucles imbriquées, et je suppose qu'il y a longtemps qu'on aurait débusqué le lièvre s'il y en avait un dans cette config. Je penche plutôt pour une utilisation du timer qui sème la pagaille : les instructions des sprites n'agissent plus, et ne retrouvent plus leur fenêtre d'origine lorsqu'on ferme le programme...



Edité par Christophe Le 24/12/2019 à 17h34
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 24/12/2019 à 18h47

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2126
Citation:
une utilisation du timer qui sème la pagaille

ça, c'est pas impossible, il faudrait arriver à faire fonctionner avec la procédure "normale" (gosub [pause])

EDIT: Je cherche en vain dans la doc l'instruc: "savebmp"; je suis sûr qu'elle existe je l'ai déjà utilisée; mais elle est introuvable.
____________________
Roro

   
Le 24/12/2019 à 19h47

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Surtout que c'est "bmpsave". Un coup de fatigue ? ;)

J'ai allumé la télé : il n'y a que des chants de noël, j'suis sûr qu'on me cache encore quelque chose. ;) ;) ;)

Je n'ai plus guère le temps de me pencher sur notre basic dans les heures qui viennent.

Bon Noël, Roland et les autres

à+
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 25/12/2019 à 00h02

Libertynaute

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 71
Joyeux Noël à Tous
____________________
Castel

   
Le 25/12/2019 à 09h41

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2126
Citation:
Surtout que c'est "bmpsave"

Ah ben voila pourquoi je ne trouvais pas.
Et bonnes fêtes à tous.

EDIT: maintenant que démonstration a été faite de la création de sprite ex nihilo il faudrait peut-être en faire des bmp et extraire la machine infernale du code, histoire d'y voir plus clair.
____________________
Roro

   
Le 27/12/2019 à 21h57

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Tiens, pour satisfaire tes désirs, je te prépare un zip pour demain, là je n'ai guère le temps, et je te propose de piocher dans ta collection de sprites via un "filedialog".

En fait j'ai simplifié à l’extrême, en supprimant tout ce qui n'était pas "affichage des sprites", et en remplaçant tous les calculs de dimensionnement des éléments graphiques par des données "en dur"

Par rapport au programme complet :
  • différence : les instructions graphiques sont prises en compte
  • point commun : toujours mon "invalid handle" qui aboutit à la "non-continuable protection violation" au moment de fermer le programme.

Il suffira de dé-commenter le timer pour constater le problème.

Code VB :
 
'nomainwin

'sprites
filedialog "Choisir un sprite","*.bmp",sprite$
if sprite$="" then end else loadbmp "lebitmap", sprite$
 
graphicbox #f.gb, 0, 0, 600, 400
 
'ouverture de la fenetre
open "affiche et déplace le sprite" for window as #f
 
    'pour sortir de la fenêtre
    print #f.gb, "trapclose [fin]";
 
    'générer les graphismes
    print #f.gb, "down";
    print #f.gb, "fill darkgreen";
    print #f.gb, "getbmp lefond 0 0 600 400";   'fond
    print #f.gb, "addsprite lesprite lebitmap"; 'sprite

    'afficher les graphismes
    print #f.gb, "cls";
    print #f.gb, "background lefond";
    print #f.gb, "spritexy lesprite 50 50";
    print #f.gb, "drawsprites";
 
    'toutes les secondes, déplacer le sprite
    'timer 1000, [top]

    wait
 
 
[top]
    timer 0
    print #f.gb, "spritemovexy lesprite 5 5";
    print #f.gb, "drawsprites";
    timer 1000, [top]
    wait
 
[fin]
 
    unloadbmp "lefond"
    unloadbmp "lebitmap"
    close #f
    end
 
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 28/12/2019 à 00h17

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2126
ça marche, mais gloups! y a le #f.gb invalide; le timer est décidément bien réticent
En gosub il est plus compréhensif--> http://libertybasic.fr/forum/topic-554+horloge-binaire.php
Tu me dira combien je te dois de royalties pour le fond.
____________________
Roro

   
Le 28/12/2019 à 17h47

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Pour le fond, rien d'autre qu'un café, un sucre et une touche de lait ;) je te répond dans le courant du week-end pour ton horloge sans sprites, qui fait le job, d'ailleurs.

Pour en revenir à notre "invalid handle", j'ai réécrit [top] en ajoutant <print "passe en [top]"> et en mettant en commentaire les instructions concernant les sprites :
Code VB :
 
[top]
    timer 0
    print "passe en [top]"
    'print #f.gb, "spritemovexy lesprite 5 5";
    'print #f.gb, "drawsprites";
    timer 1000, [top]
    wait
 

et là, je n'ai plus de #f.gb invalide, donc ce sont bien les instructions graphiques qui sèment le bronx.

Autre trouvaille, qui explique pourquoi les instructions graphiques sèment le bronx : on passe en [top] toutes les secondes, ...même quand on a fermé la fenêtre graphique.

Normalement, si on a fermé la fenêtre graphique, on a aussi fermé le programme, puisque le "trapclose" branche sur une section qui décharge les bitmaps, ferme la fenêtre, et met fin au programme avec un "end".

On ne peut pas faire une fermeture de programme plus explicite et plus dans les normes.

Pour essayer de comprendre comment on pouvait fermer la fenêtre sans achever le programme, j'ai complété [fin] avec "timer 0" et, comme témoin de passage, j'ai ajouté <print "fin">, comme ceci :
Code VB :
 
[fin]
    timer 0
    print "fin"
    unloadbmp "lefond"
    unloadbmp "lebitmap"
    close #f
    end
 


Eh bien le timer continue de brancher sur [top] toutes les secondes, et à aucun moment le mot "fin" n'apparait dans la mainwin, donc le trapclose ferme bien la fenêtre mais ne branche pas sur la routine de fin.

Et la fenêtre graphique n'existant plus, il est tout à fait normal que vouloir y dessiner quelque chose se traduise par un "Invalid file handle : #f.gb"

Je me sens un peu démuni, et je ne sais pas quoi faire.



Edité par Christophe Le 28/12/2019 à 17h49
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 28/12/2019 à 18h22

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Voici un zip contenant un sprite et la version du programme d'essai avec les modifications citées dans mon précédent post : essai sprite timer

l'envoi à [top] est initialement fait avec un "timer", parce que je me suis inspiré d'une formulation trouvée dans l'aide, mais un "gosub [top] donne le même résultat...
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 28/12/2019 à 19h01

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2126
Le timer doit être considéré comme une interruption (pause- arrêt) du programme.
Code VB :
 
[pause]  'on veut une pause (arrêt)
        timer 1000, [temps]   'démarrage du timer (de la pause)
        wait
        [temps] 
        timer 0  'arrêt du timer
return  ' (reprise du programme)

Toi tu veux tordre le bras du timer, c'est normal qu'il crie.

Dans ce soft on peut voir comment Cassiope à utilisé le timer
Cherche "timer" avec le "find" de "Edit" de l'éditeur
submarine_simulator.zip
____________________
Roro

   
Le 28/12/2019 à 19h02

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
J'ai une solution provisoire qui consiste à détecter l'erreur avec "on error goto", mais ce serait nettement mieux que je puisse l'anticiper, plutot que de la détecter après coup.

Voici la modif à faire
Code VB :
 
[top]
    on error goto [errorHandler]
    timer 0
    print "passe en [top]"
    print #f.gb, "spritemovexy lesprite 5 5";
    print #f.gb, "drawsprites";
    timer 1000, [top]
    wait
 
[errorHandler]
  print "Error string is " + chr$(34) + Err$ + chr$(34)
  print "Error number is ";Err
  goto [fin]
 


Dans [errorHandler] j'aurais dû mettre "timer 0", mais l'instruction est déjà dans [fin]

et voilà ce que dit la mainwin
Code TEXT :
 
passe en [top]
passe en [top]
passe en [top]
passe en [top]
passe en [top]
Error string is "Invalid  handle: #f.gb"
Error number is 0
fin
 


Et là, on a bien le mot "fin" attestant que les bonnes instructions ont été données pour une fermeture propre du programme.
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 28/12/2019 à 19h03

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Citation:
Dans ce soft on peut voir comment Cassiope à utilisé le timer

Je vais aller voir
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 29/12/2019 à 01h32

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Je suppose avoir remis les fils à l'endroit en ce qui concerne le timer, mais le problème n'est pas réglé : fermer la fenêtre aboutit toujours sur le crash.

En désespoir de cause, j'ai placé un bouton "quitter" qui pointe sur [fin], et là, ô miracle : fermeture propre et nette du programme, et plus de timer qui tourne encore quand la fenêtre est fermée.

D'accord, on a le bouton qui va bien, mais on peut remercier le "on error goto" quand on ferme la fenêtre en cliquant sur la croix, il y a encore un truc qui ne va pas.

Je soumets ma modif à ta sagacité :

Code VB :
 
 
'nomainwin

'sprites
loadbmp "lebitmap", "titelumiere.bmp"
 
'futur fond
graphicbox #f.gb, 0, 0, 600, 400
 
'pour quitter
WindowHeight=460
button #f.b, "Quitter", [fin], ul, 150, 410, 100, 20
 
'ouverture de la fenetre
open "affiche et déplace le sprite" for window as #f
 
    'pour sortir de la fenêtre
    print #f.gb, "trapclose [fin]";
 
    'génerer les graphismes
    print #f.gb, "down";
    print #f.gb, "fill darkgreen";
    print #f.gb, "getbmp lefond 0 0 600 400";   'fond
    print #f.gb, "addsprite lesprite lebitmap"; 'sprite

    'afficher les graphismes
    print #f.gb, "cls";
    print #f.gb, "background lefond";
    print #f.gb, "spritexy lesprite 50 50";
    print #f.gb, "drawsprites";
 
    'toutes les secondes on déplace le sprite

    [top]
    on error goto [errorHandler]
    print "passe en [top]"
    print #f.gb, "spritemovexy lesprite 5 5";
    print #f.gb, "drawsprites";
    timer 1000, [top]
wait
 
[errorHandler]
    print "Error string is " + chr$(34) + Err$ + chr$(34)
    print "Error number is ";Err
    goto [fin]
 
[fin]
    timer 0
    print "fin"
    unloadbmp "lefond"
    unloadbmp "lebitmap"
    close #f
    end
 
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 29/12/2019 à 09h50

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 553
Il est clair qu'il y a un truc que je ne capte pas au sujet de ce timer, j'ai passé trop de temps sur cet essai, et j'ai d'autres activités en souffrance, je reviendrai plus tard. A+
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Débutant » Comment fonctionne timer ? Débutant en sprites, je suppose  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie